+ public int compareDbSchemaVersion(CdmInstanceInfo instance, int port) throws CDMServerException {
+
+ ICdmRemoteSource crs = getCdmRemoteSource(instance, port);
+ String dbSchemaVersion;
+ try {
+ dbSchemaVersion = crs.getDbSchemaVersion();
+ } catch (CdmSourceException e) {
+ throw new CDMServerException(e);
+ }
+
+
+ if(dbSchemaVersion != null) {
+ return CdmMetaData.compareVersion(dbSchemaVersion, CdmMetaData.getDbSchemaVersion(), 3, null);
+ } else {
+ throw new CDMServerException("Cannot determine editor db. schema version");
+ }
+ }
+
+ public int compareCdmlibServicesVersion() throws CdmSourceException {
+
+ String serverVersion = cdmlibServicesVersion;
+ String serverCdmlibLastModified = cdmlibServicesLastModified;
+
+ return compareCdmlibServicesVersion(serverVersion, serverCdmlibLastModified);
+ }
+
+
+ /**
+ * @param serverVersion
+ * @param editorVersion
+ * @throws CdmSourceException
+ */
+ public static int compareCdmlibServicesVersion(String serverVersion, String serverCdmlibLastModified) throws CdmSourceException {
+
+ String editorVersion = CdmApplicationState.getCdmlibVersion();
+ String editorCdmlibLastModified = CdmApplicationState.getCdmlibLastModified();
+
+ int result = 0;
+ if(StringUtils.isBlank(serverVersion) || StringUtils.isBlank(editorVersion)) {
+ throw new CdmSourceException("cdmlib-services server or editor version is empty");
+ }
+
+ String[] serverVersionSplit = serverVersion.split("\\.");
+ String[] editorVersionSplit = editorVersion.split("\\.");
+
+ if(serverVersionSplit.length < 3 || editorVersionSplit.length < 3 || serverVersionSplit.length > 4 || editorVersionSplit.length > 4) {
+ throw new CdmSourceException("cdmlib-services server or editor version is invalid");
+ }
+
+ Integer serverVersionPart;
+ Integer editorVersionPart;
+
+ for(int i=0 ; i<3 ; i++) {
+ serverVersionPart = Integer.valueOf(serverVersionSplit[i]);
+ editorVersionPart = Integer.valueOf(editorVersionSplit[i]);
+
+ int partCompare = serverVersionPart.compareTo(editorVersionPart);
+ if (partCompare != 0){
+ return partCompare;
+ }
+ }
+ // at this point major, minor and patch versions are matching
+
+ if(StringUtils.isBlank(serverCdmlibLastModified) || StringUtils.isBlank(editorCdmlibLastModified)) {
+ throw new CdmSourceException("cdmlib-services server or editor version is empty");
+ }
+
+ String cdmServerIgnoreVersion = System.getProperty("cdm.server.version.lm.ignore");
+ if(StringUtils.isBlank(cdmServerIgnoreVersion) || !cdmServerIgnoreVersion.equals("true")) {
+ Long serverLastModified = Long.valueOf(serverCdmlibLastModified);
+ Long editorLastModified = Long.valueOf(editorCdmlibLastModified);
+ return serverLastModified.compareTo(editorLastModified);
+ }
+
+ return 0;
+ }
+
+
+