Repository: openmeetings
Updated Branches:
  refs/heads/master 3e74e1f6a -> 220e729a0


[OPENMEETINGS-1720] OM version is saved/restored during backup/restore


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/220e729a
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/220e729a
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/220e729a

Branch: refs/heads/master
Commit: 220e729a0a702801d7d63cc3067f081d562223f3
Parents: 3e74e1f
Author: Maxim Solodovnik <[email protected]>
Authored: Fri Oct 13 10:34:04 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Fri Oct 13 10:34:04 2017 +0700

----------------------------------------------------------------------
 .../core/converter/BaseConverter.java           |   3 +-
 .../openmeetings/core/ldap/LdapOptions.java     |   3 +-
 .../db/dao/basic/ConfigurationDao.java          |   3 +-
 .../db/entity/file/BaseFileItem.java            |   8 +-
 openmeetings-install/pom.xml                    |   7 +
 .../openmeetings/backup/BackupExport.java       | 108 +++++++-------
 .../openmeetings/backup/BackupImport.java       |   8 +-
 .../openmeetings/backup/BackupVersion.java      | 143 +++++++++++++++++++
 .../openmeetings/backup/IntegerTransform.java   |   5 +-
 .../openmeetings/backup/LongTransform.java      |   5 +-
 .../backup/converter/AppointmentConverter.java  |   7 +-
 .../AppointmentReminderTypeConverter.java       |   7 +-
 .../backup/converter/BaseFileItemConverter.java |   7 +-
 .../backup/converter/GroupConverter.java        |   7 +-
 .../backup/converter/OmCalendarConverter.java   |   7 +-
 .../backup/converter/OmConverter.java           |  56 --------
 .../backup/converter/PollTypeConverter.java     |   7 +-
 .../converter/RecordingStatusConverter.java     |   3 +-
 .../backup/converter/RoomConverter.java         |   7 +-
 .../backup/converter/RoomTypeConverter.java     |   7 +-
 .../backup/converter/SalutationConverter.java   |   7 +-
 .../backup/converter/UserConverter.java         |   7 +-
 .../openmeetings/backup/TestBackupVersion.java  |  52 +++++++
 23 files changed, 321 insertions(+), 153 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
index fabf270..439f3d7 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
 import static 
