X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/9632d60d4c0c495662372d4befb1fa40361848a4..7bc0185675b3cd634a16119272e7d09f8b1345e1:/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java index ec715ab2f..f30a93dcd 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java @@ -12,8 +12,11 @@ package eu.etaxonomy.taxeditor.remoting.source; import java.io.IOException; import java.net.Socket; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; @@ -21,13 +24,19 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.config.CdmSourceException; +import eu.etaxonomy.cdm.database.CdmPersistentDataSource; +import eu.etaxonomy.cdm.database.ICdmDataSource; +import eu.etaxonomy.cdm.model.metadata.CdmMetaData; import eu.etaxonomy.taxeditor.remoting.server.CDMServerException; /** @@ -38,18 +47,25 @@ import eu.etaxonomy.taxeditor.remoting.server.CDMServerException; public class CdmServerInfo { public static final Logger logger = Logger.getLogger(CdmServerInfo.class); + private final static String CDMSERVER_PREFIX = "cdmserver"; private final static String NAME_PRODUCTION = "edit-production"; private final static String SERVER_PRODUCTION = "dev.e-taxonomy.eu"; private final static String NAME_INTEGRATION = "edit-integration"; private final static String SERVER_INTEGRATION = "int.e-taxonomy.eu"; + private final static String NAME_DEMO_1 = "edit-WS I"; + private final static String SERVER_DEMO_1 = "160.45.63.230"; + + private final static String NAME_DEMO_2 = "edit-WS II"; + private final static String SERVER_DEMO_2 = "160.45.63.231"; + private final static String NAME_TEST = "edit-test"; private final static String SERVER_TEST = "test.e-taxonomy.eu"; - private final static String SERVER_LOCALHOST = "localhost"; + public final static String SERVER_LOCALHOST = "localhost"; private final static String NAME_LOCALHOST = "localhost"; - private final static String NAME_LOCALHOST_MGD = "localhost mgd."; + public final static String NAME_LOCALHOST_MGD = "localhost mgd."; private final static String NAME_LOCALHOST_DEV = "localhost-dev"; private final static String NAME_INSTANCE_LOCALHOST_DEV = "local-dev"; @@ -62,12 +78,18 @@ public class CdmServerInfo { private final int port; private final List instances; + private static List cdmServerInfoList; + + private String cdmlibServicesVersion = ""; + private String cdmlibServicesLastModified = ""; + public CdmServerInfo(String name, String server, int port) { this.name = name; this.server = server; this.port = port; instances = new ArrayList(); + } @@ -78,10 +100,86 @@ public class CdmServerInfo { } + public boolean isLocalhost() { + return name.startsWith(SERVER_LOCALHOST); + } + + public boolean isLocalhostMgd() { + return NAME_LOCALHOST_MGD.equals(name); + } + + public String getCdmlibServicesVersion() { + return cdmlibServicesVersion; + } + + public String getCdmlibLastModified() { + return cdmlibServicesLastModified; + } + public void refreshInstances() throws CDMServerException { - String url = "http://" + server + ":" + String.valueOf(port) + "/cdmserver/instances.jsp"; + instances.clear(); + if(isLocalhostMgd()) { + addInstancesFromDataSourcesConfig(); + } else { + addInstancesViaHttp(); + } + Collections.sort(instances, new Comparator() { + @Override + public int compare(CdmInstanceInfo cii1, CdmInstanceInfo cii2) + { + return cii1.getName().toString().compareTo(cii2.getName().toString()); + } + }); + } + + public void updateInfo() throws CDMServerException { + String url = "http://" + server + ":" + String.valueOf(port) + "/" + CDMSERVER_PREFIX + "/info.jsp"; + String responseBody = getResponse(url); + if(responseBody != null) { + try { + JSONObject info = new JSONObject(responseBody); + cdmlibServicesVersion = info.getString("cdmlibServicesVersion"); + cdmlibServicesLastModified = info.getString("cdmlibServicesLastModified"); + } catch (JSONException e) { + throw new CDMServerException(e); + } + } + } + + public void addInstancesViaHttp() throws CDMServerException { + updateInfo(); + String url = "http://" + server + ":" + String.valueOf(port) + "/" + CDMSERVER_PREFIX + "/instances.jsp"; + String responseBody = getResponse(url); + if(responseBody != null) { + try { + JSONArray array = new JSONArray(responseBody); + for(int i=0;i 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; + } + + + public static List getCdmServers() { - List cdmServerInfoList = new ArrayList(); - cdmServerInfoList.add(new CdmServerInfo(NAME_PRODUCTION, SERVER_PRODUCTION, 80)); - cdmServerInfoList.add(new CdmServerInfo(NAME_INTEGRATION, SERVER_INTEGRATION, 80)); - cdmServerInfoList.add(new CdmServerInfo(NAME_TEST, SERVER_TEST, 80)); - cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST, SERVER_LOCALHOST, 8080)); - cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST_MGD, SERVER_LOCALHOST,8080)); + if(cdmServerInfoList == null) { + cdmServerInfoList = new ArrayList(); + //cdmServerInfoList.add(new CdmServerInfo(NAME_PRODUCTION, SERVER_PRODUCTION, 80)); + //cdmServerInfoList.add(new CdmServerInfo(NAME_INTEGRATION, SERVER_INTEGRATION, 80)); + cdmServerInfoList.add(new CdmServerInfo(NAME_DEMO_1, SERVER_DEMO_1, 80)); + cdmServerInfoList.add(new CdmServerInfo(NAME_DEMO_2, SERVER_DEMO_2, 80)); + cdmServerInfoList.add(new CdmServerInfo(NAME_TEST, SERVER_TEST, 80)); + cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST, SERVER_LOCALHOST, 8080)); + cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST_MGD, SERVER_LOCALHOST,8080)); + } return cdmServerInfoList; } @@ -217,17 +391,18 @@ public class CdmServerInfo { return instances; } - public static ICdmRemoteSource getDevServerRemoteSource() { - String value=System.getProperty("cdm.server.dev.activate"); + public static CdmRemoteSource getDevServerRemoteSource() { + String value = System.getProperty("cdm.server.dev.port"); boolean available = false; CdmInstanceInfo devInstance = null; - if(value != null && value.equals("true")) { - CdmServerInfo devCii = new CdmServerInfo(NAME_LOCALHOST_DEV, SERVER_LOCALHOST_DEV, PORT_LOCALHOST_DEV); + if(value != null && !value.isEmpty()) { + int devPort = Integer.valueOf(value); + CdmServerInfo devCii = new CdmServerInfo(NAME_LOCALHOST_DEV, SERVER_LOCALHOST_DEV, devPort); try { devInstance = devCii.addInstance(NAME_INSTANCE_LOCALHOST_DEV, BASEPATH_LOCALHOST_DEV); - available = devCii.pingInstance(devInstance); + available = devCii.pingInstance(devInstance, devPort); if(available) { - return devCii.getCdmRemoteSource(devInstance); + return devCii.getCdmRemoteSource(devInstance, devPort); } } catch (Exception e) { @@ -238,6 +413,12 @@ public class CdmServerInfo { public class CdmInstanceInfo { private final String name; + + /** + * The full path of the instance including the the prefix (if any). + * E.g. for an EDIT instance this would be something like "cdmserver/remoting" + * For a managed local server this would simply be "remoting" + */ private final String basePath;