Merge branch 'hotfix/3.12.3'
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / taxeditor / remoting / server / CDMServerUtils.java
1 // $Id$
2 /**
3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.remoting.server;
11
12 import java.io.File;
13 import java.io.IOException;
14
15 import org.apache.commons.io.FileUtils;
16 import org.apache.commons.lang.StringEscapeUtils;
17
18 import eu.etaxonomy.cdm.api.application.CdmApplicationUtils;
19 import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties;
20 import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
21
22 /**
23 * @author cmathew
24 * @date 11 Nov 2015
25 *
26 */
27 public class CDMServerUtils {
28
29
30 public static String convertEditorToServerConfig() {
31 StringBuilder configStringBuilder = new StringBuilder();
32 configStringBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + System.lineSeparator());
33 configStringBuilder.append("<!-- DO NOT EDIT THIS FILE MANUALLY. -->");
34 configStringBuilder.append("<!-- It is created by the Taxonomic Editor for launching a managed CDM Server. -->");
35 configStringBuilder.append("<beans xmlns=\"http://www.springframework.org/schema/beans\"" + System.lineSeparator());
36 configStringBuilder.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" + System.lineSeparator());
37 configStringBuilder.append(" xmlns:tx=\"http://www.springframework.org/schema/tx\"" + System.lineSeparator());
38 configStringBuilder.append(" xmlns:context=\"http://www.springframework.org/schema/context\"" + System.lineSeparator());
39 configStringBuilder.append(" xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" + System.lineSeparator());
40 configStringBuilder.append(" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" + System.lineSeparator());
41 configStringBuilder.append(" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" + System.lineSeparator());
42 configStringBuilder.append("\">" + System.lineSeparator());
43 configStringBuilder.append(" <bean id=\"dataSourceProperties\" class=\"eu.etaxonomy.cdm.remote.config.DataSourceProperties\">" + System.lineSeparator());
44 configStringBuilder.append(" <property name=\"propsMap\">" + System.lineSeparator());
45 configStringBuilder.append(" <map/>" + System.lineSeparator());
46 configStringBuilder.append(" </property>" + System.lineSeparator());
47 configStringBuilder.append(" </bean>" + System.lineSeparator());
48
49 for(CdmPersistentDataSource dataSource : CdmPersistentDataSource.getAllDataSources()) {
50 String beanId = xmlNCNamefrom(dataSource.getName());
51 String user = dataSource.getUsername();
52 String password = dataSource.getPassword();
53 String driverClass = dataSource.getCdmSourceProperty(CdmSourceProperties.DRIVER_CLASS);
54 String jdbcUrl = StringEscapeUtils.escapeXml(dataSource.getCdmSourceProperty(CdmSourceProperties.URL));
55 configStringBuilder.append(" <bean id=\"" + beanId + "\" lazy-init=\"true\" class=\"com.mchange.v2.c3p0.ComboPooledDataSource\">" + System.lineSeparator());
56 configStringBuilder.append(" <property name=\"driverClass\" value=\"" + driverClass + "\"/>" + System.lineSeparator());
57 configStringBuilder.append(" <property name=\"user\" value=\"" + user + "\"/>" + System.lineSeparator());
58 configStringBuilder.append(" <property name=\"password\" value=\"" + password + "\"/>" + System.lineSeparator());
59 configStringBuilder.append(" <property name=\"jdbcUrl\" value=\"" + jdbcUrl + "\"/>" + System.lineSeparator());
60 configStringBuilder.append(" </bean>" + System.lineSeparator());
61
62 }
63 configStringBuilder.append("</beans>" + System.lineSeparator());
64
65 return configStringBuilder.toString();
66 }
67
68 /**
69 * Assures that the datasource name is converted into a valid XML type NCName.
70 *
71 * Prefixes the string and replaces all forbidden characters by '_'.
72 *
73 * @param dataSource
74 * @return
75 */
76 public static String xmlNCNamefrom(String beanName) {
77 return "MGD_" + beanName.replaceAll("[^a-zA-Z0-9]", "_");
78 }
79
80 public static File writeManagedServerConfig(String config, String fileName) throws IOException {
81 File managedConfigFile = new File(CdmApplicationUtils.getWritableResourceDir(), fileName);
82 if(managedConfigFile.exists()) {
83 managedConfigFile.delete();
84 }
85 if(managedConfigFile.createNewFile()) {
86 FileUtils.writeStringToFile(managedConfigFile, config);
87 }
88 return managedConfigFile;
89 }
90
91 }