org.apache.openmeetings.core.data.record.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_FLV;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
@@ -412,7 +413,7 @@ public abstract class BaseConverter {
                while (matcher.find()) {
                        String foundResolution = txt.substring(matcher.start(), 
matcher.end());
                        String[] resultions = foundResolution.split("x");
-                       return new Dimension(Integer.parseInt(resultions[0]), 
Integer.parseInt(resultions[1]));
+                       return new Dimension(toInt(resultions[0]), 
toInt(resultions[1]));
                }
 
                return new Dimension(100, 100); // will return 100x100 for 
non-video to be able to play

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapOptions.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapOptions.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapOptions.java
index f289950..8c9d542 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapOptions.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapOptions.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.ldap;
 
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
 
 import java.util.Properties;
@@ -119,7 +120,7 @@ public class LdapOptions {
 
                // Connection URL
                host = config.getProperty(CONFIGKEY_LDAP_HOST);
-               port = Integer.parseInt(config.getProperty(CONFIGKEY_LDAP_PORT, 
"389"));
+               port = toInt(config.getProperty(CONFIGKEY_LDAP_PORT), 389);
                secure = 
"true".equals(config.getProperty(CONFIGKEY_LDAP_SECURE, "false"));
 
                // Username for LDAP SERVER himself

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 87f762b..4969ecd 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.db.dao.basic;
 
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_NAME;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT;
@@ -328,7 +329,7 @@ public class ConfigurationDao implements 
IDataProviderDao<Configuration> {
                        }
                                break;
                        case CONFIG_EXT_PROCESS_TTL:
-                               setExtProcessTtl(Integer.parseInt(value));
+                               setExtProcessTtl(toInt(value));
                                break;
                }
                return entity;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index 7342c6a..a1f9ab2 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.db.entity.file;
 
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
 import static org.apache.openmeetings.util.OmFileHelper.DOC_PAGE_PREFIX;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
@@ -278,12 +279,7 @@ public abstract class BaseFileItem extends 
HistoricalEntity {
                                        if (ext == null) {
                                                slide = 0;
                                        } else {
-                                               try {
-                                                       //ext is used for slide 
here
-                                                       slide = 
Integer.parseInt(ext);
-                                               } catch (Exception e) {
-                                                       slide = -1;
-                                               }
+                                               slide = toInt(ext, -1);
                                        }
                                        if (slide > -1) {
                                                f = new File(d, 
String.format("%1$s-%2$04d.%3$s", DOC_PAGE_PREFIX, slide, EXTENSION_PNG));

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-install/pom.xml b/openmeetings-install/pom.xml
index 3a49d1f..4935dc4 100644
--- a/openmeetings-install/pom.xml
+++ b/openmeetings-install/pom.xml
@@ -47,5 +47,12 @@
                        <artifactId>commons-cli</artifactId>
                        <version>${commons-cli.version}</version>
                </dependency>
+               <dependency>
+                       <groupId>org.apache.openmeetings</groupId>
+                       <artifactId>openmeetings-util</artifactId>
+                       <version>${project.version}</version>
+                       <type>test-jar</type>
+                       <scope>test</scope>
+               </dependency>
        </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
index 82df8e4..0f92725 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
@@ -35,8 +35,9 @@ import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
-import java.util.Date;
+import java.util.Arrays;
 import java.util.List;
+import java.util.function.Function;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -67,6 +68,7 @@ import org.apache.openmeetings.db.dao.user.PrivateMessageDao;
 import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
 import org.apache.openmeetings.db.dao.user.UserContactDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.HistoricalEntity;
 import org.apache.openmeetings.db.entity.basic.ChatMessage;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -76,6 +78,7 @@ import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
 import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.PrivateMessage;
 import org.apache.openmeetings.db.entity.user.User;
@@ -155,9 +158,9 @@ public class BackupExport {
                        /*
                         * ##################### Backup Groups
                         */
-                       writeList(ser, zos, "organizations.xml", 
"organisations", groupDao.get(0, Integer.MAX_VALUE));
-                       progressHolder.setProgress(5);
-
+                       writeList(ser, zos, "version.xml", "version", 
Arrays.asList(BackupVersion.get()));
+                       progressHolder.setProgress(2);
+                       exportGroups(zos, progressHolder);
                        exportUsers(zos, progressHolder);
                        exportRoom(zos, progressHolder);
                        exportRoomGroup(zos, progressHolder);
@@ -166,7 +169,7 @@ public class BackupExport {
                        exportAppointment(zos, progressHolder);
                        exportMeetingMember(zos, progressHolder);
                        exportLdap(zos, progressHolder, ser);
-                       exportOauth(zos, progressHolder, ser);
+                       exportOauth(zos, progressHolder);
                        exportPrivateMsg(zos, progressHolder);
                        exportPrivateMsgFolder(zos, progressHolder, ser);
                        exportContacts(zos, progressHolder);
@@ -196,6 +199,35 @@ public class BackupExport {
                log.debug("---Done");
        }
 
+       private static <T extends HistoricalEntity> void bindDate(Registry 
registry, List<T> list) throws Exception {
+               bindDate(registry, list, HistoricalEntity::getInserted);
+       }
+
+       private static <T> void bindDate(Registry registry, List<T> list, 
Function<T, ?> func) throws Exception {
+               if (list != null) {
+                       for (T e : list) {
+                               Object d = func.apply(e);
+                               if (d != null) {
+                                       Class<?> dateClass = d.getClass();
+                                       registry.bind(dateClass, 
DateConverter.class);
+                                       break;
+                               }
+                       }
+               }
+       }
+       /*
+        * ##################### Backup  Groups
+        */
+       private void exportGroups(ZipOutputStream zos, ProgressHolder 
progressHolder) throws Exception {
+               Registry registry = new Registry();
+               Strategy strategy = new RegistryStrategy(registry);
+               Serializer ser = new Persister(strategy);
+               List<Group> list = groupDao.get(0, Integer.MAX_VALUE);
+               bindDate(registry, list);
+               writeList(ser, zos, "organizations.xml", "organisations", list);
+               progressHolder.setProgress(5);
+       }
+
        /*
         * ##################### Backup Users
         */
@@ -207,10 +239,7 @@ public class BackupExport {
                registry.bind(Group.class, GroupConverter.class);
                registry.bind(Salutation.class, SalutationConverter.class);
                List<User> list = userDao.getAllBackupUsers();
-               if (list != null && !list.isEmpty()) {
-                       Class<?> dateClass = list.get(0).getRegdate() != null ? 
list.get(0).getRegdate().getClass() : list.get(0).getInserted().getClass();
-                       registry.bind(dateClass, DateConverter.class);
-               }
+               bindDate(registry, list);
 
                writeList(ser, zos, "users.xml", "users", list);
                progressHolder.setProgress(10);
@@ -226,8 +255,9 @@ public class BackupExport {
 
                registry.bind(User.class, UserConverter.class);
                registry.bind(Room.Type.class, RoomTypeConverter.class);
-
-               writeList(serializer, zos, "rooms.xml", "rooms", roomDao.get());
+               List<Room> list = roomDao.get();
+               bindDate(registry, list);
+               writeList(serializer, zos, "rooms.xml", "rooms", list);
                progressHolder.setProgress(15);
        }
 
@@ -287,20 +317,7 @@ public class BackupExport {
                registry.bind(User.class, UserConverter.class);
                registry.bind(Appointment.Reminder.class, 
AppointmentReminderTypeConverter.class);
                registry.bind(Room.class, RoomConverter.class);
-               if (list != null) {
-                       for (Appointment a : list) {
-                               Class<? extends Date> clazz = null;
-                               if (a.getStart() != null) {
-                                       clazz = a.getStart().getClass();
-                               } else if (a.getInserted() != null) {
-                                       clazz = a.getInserted().getClass();
-                               }
-                               if (clazz != null) {
-                                       registry.bind(clazz, 
DateConverter.class);
-                                       break;
-                               }
-                       }
-               }
+               bindDate(registry, list);
 
                writeList(serializer, zos, "appointements.xml", "appointments", 
list);
                progressHolder.setProgress(25);
@@ -337,8 +354,13 @@ public class BackupExport {
        /*
         * ##################### OAuth2 servers
         */
-       private void exportOauth(ZipOutputStream zos, ProgressHolder 
progressHolder, Serializer ser) throws Exception {
-               writeList(ser, zos, "oauth2servers.xml", "oauth2servers", 
auth2Dao.get(0, Integer.MAX_VALUE));
+       private void exportOauth(ZipOutputStream zos, ProgressHolder 
progressHolder) throws Exception {
+               Registry registry = new Registry();
+               Strategy strategy = new RegistryStrategy(registry);
+               Serializer serializer = new Persister(strategy);
+               List<OAuthServer> list = auth2Dao.get(0, Integer.MAX_VALUE);
+               bindDate(registry, list);
+               writeList(serializer, zos, "oauth2servers.xml", 
"oauth2servers", list);
                progressHolder.setProgress(45);
        }
 
@@ -353,12 +375,8 @@ public class BackupExport {
 
                registry.bind(User.class, UserConverter.class);
                registry.bind(Room.class, RoomConverter.class);
-               if (list != null && !list.isEmpty()) {
-                       registry.bind(list.get(0).getInserted().getClass(), 
DateConverter.class);
-               }
-
-               writeList(serializer, zos, "privateMessages.xml",
-                               "privatemessages", list);
+               bindDate(registry, list, PrivateMessage::getInserted);
+               writeList(serializer, zos, "privateMessages.xml", 
"privatemessages", list);
                progressHolder.setProgress(50);
        }
 
@@ -394,10 +412,7 @@ public class BackupExport {
                Strategy strategy = new RegistryStrategy(registry);
                Serializer serializer = new Persister(strategy);
 
-               if (list != null && !list.isEmpty()) {
-                       registry.bind(list.get(0).getInserted().getClass(), 
DateConverter.class);
-               }
-
+               bindDate(registry, list);
                writeList(serializer, zos, "fileExplorerItems.xml", 
"fileExplorerItems", list);
                progressHolder.setProgress(65);
        }
@@ -411,10 +426,7 @@ public class BackupExport {
                Strategy strategy = new RegistryStrategy(registry);
                Serializer serializer = new Persister(strategy);
 
-               if (list != null && !list.isEmpty()) {
-                       registry.bind(list.get(0).getInserted().getClass(), 
DateConverter.class);
-               }
-
+               bindDate(registry, list);
                writeList(serializer, zos, "flvRecordings.xml", 
"flvrecordings", list);
                progressHolder.setProgress(70);
        }
@@ -431,10 +443,7 @@ public class BackupExport {
                registry.bind(User.class, UserConverter.class);
                registry.bind(Room.class, RoomConverter.class);
                registry.bind(RoomPoll.Type.class, PollTypeConverter.class);
-               if (list != null && !list.isEmpty()) {
-                       registry.bind(list.get(0).getCreated().getClass(), 
DateConverter.class);
-               }
-
+               bindDate(registry, list, RoomPoll::getCreated);
                writeList(serializer, zos, "roompolls.xml", "roompolls", list);
                progressHolder.setProgress(75);
        }
@@ -461,10 +470,7 @@ public class BackupExport {
                Strategy strategy = new RegistryStrategy(registry);
                Serializer serializer = new Persister(strategy);
 
-               if (list != null && !list.isEmpty()) {
-                       registry.bind(list.get(0).getSent().getClass(), 
DateConverter.class);
-               }
-
+               bindDate(registry, list, ChatMessage::getSent);
                writeList(serializer, zos, "chat_messages.xml", 
"chat_messages", list);
                progressHolder.setProgress(85);
        }
@@ -475,9 +481,7 @@ public class BackupExport {
                Strategy strategy = new RegistryStrategy(registry);
                Serializer serializer = new Persister(strategy);
 
-               if (list != null && !list.isEmpty() && 
list.get(0).getInserted() != null) {
-                       registry.bind(list.get(0).getInserted().getClass(), 
DateConverter.class);
-               }
+               bindDate(registry, list);
                return serializer;
        }
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index b43a91c..99594f5 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -381,8 +381,9 @@ public class BackupImport {
                messageFolderMap.put(TRASH_FOLDER_ID, TRASH_FOLDER_ID);
 
                File f = unzip(is);
-               importConfigs(f);
                Serializer simpleSerializer = new Persister();
+               BackupVersion ver = getVersion(simpleSerializer, f);
+               importConfigs(f);
                importGroups(f, simpleSerializer);
                Long defaultLdapId = importLdap(f, simpleSerializer);
                importOauth(f, simpleSerializer);
@@ -412,6 +413,11 @@ public class BackupImport {
                FileUtils.deleteDirectory(f);
        }
 
+       private BackupVersion getVersion(Serializer ser, File f) throws 
Exception {
+               List<BackupVersion> list = readList(ser, f, "version.xml", 
"version", BackupVersion.class, true);
+               return list.isEmpty() ? new BackupVersion() : list.get(0);
+       }
+
        /*
         * ##################### Import Configs
         */

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
new file mode 100644
index 0000000..6b010cb
--- /dev/null
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
@@ -0,0 +1,143 @@
+/*
+ * 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 static org.apache.commons.lang3.math.NumberUtils.toInt;
+
+import java.io.Serializable;
+
+import org.apache.openmeetings.util.Version;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Root(name = "version")
+public class BackupVersion implements Serializable, Comparable<BackupVersion> {
+       private static final long serialVersionUID = 1L;
+
+       @Element(data = true)
+       private int major;
+
+       @Element(data = true)
+       private int minor;
+
+       @Element(data = true)
+       private int micro;
+
+       public int getMajor() {
+               return major;
+       }
+
+       public void setMajor(int major) {
+               this.major = major;
+       }
+
+       public int getMinor() {
+               return minor;
+       }
+
+       public void setMinor(int minor) {
+               this.minor = minor;
+       }
+
+       public int getMicro() {
+               return micro;
+       }
+
+       public void setMicro(int micro) {
+               this.micro = micro;
+       }
+
+       public static BackupVersion get() {
+               String ver = Version.getVersion();
+               return get(ver);
+       }
+
+       public static BackupVersion get(String ver) {
+               BackupVersion bv = new BackupVersion();
+               String[] dashParts = ver.split("-");
+               if (dashParts.length == 0) {
+                       return bv;
+               }
+               String[] dotParts = dashParts[0].split("\\.");
+               if (dotParts.length > 0) {
+                       bv.major = toInt(dotParts[0]);
+               }
+               if (dotParts.length > 1) {
+                       bv.minor = toInt(dotParts[1]);
+               }
+               if (dotParts.length > 2) {
+                       bv.micro = toInt(dotParts[2]);
+               }
+               return bv;
+       }
+
+       @Override
+       public int compareTo(BackupVersion o) {
+               if (o == null) {
+                       return 1;
+               }
+               if (equals(o)) {
+                       return 0;
+               }
+               if (major > o.major) {
+                       return 1;
+               }
+               if (minor > o.minor) {
+                       return 1;
+               }
+               if (micro > o.micro) {
+                       return 1;
+               }
+               return -1;
+       }
+
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result + major;
+               result = prime * result + micro;
+               result = prime * result + minor;
+               return result;
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (this == obj) {
+                       return true;
+               }
+               if (obj == null) {
+                       return false;
+               }
+               if (getClass() != obj.getClass()) {
+                       return false;
+               }
+               BackupVersion other = (BackupVersion) obj;
+               if (major != other.major) {
+                       return false;
+               }
+               if (micro != other.micro) {
+                       return false;
+               }
+               if (minor != other.minor) {
+                       return false;
+               }
+               return true;
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
index 51607c0..640f4d6 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
@@ -18,13 +18,14 @@
  */
 package org.apache.openmeetings.backup;
 
-import org.apache.openmeetings.backup.converter.OmConverter;
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
+
 import org.simpleframework.xml.transform.Transform;
 
 public class IntegerTransform implements Transform<Integer> {
        @Override
        public Integer read(String value) throws Exception {
-               return OmConverter.getInt(value, 0);
+               return toInt(value, 0);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
index 38bb369..ed3c62b 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
@@ -18,13 +18,14 @@
  */
 package org.apache.openmeetings.backup;
 
-import org.apache.openmeetings.backup.converter.OmConverter;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
+
 import org.simpleframework.xml.transform.Transform;
 
 public class LongTransform implements Transform<Long> {
        @Override
        public Long read(String value) throws Exception {
-               return OmConverter.getLong(value);
+               return toLong(value);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentConverter.java
index 9d9cdf4..2ba97a5 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getLong;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
 
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class AppointmentConverter implements OmConverter<Appointment> {
+public class AppointmentConverter implements Converter<Appointment> {
        private AppointmentDao appointmentDao;
        private Map<Long, Long> idMap;
 
@@ -42,7 +43,7 @@ public class AppointmentConverter implements 
OmConverter<Appointment> {
 
        @Override
        public Appointment read(InputNode node) throws Exception {
-               long oldId = getLong(node);
+               long oldId = toLong(node.getValue());
                Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : 
oldId;
 
                Appointment a = appointmentDao.getAny(newId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentReminderTypeConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentReminderTypeConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentReminderTypeConverter.java
index 7c461ba..e96de4d 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentReminderTypeConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/AppointmentReminderTypeConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getInt;
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class AppointmentReminderTypeConverter implements OmConverter<Reminder> 
{
+public class AppointmentReminderTypeConverter implements Converter<Reminder> {
        @Override
        public Reminder read(InputNode node) throws Exception {
-               return Reminder.get(getInt(node));
+               return Reminder.get(toInt(node.getValue()));
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/BaseFileItemConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/BaseFileItemConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/BaseFileItemConverter.java
index d191a9b..5e2be4d 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/BaseFileItemConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/BaseFileItemConverter.java
@@ -18,17 +18,18 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getLong;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
 
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class BaseFileItemConverter implements OmConverter<BaseFileItem> {
+public class BaseFileItemConverter implements Converter<BaseFileItem> {
        private FileItemDao fileDao;
        private Map<Long, Long> idMap;
 
@@ -43,7 +44,7 @@ public class BaseFileItemConverter implements 
OmConverter<BaseFileItem> {
 
        @Override
        public BaseFileItem read(InputNode node) throws Exception {
-               long oldId = getLong(node);
+               long oldId = toLong(node.getValue());
                long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : 
oldId;
 
                BaseFileItem r = fileDao.get(newId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/GroupConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/GroupConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/GroupConverter.java
index 8bad649..3cb0b67 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/GroupConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/GroupConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getLong;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
 
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.entity.user.Group;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class GroupConverter implements OmConverter<Group> {
+public class GroupConverter implements Converter<Group> {
        private GroupDao groupDao;
        private Map<Long, Long> idMap;
 
@@ -42,7 +43,7 @@ public class GroupConverter implements OmConverter<Group> {
 
        @Override
        public Group read(InputNode node) throws Exception {
-               long oldId = getLong(node);
+               long oldId = toLong(node.getValue());
                long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : 
oldId;
 
                Group o = groupDao.get(newId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmCalendarConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmCalendarConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmCalendarConverter.java
index 6ef026b..14db40e 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmCalendarConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmCalendarConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getLong;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
 
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
 import org.apache.openmeetings.db.entity.calendar.OmCalendar;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class OmCalendarConverter implements OmConverter<OmCalendar> {
+public class OmCalendarConverter implements Converter<OmCalendar> {
        private OmCalendarDao calendarDao;
        private Map<Long, Long> idMap;
 
@@ -42,7 +43,7 @@ public class OmCalendarConverter implements 
OmConverter<OmCalendar> {
 
        @Override
        public OmCalendar read(InputNode node) throws Exception {
-               long oldId = getLong(node);
+               long oldId = toLong(node.getValue());
                Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : 
oldId;
 
                OmCalendar c = calendarDao.get(newId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmConverter.java
deleted file mode 100644
index 8fa168e..0000000
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/OmConverter.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.converter;
-
-import org.simpleframework.xml.convert.Converter;
-import org.simpleframework.xml.stream.InputNode;
-
-public interface OmConverter<T> extends 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.parseLong(value);
-               } 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.parseInt(value);
-               } catch (Exception e) {
-                       //no op
-               }
-               return result;
-       }
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/PollTypeConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/PollTypeConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/PollTypeConverter.java
index 54b2265..8d3c926 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/PollTypeConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/PollTypeConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getLong;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
 
 import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class PollTypeConverter implements OmConverter<RoomPoll.Type> {
+public class PollTypeConverter implements Converter<RoomPoll.Type> {
        @Override
        public RoomPoll.Type read(InputNode node) throws Exception {
-               return RoomPoll.Type.get(getLong(node));
+               return RoomPoll.Type.get(toLong(node.getValue()));
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RecordingStatusConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RecordingStatusConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RecordingStatusConverter.java
index cd20ac5..de41999 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RecordingStatusConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RecordingStatusConverter.java
@@ -23,11 +23,12 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKe
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.Recording.Status;
 import org.red5.logging.Red5LoggerFactory;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 import org.slf4j.Logger;
 
-public class RecordingStatusConverter implements OmConverter<Recording.Status> 
{
+public class RecordingStatusConverter implements Converter<Recording.Status> {
        private static final Logger log = 
Red5LoggerFactory.getLogger(RecordingStatusConverter.class, getWebAppRootKey());
        private static final String PROCESSING = "PROCESSING";
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomConverter.java
index 7b86200..282de3f 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getLong;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
 
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class RoomConverter implements OmConverter<Room> {
+public class RoomConverter implements Converter<Room> {
        private RoomDao roomDao;
        private Map<Long, Long> idMap;
 
@@ -42,7 +43,7 @@ public class RoomConverter implements OmConverter<Room> {
 
        @Override
        public Room read(InputNode node) throws Exception {
-               long oldId = getLong(node);
+               long oldId = toLong(node.getValue());
                long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : 
oldId;
 
                Room r = roomDao.get(newId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomTypeConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomTypeConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomTypeConverter.java
index c451090..22511a5 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomTypeConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/RoomTypeConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getInt;
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
 
 import org.apache.openmeetings.db.entity.room.Room.Type;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class RoomTypeConverter implements OmConverter<Type> {
+public class RoomTypeConverter implements Converter<Type> {
        @Override
        public Type read(InputNode node) throws Exception {
-               return Type.get(getInt(node));
+               return Type.get(toInt(node.getValue()));
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/SalutationConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/SalutationConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/SalutationConverter.java
index ed4dc51..02d0af6 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/SalutationConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/SalutationConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getInt;
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
 
 import org.apache.openmeetings.db.entity.user.User.Salutation;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class SalutationConverter implements OmConverter<Salutation> {
+public class SalutationConverter implements Converter<Salutation> {
        @Override
        public Salutation read(InputNode node) throws Exception {
-               return Salutation.get(getInt(node));
+               return Salutation.get(toInt(node.getValue()));
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/UserConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/UserConverter.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/UserConverter.java
index f465624..5ba6741 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/UserConverter.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/converter/UserConverter.java
@@ -18,16 +18,17 @@
  */
 package org.apache.openmeetings.backup.converter;
 
-import static org.apache.openmeetings.backup.converter.OmConverter.getLong;
+import static org.apache.commons.lang3.math.NumberUtils.toLong;
 
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.convert.Converter;
 import org.simpleframework.xml.stream.InputNode;
 import org.simpleframework.xml.stream.OutputNode;
 
-public class UserConverter implements OmConverter<User> {
+public class UserConverter implements Converter<User> {
        private UserDao userDao;
        private Map<Long, Long> idMap;
 
@@ -42,7 +43,7 @@ public class UserConverter implements OmConverter<User> {
 
        @Override
        public User read(InputNode node) throws Exception {
-               long oldId = getLong(node);
+               long oldId = toLong(node.getValue());
                Long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : 
oldId;
 
                User u = userDao.get(newId);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/220e729a/openmeetings-install/src/test/java/org/apache/openmeetings/backup/TestBackupVersion.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/test/java/org/apache/openmeetings/backup/TestBackupVersion.java
 
b/openmeetings-install/src/test/java/org/apache/openmeetings/backup/TestBackupVersion.java
new file mode 100644
index 0000000..fbf9975
--- /dev/null
+++ 
b/openmeetings-install/src/test/java/org/apache/openmeetings/backup/TestBackupVersion.java
@@ -0,0 +1,52 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import org.junit.Test;
+
+
+public class TestBackupVersion {
+       @Test
+       public void testGet() {
+               BackupVersion bv = BackupVersion.get();
+               assertNotEquals("Major should be set", 0, bv.getMajor());
+       }
+
+       @Test
+       public void testEquals() {
+               assertEquals(BackupVersion.get(), BackupVersion.get());
+               assertNotEquals(BackupVersion.get(), null);
+               assertNotEquals(BackupVersion.get("3.2.1"), 
BackupVersion.get("3.2.0"));
+               assertNotEquals(BackupVersion.get("3.1.1"), 
BackupVersion.get("3.0.0"));
+               assertNotEquals(BackupVersion.get("3.1.1"), 
BackupVersion.get("2.0.0"));
+       }
+
+       @Test
+       public void testCompare() {
+               assertEquals(0, 
BackupVersion.get().compareTo(BackupVersion.get()));
+               assertEquals(1, BackupVersion.get().compareTo(null));
+               assertEquals(1, 
BackupVersion.get("3.2.1").compareTo(BackupVersion.get("3.2.0")));
+               assertEquals(-1, 
BackupVersion.get("3.2.0").compareTo(BackupVersion.get("3.2.1")));
+               assertEquals(1, 
BackupVersion.get("3.1.1").compareTo(BackupVersion.get("3.0.0")));
+               assertEquals(1, 
BackupVersion.get("3.1.1").compareTo(BackupVersion.get("2.0.0")));
+       }
+}

Reply via email to