From: Andreas Kohlbecker Date: Fri, 5 Feb 2016 16:34:50 +0000 (+0100) Subject: #5533 reading/writing remote server config from/to json X-Git-Tag: 4.0.0^2~158 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/085bcd54d0c2b66542f331c0aaf6d1b26ae29263?ds=sidebyside #5533 reading/writing remote server config from/to json --- 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 b5a0f8af8..a5914aae3 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 @@ -9,9 +9,14 @@ */ package eu.etaxonomy.taxeditor.remoting.source; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.net.Socket; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -32,7 +37,13 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.type.TypeFactory; + import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.common.CdmUtils; import eu.etaxonomy.cdm.config.CdmSourceException; import eu.etaxonomy.cdm.database.CdmPersistentDataSource; import eu.etaxonomy.cdm.database.ICdmDataSource; @@ -77,14 +88,14 @@ public class CdmServerInfo { public final static int NULL_PORT = -1; public final static String NULL_PORT_STRING = "N/A"; + private static final String CDM_REMOTE_SERVERS_CONFIG_FILE = "cdm_remote_servers.json"; + private final String name; private final String server; private int port; private final List instances; - private static List cdmServerInfoList; - private String cdmlibServicesVersion = ""; private String cdmlibServicesLastModified = ""; @@ -377,17 +388,61 @@ public class CdmServerInfo { public static List getCdmServers() { - if(cdmServerInfoList == null) { - cdmServerInfoList = new ArrayList(); - // cdmServerInfoList.add(new CdmServerInfo(NAME_PRODUCTION, SERVER_PRODUCTION, 80, "")); - //cdmServerInfoList.add(new CdmServerInfo(NAME_INTEGRATION, SERVER_INTEGRATION, 80, CDMSERVER_PREFIX)); - cdmServerInfoList.add(new CdmServerInfo(NAME_DEMO_1, SERVER_DEMO_1, 80, CDMSERVER_PREFIX, false)); - // cdmServerInfoList.add(new CdmServerInfo(NAME_DEMO_2, SERVER_DEMO_2, 80, CDMSERVER_PREFIX)); - cdmServerInfoList.add(new CdmServerInfo(NAME_TEST, SERVER_TEST, 80, CDMSERVER_PREFIX, false)); - cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST, SERVER_LOCALHOST, 8080, CDMSERVER_PREFIX, true)); - cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST_MGD, SERVER_LOCALHOST, NULL_PORT, CDMSERVER_PREFIX, false)); + return loadFromJSONConfigFile(new File(CdmUtils.perUserCdmFolder, CDM_REMOTE_SERVERS_CONFIG_FILE)); + } + + + /** + * @param file + * @throws IOException + * @throws FileNotFoundException + * @throws JsonMappingException + * @throws JsonParseException + */ + private static List loadFromJSONConfigFile(File file) { + + List serverList = null; + ObjectMapper mapper = new ObjectMapper(); + + if(!file.exists()) { + logger.info("The remote server config file '" + file.getAbsolutePath() + + "' does not yet exist, it will be created based on the defaults."); + try { + serverList = createDefaultServerList(); + mapper.writerWithDefaultPrettyPrinter().writeValue(new FileOutputStream(file), serverList.toArray(new CdmServerInfo[serverList.size()])); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + try { + CdmServerInfo[] serverInfo = mapper.readValue(new FileInputStream(file), + TypeFactory.defaultInstance().constructArrayType(CdmServerInfo.class)); + serverList = Arrays.asList(serverInfo); + } catch (IOException e) { + throw new RuntimeException(e); + } } - return cdmServerInfoList; + + return serverList; + + + } + + + /** + * + */ + private static List createDefaultServerList() { + + List serverInfoList = new ArrayList(); + // serverInfoList.add(new CdmServerInfo(NAME_PRODUCTION, SERVER_PRODUCTION, 80, "")); + //serverInfoList.add(new CdmServerInfo(NAME_INTEGRATION, SERVER_INTEGRATION, 80, CDMSERVER_PREFIX)); + serverInfoList.add(new CdmServerInfo(NAME_DEMO_1, SERVER_DEMO_1, 80, CDMSERVER_PREFIX, false)); + // serverInfoList.add(new CdmServerInfo(NAME_DEMO_2, SERVER_DEMO_2, 80, CDMSERVER_PREFIX)); + serverInfoList.add(new CdmServerInfo(NAME_TEST, SERVER_TEST, 80, CDMSERVER_PREFIX, false)); + serverInfoList.add(new CdmServerInfo(NAME_LOCALHOST, SERVER_LOCALHOST, 8080, CDMSERVER_PREFIX, true)); + serverInfoList.add(new CdmServerInfo(NAME_LOCALHOST_MGD, SERVER_LOCALHOST, NULL_PORT, CDMSERVER_PREFIX, false)); + return serverInfoList; } public String getName() {