http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java index 6d3055e..34539e1 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/OmConverter.java @@ -1,56 +1,56 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.backup; - -import org.simpleframework.xml.convert.Converter; -import org.simpleframework.xml.stream.InputNode; - -public abstract class OmConverter<T> implements Converter<T> { - static long getLong(InputNode node) throws Exception { - return getLong(node.getValue()); - } - - static long getLong(String value) { - return getLong(value, 0); - } - - static long getLong(String value, long def) { - long result = def; - try { - result = Long.valueOf(value).longValue(); - } catch (Exception e) { - //no op - } - return result; - } - - static int getInt(InputNode node) throws Exception { - return getInt(node.getValue(), 0); - } - - static int getInt(String value, int def) { - int result = def; - try { - result = Integer.valueOf(value).intValue(); - } catch (Exception e) { - //no op - } - return result; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.backup; + +import org.simpleframework.xml.convert.Converter; +import org.simpleframework.xml.stream.InputNode; + +public abstract class OmConverter<T> implements Converter<T> { + static long getLong(InputNode node) throws Exception { + return getLong(node.getValue()); + } + + static long getLong(String value) { + return getLong(value, 0); + } + + static long getLong(String value, long def) { + long result = def; + try { + result = Long.valueOf(value).longValue(); + } catch (Exception e) { + //no op + } + return result; + } + + static int getInt(InputNode node) throws Exception { + return getInt(node.getValue(), 0); + } + + static int getInt(String value, int def) { + int result = def; + try { + result = Integer.valueOf(value).intValue(); + } catch (Exception e) { + //no op + } + return result; + } +}
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java index 3381b3f..365904d 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/PollTypeConverter.java @@ -1,38 +1,38 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.backup; - -import org.apache.openmeetings.db.entity.room.RoomPoll; -import org.simpleframework.xml.stream.InputNode; -import org.simpleframework.xml.stream.OutputNode; - -public class PollTypeConverter extends OmConverter<RoomPoll.Type> { - public PollTypeConverter() {} - - @Override - public RoomPoll.Type read(InputNode node) throws Exception { - return RoomPoll.Type.get(getLong(node)); - } - - @Override - public void write(OutputNode node, RoomPoll.Type value) throws Exception { - node.setData(true); - node.setValue(value == null ? "0" : "" + value.getId()); - } +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.backup; + +import org.apache.openmeetings.db.entity.room.RoomPoll; +import org.simpleframework.xml.stream.InputNode; +import org.simpleframework.xml.stream.OutputNode; + +public class PollTypeConverter extends OmConverter<RoomPoll.Type> { + public PollTypeConverter() {} + + @Override + public RoomPoll.Type read(InputNode node) throws Exception { + return RoomPoll.Type.get(getLong(node)); + } + + @Override + public void write(OutputNode node, RoomPoll.Type value) throws Exception { + node.setData(true); + node.setValue(value == null ? "0" : "" + value.getId()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java index e751335..128ee13 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RecordingStatusConverter.java @@ -1,47 +1,47 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.backup; - -import org.apache.openmeetings.db.entity.record.Recording; -import org.apache.openmeetings.db.entity.record.Recording.Status; -import org.simpleframework.xml.stream.InputNode; -import org.simpleframework.xml.stream.OutputNode; - -public class RecordingStatusConverter extends OmConverter<Recording.Status> { - private static final String PROCESSING = "PROCESSING"; - public RecordingStatusConverter() {} - - @Override - public Recording.Status read(InputNode node) throws Exception { - Recording.Status result = null; - String val = node.getValue(); - try { - result = Recording.Status.valueOf(val); - } catch (Exception e) { - result = PROCESSING.equals(val) ? Status.CONVERTING : Status.NONE; - } - return result; - } - - @Override - public void write(OutputNode node, Recording.Status value) throws Exception { - node.setData(true); - node.setValue(value == null ? Status.NONE.name() : value.name()); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.backup; + +import org.apache.openmeetings.db.entity.record.Recording; +import org.apache.openmeetings.db.entity.record.Recording.Status; +import org.simpleframework.xml.stream.InputNode; +import org.simpleframework.xml.stream.OutputNode; + +public class RecordingStatusConverter extends OmConverter<Recording.Status> { + private static final String PROCESSING = "PROCESSING"; + public RecordingStatusConverter() {} + + @Override + public Recording.Status read(InputNode node) throws Exception { + Recording.Status result = null; + String val = node.getValue(); + try { + result = Recording.Status.valueOf(val); + } catch (Exception e) { + result = PROCESSING.equals(val) ? Status.CONVERTING : Status.NONE; + } + return result; + } + + @Override + public void write(OutputNode node, Recording.Status value) throws Exception { + node.setData(true); + node.setValue(value == null ? Status.NONE.name() : value.name()); + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java index 3a0fa36..20ccba1 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomConverter.java @@ -1,55 +1,55 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.backup; - -import java.util.Map; - -import org.apache.openmeetings.db.dao.room.RoomDao; -import org.apache.openmeetings.db.entity.room.Room; -import org.simpleframework.xml.stream.InputNode; -import org.simpleframework.xml.stream.OutputNode; - -public class RoomConverter extends OmConverter<Room> { - private RoomDao roomDao; - private Map<Long, Long> idMap; - - public RoomConverter() { - //default constructor is for export - } - - public RoomConverter(RoomDao roomDao, Map<Long, Long> idMap) { - this.roomDao = roomDao; - this.idMap = idMap; - } - - @Override - public Room read(InputNode node) throws Exception { - long oldId = getLong(node); - long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId; - - Room r = roomDao.get(newId); - return r == null ? new Room() : r; - } - - @Override - public void write(OutputNode node, Room value) throws Exception { - node.setData(true); - node.setValue(value == null ? "0" : "" + value.getId()); - } +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.backup; + +import java.util.Map; + +import org.apache.openmeetings.db.dao.room.RoomDao; +import org.apache.openmeetings.db.entity.room.Room; +import org.simpleframework.xml.stream.InputNode; +import org.simpleframework.xml.stream.OutputNode; + +public class RoomConverter extends OmConverter<Room> { + private RoomDao roomDao; + private Map<Long, Long> idMap; + + public RoomConverter() { + //default constructor is for export + } + + public RoomConverter(RoomDao roomDao, Map<Long, Long> idMap) { + this.roomDao = roomDao; + this.idMap = idMap; + } + + @Override + public Room read(InputNode node) throws Exception { + long oldId = getLong(node); + long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId; + + Room r = roomDao.get(newId); + return r == null ? new Room() : r; + } + + @Override + public void write(OutputNode node, Room value) throws Exception { + node.setData(true); + node.setValue(value == null ? "0" : "" + value.getId()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java index 2696c27..a6f8f5b 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/RoomTypeConverter.java @@ -1,38 +1,38 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.backup; - -import org.apache.openmeetings.db.entity.room.Room.Type; -import org.simpleframework.xml.stream.InputNode; -import org.simpleframework.xml.stream.OutputNode; - -public class RoomTypeConverter extends OmConverter<Type> { - public RoomTypeConverter() {} - - @Override - public Type read(InputNode node) throws Exception { - return Type.get(getInt(node)); - } - - @Override - public void write(OutputNode node, Type value) throws Exception { - node.setData(true); - node.setValue(value == null ? "0" : "" + value.getId()); - } +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.backup; + +import org.apache.openmeetings.db.entity.room.Room.Type; +import org.simpleframework.xml.stream.InputNode; +import org.simpleframework.xml.stream.OutputNode; + +public class RoomTypeConverter extends OmConverter<Type> { + public RoomTypeConverter() {} + + @Override + public Type read(InputNode node) throws Exception { + return Type.get(getInt(node)); + } + + @Override + public void write(OutputNode node, Type value) throws Exception { + node.setData(true); + node.setValue(value == null ? "0" : "" + value.getId()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java index 70e19af..59e680a 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/SalutationConverter.java @@ -1,36 +1,36 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.backup; - -import org.apache.openmeetings.db.entity.user.User.Salutation; -import org.simpleframework.xml.stream.InputNode; -import org.simpleframework.xml.stream.OutputNode; - -public class SalutationConverter extends OmConverter<Salutation> { - @Override - public Salutation read(InputNode node) throws Exception { - return Salutation.get(getInt(node)); - } - - @Override - public void write(OutputNode node, Salutation value) throws Exception { - node.setData(true); - node.setValue(value == null ? "0" : "" + value.getId()); - } +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.backup; + +import org.apache.openmeetings.db.entity.user.User.Salutation; +import org.simpleframework.xml.stream.InputNode; +import org.simpleframework.xml.stream.OutputNode; + +public class SalutationConverter extends OmConverter<Salutation> { + @Override + public Salutation read(InputNode node) throws Exception { + return Salutation.get(getInt(node)); + } + + @Override + public void write(OutputNode node, Salutation value) throws Exception { + node.setData(true); + node.setValue(value == null ? "0" : "" + value.getId()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java index 0f2edba..696bd8c 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/UserConverter.java @@ -1,55 +1,55 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.backup; - -import java.util.Map; - -import org.apache.openmeetings.db.dao.user.UserDao; -import org.apache.openmeetings.db.entity.user.User; -import org.simpleframework.xml.stream.InputNode; -import org.simpleframework.xml.stream.OutputNode; - -public class UserConverter extends OmConverter<User> { - private UserDao userDao; - private Map<Long, Long> idMap; - - public UserConverter() { - //default constructor is for export - } - - public UserConverter(UserDao userDao, Map<Long, Long> idMap) { - this.userDao = userDao; - this.idMap = idMap; - } - - @Override - public User read(InputNode node) throws Exception { - long oldId = getLong(node); - Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId; - - User u = userDao.get(newId); - return u == null ? new User() : u; - } - - @Override - public void write(OutputNode node, User value) throws Exception { - node.setData(true); - node.setValue(value == null ? "0" : "" + value.getId()); - } +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.backup; + +import java.util.Map; + +import org.apache.openmeetings.db.dao.user.UserDao; +import org.apache.openmeetings.db.entity.user.User; +import org.simpleframework.xml.stream.InputNode; +import org.simpleframework.xml.stream.OutputNode; + +public class UserConverter extends OmConverter<User> { + private UserDao userDao; + private Map<Long, Long> idMap; + + public UserConverter() { + //default constructor is for export + } + + public UserConverter(UserDao userDao, Map<Long, Long> idMap) { + this.userDao = userDao; + this.idMap = idMap; + } + + @Override + public User read(InputNode node) throws Exception { + long oldId = getLong(node); + Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId; + + User u = userDao.get(newId); + return u == null ? new User() : u; + } + + @Override + public void write(OutputNode node, User value) throws Exception { + node.setData(true); + node.setValue(value == null ? "0" : "" + value.getId()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java index d91011b..a5b562c 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java @@ -1,189 +1,189 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.cli; - -import java.io.File; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathExpression; -import javax.xml.xpath.XPathFactory; - -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.openmeetings.util.ConnectionProperties.DbType; -import org.apache.openmeetings.util.ConnectionProperties; -import org.apache.openmeetings.util.OmFileHelper; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -public abstract class ConnectionPropertiesPatcher { - protected static final String URL_PREFIX = "Url"; - protected static final String DRIVER_PREFIX = "DriverClassName"; - protected static final String USER_PREFIX = "Username"; - protected static final String PASS_PREFIX = "Password"; - protected ConnectionProperties props; - - public static ConnectionPropertiesPatcher getPatcher(ConnectionProperties props) { - ConnectionPropertiesPatcher patcher = null; - switch (props.getDbType()) { - case db2: - patcher = new Db2Patcher(); - break; - case mssql: - patcher = new MssqlPatcher(); - break; - case mysql: - patcher = new MysqlPatcher(); - break; - case oracle: - patcher = new OraclePatcher(); - break; - case postgresql: - patcher = new PostgresPatcher(); - break; - case derby: - default: - patcher = new DerbyPatcher(); - break; - } - patcher.props = props; - return patcher; - } - - public static ConnectionProperties getConnectionProperties(File conf) throws Exception { - ConnectionProperties props = new ConnectionProperties(); - Document doc = getDocument(conf); - Attr attr = getConnectionProperties(doc); - String[] tokens = attr.getValue().split(","); - loadProperties(tokens, props); - - return props; - } - - private static Document getDocument(File xml) throws Exception { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - //dbFactory.setNamespaceAware(true); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - return dBuilder.parse(xml); - } - - private static Attr getConnectionProperties(Document doc) throws Exception { - XPath xPath = XPathFactory.newInstance().newXPath(); - XPathExpression expr = xPath.compile("/persistence/persistence-unit/properties/property[@name='openjpa.ConnectionProperties']"); - - Element element = (Element)expr.evaluate(doc, XPathConstants.NODE); - return element.getAttributeNode("value"); - } - - public static void patch(ConnectionProperties props) throws Exception { - ConnectionPropertiesPatcher patcher = getPatcher(props); - Document doc = getDocument(OmFileHelper.getPersistence(props.getDbType())); - Attr attr = getConnectionProperties(doc); - String[] tokens = attr.getValue().split(","); - patcher.patchAttribute(tokens); - attr.setValue(StringUtils.join(tokens, ",")); - - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer = transformerFactory.newTransformer(); - DOMSource source = new DOMSource(doc); - transformer.transform(source, new StreamResult(OmFileHelper.getPersistence().getCanonicalPath())); //this constructor is used to avoid transforming path to URI - } - - public static ConnectionProperties patch(String dbType, String host, String port, String db, String user, String pass) throws Exception { - ConnectionProperties props = getConnectionProperties(OmFileHelper.getPersistence(dbType)); - props.setLogin(user); - props.setPassword(pass); - ConnectionPropertiesPatcher patcher = getPatcher(props); - props.setURL(patcher.getUrl(props.getURL(), host, port, db)); - patch(props); - return props; - } - - public static void updateUrl(ConnectionProperties props, String host, String port, String db) { - ConnectionPropertiesPatcher patcher = getPatcher(props); - props.setURL(patcher.getUrl(props.getURL(), host, port, db)); - } - - protected void patchAttribute(String[] tokens) { - for (int i = 0; i < tokens.length; ++i) { - patchProp(tokens, i, USER_PREFIX, props.getLogin()); - patchProp(tokens, i, PASS_PREFIX, props.getPassword() == null ? "" : props.getPassword()); - patchProp(tokens, i, URL_PREFIX, props.getURL()); - } - } - - protected static void patchProp(String[] tokens, int idx, String name, String value) { - String prop = tokens[idx].trim(); - if (prop.startsWith(name)) { - prop = name + "=" + StringEscapeUtils.escapeXml10(value); - tokens[idx] = prop; - } - } - - private static void loadProperties(String[] tokens, ConnectionProperties connectionProperties) { - String prop; - for (int i = 0; i < tokens.length; ++i) { - prop = getPropFromPersistence(tokens, i, DRIVER_PREFIX); - if (prop != null) { - connectionProperties.setDriver(prop); - } - - prop = getPropFromPersistence(tokens, i, USER_PREFIX); - if (prop != null) { - connectionProperties.setLogin(prop); - } - - prop = getPropFromPersistence(tokens, i, PASS_PREFIX); - if (prop != null) { - connectionProperties.setPassword(prop); - } - - prop = getPropFromPersistence(tokens, i, URL_PREFIX); - if (prop != null) { - try { - //will try to "guess" dbType - String[] parts = prop.split(":"); - connectionProperties.setDbType("sqlserver".equals(parts[1]) ? DbType.mssql : DbType.valueOf(parts[1])); - } catch (Exception e) { - //ignore - } - connectionProperties.setURL(prop); - } - } - } - - protected static String getPropFromPersistence(String[] tokens, int idx, String name){ - String prop = tokens[idx].trim(); - if (prop.startsWith(name)) { - //From "Username=root" getting only "root" - return prop.substring(prop.indexOf("=") + 1); - } - return null; - } - - protected abstract String getUrl(String url, String host, String port, String db); -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.cli; + +import java.io.File; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathFactory; + +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.openmeetings.util.ConnectionProperties.DbType; +import org.apache.openmeetings.util.ConnectionProperties; +import org.apache.openmeetings.util.OmFileHelper; +import org.w3c.dom.Attr; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public abstract class ConnectionPropertiesPatcher { + protected static final String URL_PREFIX = "Url"; + protected static final String DRIVER_PREFIX = "DriverClassName"; + protected static final String USER_PREFIX = "Username"; + protected static final String PASS_PREFIX = "Password"; + protected ConnectionProperties props; + + public static ConnectionPropertiesPatcher getPatcher(ConnectionProperties props) { + ConnectionPropertiesPatcher patcher = null; + switch (props.getDbType()) { + case db2: + patcher = new Db2Patcher(); + break; + case mssql: + patcher = new MssqlPatcher(); + break; + case mysql: + patcher = new MysqlPatcher(); + break; + case oracle: + patcher = new OraclePatcher(); + break; + case postgresql: + patcher = new PostgresPatcher(); + break; + case derby: + default: + patcher = new DerbyPatcher(); + break; + } + patcher.props = props; + return patcher; + } + + public static ConnectionProperties getConnectionProperties(File conf) throws Exception { + ConnectionProperties props = new ConnectionProperties(); + Document doc = getDocument(conf); + Attr attr = getConnectionProperties(doc); + String[] tokens = attr.getValue().split(","); + loadProperties(tokens, props); + + return props; + } + + private static Document getDocument(File xml) throws Exception { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + //dbFactory.setNamespaceAware(true); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + return dBuilder.parse(xml); + } + + private static Attr getConnectionProperties(Document doc) throws Exception { + XPath xPath = XPathFactory.newInstance().newXPath(); + XPathExpression expr = xPath.compile("/persistence/persistence-unit/properties/property[@name='openjpa.ConnectionProperties']"); + + Element element = (Element)expr.evaluate(doc, XPathConstants.NODE); + return element.getAttributeNode("value"); + } + + public static void patch(ConnectionProperties props) throws Exception { + ConnectionPropertiesPatcher patcher = getPatcher(props); + Document doc = getDocument(OmFileHelper.getPersistence(props.getDbType())); + Attr attr = getConnectionProperties(doc); + String[] tokens = attr.getValue().split(","); + patcher.patchAttribute(tokens); + attr.setValue(StringUtils.join(tokens, ",")); + + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + DOMSource source = new DOMSource(doc); + transformer.transform(source, new StreamResult(OmFileHelper.getPersistence().getCanonicalPath())); //this constructor is used to avoid transforming path to URI + } + + public static ConnectionProperties patch(String dbType, String host, String port, String db, String user, String pass) throws Exception { + ConnectionProperties props = getConnectionProperties(OmFileHelper.getPersistence(dbType)); + props.setLogin(user); + props.setPassword(pass); + ConnectionPropertiesPatcher patcher = getPatcher(props); + props.setURL(patcher.getUrl(props.getURL(), host, port, db)); + patch(props); + return props; + } + + public static void updateUrl(ConnectionProperties props, String host, String port, String db) { + ConnectionPropertiesPatcher patcher = getPatcher(props); + props.setURL(patcher.getUrl(props.getURL(), host, port, db)); + } + + protected void patchAttribute(String[] tokens) { + for (int i = 0; i < tokens.length; ++i) { + patchProp(tokens, i, USER_PREFIX, props.getLogin()); + patchProp(tokens, i, PASS_PREFIX, props.getPassword() == null ? "" : props.getPassword()); + patchProp(tokens, i, URL_PREFIX, props.getURL()); + } + } + + protected static void patchProp(String[] tokens, int idx, String name, String value) { + String prop = tokens[idx].trim(); + if (prop.startsWith(name)) { + prop = name + "=" + StringEscapeUtils.escapeXml10(value); + tokens[idx] = prop; + } + } + + private static void loadProperties(String[] tokens, ConnectionProperties connectionProperties) { + String prop; + for (int i = 0; i < tokens.length; ++i) { + prop = getPropFromPersistence(tokens, i, DRIVER_PREFIX); + if (prop != null) { + connectionProperties.setDriver(prop); + } + + prop = getPropFromPersistence(tokens, i, USER_PREFIX); + if (prop != null) { + connectionProperties.setLogin(prop); + } + + prop = getPropFromPersistence(tokens, i, PASS_PREFIX); + if (prop != null) { + connectionProperties.setPassword(prop); + } + + prop = getPropFromPersistence(tokens, i, URL_PREFIX); + if (prop != null) { + try { + //will try to "guess" dbType + String[] parts = prop.split(":"); + connectionProperties.setDbType("sqlserver".equals(parts[1]) ? DbType.mssql : DbType.valueOf(parts[1])); + } catch (Exception e) { + //ignore + } + connectionProperties.setURL(prop); + } + } + } + + protected static String getPropFromPersistence(String[] tokens, int idx, String name){ + String prop = tokens[idx].trim(); + if (prop.startsWith(name)) { + //From "Username=root" getting only "root" + return prop.substring(prop.indexOf("=") + 1); + } + return null; + } + + protected abstract String getUrl(String url, String host, String port, String db); +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java index b681979..2103db1 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Db2Patcher.java @@ -1,28 +1,28 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.cli; - -public class Db2Patcher extends ConnectionPropertiesPatcher { - @Override - protected String getUrl(String _url, String host, String _port, String _db) { - String port = (_port == null) ? "50000" : _port; - String db = (_db == null) ? "openmeet" : _db; - return "jdbc:db2://" + host + ":" + port + "/" + db; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.cli; + +public class Db2Patcher extends ConnectionPropertiesPatcher { + @Override + protected String getUrl(String _url, String host, String _port, String _db) { + String port = (_port == null) ? "50000" : _port; + String db = (_db == null) ? "openmeet" : _db; + return "jdbc:db2://" + host + ":" + port + "/" + db; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java index ff5498e..ea55963 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/DerbyPatcher.java @@ -1,33 +1,33 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.cli; - -public class DerbyPatcher extends ConnectionPropertiesPatcher { - @Override - protected String getUrl(String _url, String host, String _port, String _db) { - String db = (_db == null) ? "openmeetings" : _db; - String suffix = _url.substring(_url.indexOf(';')); - - if (host != null && _port != null) { - //return "jdbc:derby" + "://" + host + ":" + _port + "/" + db + suffix; - } - - return "jdbc:derby" + ":" + db + suffix; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.cli; + +public class DerbyPatcher extends ConnectionPropertiesPatcher { + @Override + protected String getUrl(String _url, String host, String _port, String _db) { + String db = (_db == null) ? "openmeetings" : _db; + String suffix = _url.substring(_url.indexOf(';')); + + if (host != null && _port != null) { + //return "jdbc:derby" + "://" + host + ":" + _port + "/" + db + suffix; + } + + return "jdbc:derby" + ":" + db + suffix; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java index 681331d..2bd04a8 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MssqlPatcher.java @@ -1,28 +1,28 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.cli; - -public class MssqlPatcher extends ConnectionPropertiesPatcher { - @Override - protected String getUrl(String _url, String host, String _port, String _db) { - String port = (_port == null) ? "1433" : _port; - String db = (_db == null) ? "openmeetings" : _db; - return "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + db; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.cli; + +public class MssqlPatcher extends ConnectionPropertiesPatcher { + @Override + protected String getUrl(String _url, String host, String _port, String _db) { + String port = (_port == null) ? "1433" : _port; + String db = (_db == null) ? "openmeetings" : _db; + return "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + db; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java index 163e710..2a3c7d4 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/MysqlPatcher.java @@ -1,29 +1,29 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.cli; - -public class MysqlPatcher extends ConnectionPropertiesPatcher { - @Override - protected String getUrl(String _url, String host, String _port, String _db) { - String port = (_port == null) ? "3306" : _port; - String db = (_db == null) ? "openmeetings" : _db; - String suffix = _url.substring(_url.indexOf('?')); - return "jdbc:mysql://" + host + ":" + port + "/" + db + suffix; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.cli; + +public class MysqlPatcher extends ConnectionPropertiesPatcher { + @Override + protected String getUrl(String _url, String host, String _port, String _db) { + String port = (_port == null) ? "3306" : _port; + String db = (_db == null) ? "openmeetings" : _db; + String suffix = _url.substring(_url.indexOf('?')); + return "jdbc:mysql://" + host + ":" + port + "/" + db + suffix; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java index c9a04a9..bb2db07 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/OraclePatcher.java @@ -1,32 +1,32 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.cli; - -public class OraclePatcher extends ConnectionPropertiesPatcher { - @Override - protected String getUrl(String _url, String host, String _port, String _db) { - String port = (_port == null) ? "1521" : _port; - String db = (_db == null) ? "openmeetings" : _db; - String delim = ":"; - if (db.startsWith("/")) { - delim = ""; - } - return String.format("jdbc:oracle:thin:@%s:%s%s%s", host, port, delim, db); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.cli; + +public class OraclePatcher extends ConnectionPropertiesPatcher { + @Override + protected String getUrl(String _url, String host, String _port, String _db) { + String port = (_port == null) ? "1521" : _port; + String db = (_db == null) ? "openmeetings" : _db; + String delim = ":"; + if (db.startsWith("/")) { + delim = ""; + } + return String.format("jdbc:oracle:thin:@%s:%s%s%s", host, port, delim, db); + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java index e1b885c..975f6dc 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/cli/PostgresPatcher.java @@ -1,28 +1,28 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.cli; - -public class PostgresPatcher extends ConnectionPropertiesPatcher { - @Override - protected String getUrl(String _url, String host, String _port, String _db) { - String port = (_port == null) ? "5432" : _port; - String db = (_db == null) ? "openmeetings" : _db; - return "jdbc:postgresql://" + host + ":" + port + "/" + db; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.cli; + +public class PostgresPatcher extends ConnectionPropertiesPatcher { + @Override + protected String getUrl(String _url, String host, String _port, String _db) { + String port = (_port == null) ? "5432" : _port; + String db = (_db == null) ? "openmeetings" : _db; + return "jdbc:postgresql://" + host + ":" + port + "/" + db; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java index 025d2d9..d4f6da1 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/InstallationConfig.java @@ -1,99 +1,99 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.installation; - -import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL; - -import java.io.Serializable; - -import org.apache.openmeetings.db.dao.basic.ConfigurationDao; -import org.apache.openmeetings.util.crypt.SHA256Implementation; - -public class InstallationConfig implements Serializable { - private static final long serialVersionUID = 1L; - - public String appName = ConfigurationDao.DEFAULT_APP_NAME; - public String username; - private String password; - public String email; - public String group; - public String allowFrontendRegister = "1"; - public String createDefaultRooms = "1"; - public String ical_timeZone = "Europe/Berlin"; - - public String cryptClassName = SHA256Implementation.class.getCanonicalName(); - //email - public Integer smtpPort = 25; - public String smtpServer = "localhost"; - public String mailAuthName = ""; - public String mailAuthPass = ""; - public String mailReferer = "[email protected]"; - public String mailUseTls = "0"; - //paths - public Integer docDpi = 150; - public Integer docQuality = 90; - public String imageMagicPath = ""; - public String ffmpegPath = ""; - public String soxPath = ""; - public String officePath = ""; - - public String defaultLangId = "1"; - public String sendEmailAtRegister = "0"; - public String urlFeed = "http://mail-archives.apache.org/mod_mbox/openmeetings-user/?format=atom"; - public String urlFeed2 = "http://mail-archives.apache.org/mod_mbox/openmeetings-dev/?format=atom"; - public String sendEmailWithVerficationCode = "0"; - public String defaultExportFont = "TimesNewRoman"; - public String red5SipEnable = "no"; - public String red5SipRoomPrefix = "400"; - public String red5SipExtenContext = "rooms"; - public String replyToOrganizer = "1"; - public String baseUrl = DEFAULT_BASE_URL; - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - @Override - public String toString() { - return "InstallationConfig [allowFrontendRegister=" - + allowFrontendRegister + ", createDefaultRooms=" - + createDefaultRooms + ", cryptClassName=" + cryptClassName - + ", smtpPort=" + smtpPort + ", smtpServer=" + smtpServer - + ", mailAuthName=" + mailAuthName + ", mailAuthPass=" - + mailAuthPass + ", mailReferer=" + mailReferer - + ", mailUseTls=" + mailUseTls + ", docDpi=" + docDpi - + ", docQuality=" + docQuality - + ", imageMagicPath=" + imageMagicPath + ", ffmpegPath=" - + ffmpegPath + ", soxPath=" + soxPath - + ", defaultLangId=" + defaultLangId + ", sendEmailAtRegister=" - + sendEmailAtRegister + ", urlFeed=" + urlFeed + ", urlFeed2=" - + urlFeed2 + ", sendEmailWithVerficationCode=" - + sendEmailWithVerficationCode + ", defaultExportFont=" - + defaultExportFont + ", red5SipEnable=" - + red5SipEnable + ", red5SipRoomPrefix=" + red5SipRoomPrefix - + ", red5SipExtenContext=" + red5SipExtenContext - + ", replyToOrganizer=" + replyToOrganizer - + ", ical_timeZone=" + ical_timeZone - + "]"; - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.installation; + +import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL; + +import java.io.Serializable; + +import org.apache.openmeetings.db.dao.basic.ConfigurationDao; +import org.apache.openmeetings.util.crypt.SHA256Implementation; + +public class InstallationConfig implements Serializable { + private static final long serialVersionUID = 1L; + + public String appName = ConfigurationDao.DEFAULT_APP_NAME; + public String username; + private String password; + public String email; + public String group; + public String allowFrontendRegister = "1"; + public String createDefaultRooms = "1"; + public String ical_timeZone = "Europe/Berlin"; + + public String cryptClassName = SHA256Implementation.class.getCanonicalName(); + //email + public Integer smtpPort = 25; + public String smtpServer = "localhost"; + public String mailAuthName = ""; + public String mailAuthPass = ""; + public String mailReferer = "[email protected]"; + public String mailUseTls = "0"; + //paths + public Integer docDpi = 150; + public Integer docQuality = 90; + public String imageMagicPath = ""; + public String ffmpegPath = ""; + public String soxPath = ""; + public String officePath = ""; + + public String defaultLangId = "1"; + public String sendEmailAtRegister = "0"; + public String urlFeed = "http://mail-archives.apache.org/mod_mbox/openmeetings-user/?format=atom"; + public String urlFeed2 = "http://mail-archives.apache.org/mod_mbox/openmeetings-dev/?format=atom"; + public String sendEmailWithVerficationCode = "0"; + public String defaultExportFont = "TimesNewRoman"; + public String red5SipEnable = "no"; + public String red5SipRoomPrefix = "400"; + public String red5SipExtenContext = "rooms"; + public String replyToOrganizer = "1"; + public String baseUrl = DEFAULT_BASE_URL; + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "InstallationConfig [allowFrontendRegister=" + + allowFrontendRegister + ", createDefaultRooms=" + + createDefaultRooms + ", cryptClassName=" + cryptClassName + + ", smtpPort=" + smtpPort + ", smtpServer=" + smtpServer + + ", mailAuthName=" + mailAuthName + ", mailAuthPass=" + + mailAuthPass + ", mailReferer=" + mailReferer + + ", mailUseTls=" + mailUseTls + ", docDpi=" + docDpi + + ", docQuality=" + docQuality + + ", imageMagicPath=" + imageMagicPath + ", ffmpegPath=" + + ffmpegPath + ", soxPath=" + soxPath + + ", defaultLangId=" + defaultLangId + ", sendEmailAtRegister=" + + sendEmailAtRegister + ", urlFeed=" + urlFeed + ", urlFeed2=" + + urlFeed2 + ", sendEmailWithVerficationCode=" + + sendEmailWithVerficationCode + ", defaultExportFont=" + + defaultExportFont + ", red5SipEnable=" + + red5SipEnable + ", red5SipRoomPrefix=" + red5SipRoomPrefix + + ", red5SipExtenContext=" + red5SipExtenContext + + ", replyToOrganizer=" + replyToOrganizer + + ", ical_timeZone=" + ical_timeZone + + "]"; + } +} http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-install/src/site/site.xml ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/site/site.xml b/openmeetings-install/src/site/site.xml index b7a0eae..dd3dc53 100644 --- a/openmeetings-install/src/site/site.xml +++ b/openmeetings-install/src/site/site.xml @@ -1,39 +1,39 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - --> -<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd" - name="Apache OpenMeetings Project"> - - <body> - <menu ref="parent"/> - <menu name="Project"> - <item name="About" href="/index.html" /> - <item name="Info" href="/project-info.html" /> - <item name="Summary" href="/project-summary.html" /> - <item name="License" href="/license.html" /> - <item name="Dependencies" href="/dependencies.html" /> - <item name="Dependency Convergence" href="/dependency-convergence.html" /> - <item name="RAT Report" href="/rat-report.html" /> - </menu> - </body> - <custom> - <reflowSkin> - <bottomNav maxSpan="12"> - <column>Parent Project</column> - <column>Project</column> - </bottomNav> - </reflowSkin> - </custom> -</project> +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<project xmlns="http://maven.apache.org/DECORATION/1.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd" + name="Apache OpenMeetings Project"> + + <body> + <menu ref="parent"/> + <menu name="Project"> + <item name="About" href="/index.html" /> + <item name="Info" href="/project-info.html" /> + <item name="Summary" href="/project-summary.html" /> + <item name="License" href="/license.html" /> + <item name="Dependencies" href="/dependencies.html" /> + <item name="Dependency Convergence" href="/dependency-convergence.html" /> + <item name="RAT Report" href="/rat-report.html" /> + </menu> + </body> + <custom> + <reflowSkin> + <bottomNav maxSpan="12"> + <column>Parent Project</column> + <column>Project</column> + </bottomNav> + </reflowSkin> + </custom> +</project> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java ---------------------------------------------------------------------- diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java index d17d56b..0ce3502 100644 --- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java +++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/CaptureScreen.java @@ -1,237 +1,237 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License") + you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.openmeetings.screenshare; - -import static org.apache.openmeetings.screenshare.Core.QUARTZ_GROUP_NAME; -import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.FPS; -import static org.apache.openmeetings.screenshare.util.Util.getQurtzProps; -import static org.quartz.SimpleScheduleBuilder.simpleSchedule; -import static org.slf4j.LoggerFactory.getLogger; - -import java.util.Queue; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.openmeetings.screenshare.job.CursorJob; -import org.apache.openmeetings.screenshare.job.EncodeJob; -import org.apache.openmeetings.screenshare.job.SendJob; -import org.quartz.JobBuilder; -import org.quartz.JobDetail; -import org.quartz.JobKey; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.SchedulerFactory; -import org.quartz.Trigger; -import org.quartz.TriggerBuilder; -import org.quartz.impl.StdSchedulerFactory; -import org.red5.server.api.Red5; -import org.red5.server.net.rtmp.event.VideoData; -import org.red5.server.stream.message.RTMPMessage; -import org.slf4j.Logger; - -public class CaptureScreen extends Thread { - private static final Logger log = getLogger(CaptureScreen.class); - private final static String QUARTZ_CURSOR_TRIGGER_NAME = "CursorTrigger"; - private final static String QUARTZ_CURSOR_JOB_NAME = "CursorJob"; - private Core core; - private int timestampDelta; - private volatile AtomicInteger timestamp = new AtomicInteger(0); - private volatile AtomicBoolean sendFrameGuard = new AtomicBoolean(false); - private long startTime = 0; - private volatile boolean active = true; - private IScreenEncoder se; - private IScreenShare client; - private Queue<VideoData> frames = new ArrayBlockingQueue<>(2); - private String host = null; - private String app = null; - private int port = -1; - private Number streamId; - private boolean startPublish = false; - private Scheduler _scheduler; - - public CaptureScreen(Core coreScreenShare, IScreenShare client, String host, String app, int port) { - core = coreScreenShare; - this.client = client; - this.host = host; - this.app = app; - this.port = port; - } - - private Scheduler getScheduler() { - if (_scheduler == null) { - try { - SchedulerFactory schdlrFactory = new StdSchedulerFactory(getQurtzProps("CaptureScreen")); - _scheduler = schdlrFactory.getScheduler(); - } catch (SchedulerException e) { - log.error("Unexpected error while creating scheduler", e); - } - } - return _scheduler; - } - - public void release() { - try { - if (_scheduler != null) { - _scheduler.shutdown(true); - _scheduler = null; - } - } catch (Exception e) { - log.error("Unexpected error while shutting down scheduler", e); - } - active = false; - timestamp = new AtomicInteger(0); - startTime = 0; - } - - @Override - public void run() { - try { - while (active && !core.isReadyToRecord()) { - Thread.sleep(60); - } - - timestampDelta = 1000 / FPS; - se = new ScreenV1Encoder(3 * FPS); //send keyframe every 3 seconds - startTime = System.currentTimeMillis(); - - JobDetail encodeJob = JobBuilder.newJob(EncodeJob.class).withIdentity("EncodeJob", QUARTZ_GROUP_NAME).build(); - encodeJob.getJobDataMap().put(EncodeJob.CAPTURE_KEY, this); - Trigger encodeTrigger = TriggerBuilder.newTrigger() - .withIdentity("EncodeTrigger", QUARTZ_GROUP_NAME) - .withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever()) - .build(); - JobDetail sendJob = JobBuilder.newJob(SendJob.class).withIdentity("SendJob", QUARTZ_GROUP_NAME).build(); - Trigger sendTrigger = TriggerBuilder.newTrigger() - .withIdentity("SendTrigger", QUARTZ_GROUP_NAME) - .withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever()) - .build(); - sendJob.getJobDataMap().put(SendJob.CAPTURE_KEY, this); - - Scheduler s = getScheduler(); - s.scheduleJob(encodeJob, encodeTrigger); - s.scheduleJob(sendJob, sendTrigger); - s.start(); - } catch (Exception e) { - log.error("Error while running: ", e); - } - } - - /* - private void pushAudio(byte[] audio, long ts) { - if (startPublish) { - buffer.put((byte) 6); - buffer.put(audio); - buffer.flip(); - - // I can stream audio - //packets successfully using linear PCM at 11025Hz. For those packets I - //push one byte (0x06) which specifies the format of audio data in a - //ByteBuffer, and then real audio data: - RTMPMessage rtmpMsg = RTMPMessage.build(new AudioData(buffer), (int) ts); - client.publishStreamData(streamId, rtmpMsg); - } - } - */ - - public void pushVideo(VideoData data, int ts) { - if (startPublish) { - if (Red5.getConnectionLocal() == null) { - Red5.setConnectionLocal(client.getConnection()); - } - RTMPMessage rtmpMsg = RTMPMessage.build(data, ts); - client.publishStreamData(streamId, rtmpMsg); - } - } - - public String getHost() { - return host; - } - - public String getApp() { - return app; - } - - public int getPort() { - return port; - } - - public Number getStreamId() { - return streamId; - } - - public void setStreamId(Number streamId) { - this.streamId = streamId; - } - - public void setStartPublish(boolean startPublish) { - this.startPublish = startPublish; - } - - public IScreenEncoder getEncoder() { - return se; - } - - public Queue<VideoData> getFrames() { - return frames; - } - - public void setSendFrameGuard(boolean b) { - sendFrameGuard.set(b); - } - - public boolean getSendFrameGuard() { - return sendFrameGuard.get(); - } - - public AtomicInteger getTimestamp() { - return timestamp; - } - - public long getStartTime() { - return startTime; - } - - public int getTimestampDelta() { - return timestampDelta; - } - - public void sendCursorStatus() { - core.sendCursorStatus(); - } - - public void setSendCursor(boolean sendCursor) { - try { - Scheduler s = getScheduler(); - if (sendCursor) { - JobDetail cursorJob = JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME).build(); - Trigger cursorTrigger = TriggerBuilder.newTrigger() - .withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, QUARTZ_GROUP_NAME) - .withSchedule(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, FPS)).repeatForever()) - .build(); - cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this); - s.scheduleJob(cursorJob, cursorTrigger); - } else { - s.deleteJob(JobKey.jobKey(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME)); - } - } catch (SchedulerException e) { - log.error("Unexpected Error schedule/unschedule cursor job", e); - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.screenshare; + +import static org.apache.openmeetings.screenshare.Core.QUARTZ_GROUP_NAME; +import static org.apache.openmeetings.screenshare.gui.ScreenDimensions.FPS; +import static org.apache.openmeetings.screenshare.util.Util.getQurtzProps; +import static org.quartz.SimpleScheduleBuilder.simpleSchedule; +import static org.slf4j.LoggerFactory.getLogger; + +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.openmeetings.screenshare.job.CursorJob; +import org.apache.openmeetings.screenshare.job.EncodeJob; +import org.apache.openmeetings.screenshare.job.SendJob; +import org.quartz.JobBuilder; +import org.quartz.JobDetail; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.SchedulerFactory; +import org.quartz.Trigger; +import org.quartz.TriggerBuilder; +import org.quartz.impl.StdSchedulerFactory; +import org.red5.server.api.Red5; +import org.red5.server.net.rtmp.event.VideoData; +import org.red5.server.stream.message.RTMPMessage; +import org.slf4j.Logger; + +public class CaptureScreen extends Thread { + private static final Logger log = getLogger(CaptureScreen.class); + private final static String QUARTZ_CURSOR_TRIGGER_NAME = "CursorTrigger"; + private final static String QUARTZ_CURSOR_JOB_NAME = "CursorJob"; + private Core core; + private int timestampDelta; + private volatile AtomicInteger timestamp = new AtomicInteger(0); + private volatile AtomicBoolean sendFrameGuard = new AtomicBoolean(false); + private long startTime = 0; + private volatile boolean active = true; + private IScreenEncoder se; + private IScreenShare client; + private Queue<VideoData> frames = new ArrayBlockingQueue<>(2); + private String host = null; + private String app = null; + private int port = -1; + private Number streamId; + private boolean startPublish = false; + private Scheduler _scheduler; + + public CaptureScreen(Core coreScreenShare, IScreenShare client, String host, String app, int port) { + core = coreScreenShare; + this.client = client; + this.host = host; + this.app = app; + this.port = port; + } + + private Scheduler getScheduler() { + if (_scheduler == null) { + try { + SchedulerFactory schdlrFactory = new StdSchedulerFactory(getQurtzProps("CaptureScreen")); + _scheduler = schdlrFactory.getScheduler(); + } catch (SchedulerException e) { + log.error("Unexpected error while creating scheduler", e); + } + } + return _scheduler; + } + + public void release() { + try { + if (_scheduler != null) { + _scheduler.shutdown(true); + _scheduler = null; + } + } catch (Exception e) { + log.error("Unexpected error while shutting down scheduler", e); + } + active = false; + timestamp = new AtomicInteger(0); + startTime = 0; + } + + @Override + public void run() { + try { + while (active && !core.isReadyToRecord()) { + Thread.sleep(60); + } + + timestampDelta = 1000 / FPS; + se = new ScreenV1Encoder(3 * FPS); //send keyframe every 3 seconds + startTime = System.currentTimeMillis(); + + JobDetail encodeJob = JobBuilder.newJob(EncodeJob.class).withIdentity("EncodeJob", QUARTZ_GROUP_NAME).build(); + encodeJob.getJobDataMap().put(EncodeJob.CAPTURE_KEY, this); + Trigger encodeTrigger = TriggerBuilder.newTrigger() + .withIdentity("EncodeTrigger", QUARTZ_GROUP_NAME) + .withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever()) + .build(); + JobDetail sendJob = JobBuilder.newJob(SendJob.class).withIdentity("SendJob", QUARTZ_GROUP_NAME).build(); + Trigger sendTrigger = TriggerBuilder.newTrigger() + .withIdentity("SendTrigger", QUARTZ_GROUP_NAME) + .withSchedule(simpleSchedule().withIntervalInMilliseconds(timestampDelta).repeatForever()) + .build(); + sendJob.getJobDataMap().put(SendJob.CAPTURE_KEY, this); + + Scheduler s = getScheduler(); + s.scheduleJob(encodeJob, encodeTrigger); + s.scheduleJob(sendJob, sendTrigger); + s.start(); + } catch (Exception e) { + log.error("Error while running: ", e); + } + } + + /* + private void pushAudio(byte[] audio, long ts) { + if (startPublish) { + buffer.put((byte) 6); + buffer.put(audio); + buffer.flip(); + + // I can stream audio + //packets successfully using linear PCM at 11025Hz. For those packets I + //push one byte (0x06) which specifies the format of audio data in a + //ByteBuffer, and then real audio data: + RTMPMessage rtmpMsg = RTMPMessage.build(new AudioData(buffer), (int) ts); + client.publishStreamData(streamId, rtmpMsg); + } + } + */ + + public void pushVideo(VideoData data, int ts) { + if (startPublish) { + if (Red5.getConnectionLocal() == null) { + Red5.setConnectionLocal(client.getConnection()); + } + RTMPMessage rtmpMsg = RTMPMessage.build(data, ts); + client.publishStreamData(streamId, rtmpMsg); + } + } + + public String getHost() { + return host; + } + + public String getApp() { + return app; + } + + public int getPort() { + return port; + } + + public Number getStreamId() { + return streamId; + } + + public void setStreamId(Number streamId) { + this.streamId = streamId; + } + + public void setStartPublish(boolean startPublish) { + this.startPublish = startPublish; + } + + public IScreenEncoder getEncoder() { + return se; + } + + public Queue<VideoData> getFrames() { + return frames; + } + + public void setSendFrameGuard(boolean b) { + sendFrameGuard.set(b); + } + + public boolean getSendFrameGuard() { + return sendFrameGuard.get(); + } + + public AtomicInteger getTimestamp() { + return timestamp; + } + + public long getStartTime() { + return startTime; + } + + public int getTimestampDelta() { + return timestampDelta; + } + + public void sendCursorStatus() { + core.sendCursorStatus(); + } + + public void setSendCursor(boolean sendCursor) { + try { + Scheduler s = getScheduler(); + if (sendCursor) { + JobDetail cursorJob = JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME).build(); + Trigger cursorTrigger = TriggerBuilder.newTrigger() + .withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, QUARTZ_GROUP_NAME) + .withSchedule(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, FPS)).repeatForever()) + .build(); + cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this); + s.scheduleJob(cursorJob, cursorTrigger); + } else { + s.deleteJob(JobKey.jobKey(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME)); + } + } catch (SchedulerException e) { + log.error("Unexpected Error schedule/unschedule cursor job", e); + } + } +}
