001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.kernel.resiliency.spi;
016    
017    import com.liferay.portal.kernel.util.CharPool;
018    import com.liferay.portal.kernel.util.GetterUtil;
019    import com.liferay.portal.kernel.util.StringBundler;
020    import com.liferay.portal.kernel.util.StringUtil;
021    import com.liferay.portal.kernel.xml.Document;
022    import com.liferay.portal.kernel.xml.DocumentException;
023    import com.liferay.portal.kernel.xml.Element;
024    import com.liferay.portal.kernel.xml.UnsecureSAXReaderUtil;
025    
026    import java.io.Serializable;
027    
028    import java.util.Arrays;
029    import java.util.List;
030    
031    /**
032     * @author Shuyang Zhou
033     */
034    public class SPIConfiguration implements Serializable {
035    
036            public static final String JAVA_EXECUTABLE_DEFAULT = "java";
037    
038            public static final String JVM_ARGUMENTS_DEFAULT =
039                    "-Xmx1024m -XX:PermSize=200m";
040    
041            public static final long PING_INTERVAL_DEFAULT = 5000;
042    
043            public static final long REGISTER_TIMEOUT_DEFAULT = 10000;
044    
045            public static final long SHUTDOWN_TIMEOUT_DEFAULT = 10000;
046    
047            public static SPIConfiguration fromXMLString(String xmlString)
048                    throws DocumentException {
049    
050                    Document document = UnsecureSAXReaderUtil.read(xmlString);
051    
052                    Element rootElement = document.getRootElement();
053    
054                    String id = rootElement.elementText("id");
055                    String javaExecutable = rootElement.elementText("javaExecutable");
056                    String jvmArguments = rootElement.elementText("jvmArguments");
057                    String spiAgentClassName = rootElement.elementText("spiAgentClassName");
058                    int connectorPort = GetterUtil.getIntegerStrict(
059                            rootElement.elementText("connectorPort"));
060                    String baseDir = rootElement.elementText("baseDir");
061                    String[] portletIds = StringUtil.split(
062                            rootElement.elementText("portletIds"));
063                    String[] servletContextNames = StringUtil.split(
064                            rootElement.elementText("servletContextNames"));
065                    long pingInterval = GetterUtil.getLongStrict(
066                            rootElement.elementText("pingInterval"));
067                    long registerTimeout = GetterUtil.getLongStrict(
068                            rootElement.elementText("registerTimeout"));
069                    long shutdownTimeout = GetterUtil.getLongStrict(
070                            rootElement.elementText("shutdownTimeout"));
071                    String extraSettings = rootElement.elementText("extraSettings");
072    
073                    return new SPIConfiguration(
074                            id, javaExecutable, jvmArguments, spiAgentClassName, connectorPort,
075                            baseDir, portletIds, servletContextNames, pingInterval,
076                            registerTimeout, shutdownTimeout, extraSettings);
077            }
078    
079            public SPIConfiguration(
080                    String spiId, String spiAgentClassName, int connectorPort,
081                    String baseDir, String[] portletIds, String[] servletContextNames,
082                    String extraSettings) {
083    
084                    this(
085                            spiId, JAVA_EXECUTABLE_DEFAULT, JVM_ARGUMENTS_DEFAULT,
086                            spiAgentClassName, connectorPort, baseDir, portletIds,
087                            servletContextNames, PING_INTERVAL_DEFAULT,
088                            REGISTER_TIMEOUT_DEFAULT, SHUTDOWN_TIMEOUT_DEFAULT, extraSettings);
089            }
090    
091            public SPIConfiguration(
092                    String spiId, String javaExecutable, String jvmArguments,
093                    String spiAgentClassName, int connectorPort, String baseDir,
094                    String[] portletIds, String[] servletContextNames, long pingInterval,
095                    long registerTimeout, long shutdownTimeout, String extraSettings) {
096    
097                    _spiId = spiId;
098                    _javaExecutable = javaExecutable;
099                    _jvmArguments = jvmArguments;
100                    _spiAgentClassName = spiAgentClassName;
101                    _connectorPort = connectorPort;
102                    _baseDir = baseDir;
103                    _portletIds = portletIds;
104                    _servletContextNames = servletContextNames;
105                    _pingInterval = pingInterval;
106                    _registerTimeout = registerTimeout;
107                    _shutdownTimeout = shutdownTimeout;
108                    _extraSettings = extraSettings;
109            }
110    
111            public String getBaseDir() {
112                    return _baseDir;
113            }
114    
115            public int getConnectorPort() {
116                    return _connectorPort;
117            }
118    
119            public String getExtraSettings() {
120                    return _extraSettings;
121            }
122    
123            public String getJavaExecutable() {
124                    return _javaExecutable;
125            }
126    
127            public List<String> getJVMArguments() {
128                    return Arrays.asList(StringUtil.split(_jvmArguments, CharPool.SPACE));
129            }
130    
131            public long getPingInterval() {
132                    return _pingInterval;
133            }
134    
135            public String[] getPortletIds() {
136                    return _portletIds;
137            }
138    
139            public long getRegisterTimeout() {
140                    return _registerTimeout;
141            }
142    
143            public String[] getServletContextNames() {
144                    return _servletContextNames;
145            }
146    
147            public long getShutdownTimeout() {
148                    return _shutdownTimeout;
149            }
150    
151            public String getSPIAgentClassName() {
152                    return _spiAgentClassName;
153            }
154    
155            public String getSPIId() {
156                    return _spiId;
157            }
158    
159            @Override
160            public String toString() {
161                    StringBundler sb = new StringBundler(25);
162    
163                    sb.append("{baseDir=");
164                    sb.append(_baseDir);
165                    sb.append(", connectorPort=");
166                    sb.append(_connectorPort);
167                    sb.append(", extraSettings=");
168                    sb.append(_extraSettings);
169                    sb.append(", javaExecutable=");
170                    sb.append(_javaExecutable);
171                    sb.append(", jvmArguments=");
172                    sb.append(_jvmArguments);
173                    sb.append(", pingInterval=");
174                    sb.append(_pingInterval);
175                    sb.append(", portletIds=[");
176                    sb.append(StringUtil.merge(_portletIds));
177                    sb.append("], registerTimeout=");
178                    sb.append(_registerTimeout);
179                    sb.append(", servletContextName=[");
180                    sb.append(StringUtil.merge(_servletContextNames));
181                    sb.append("], shutdownTimeout=");
182                    sb.append(_shutdownTimeout);
183                    sb.append(", spiAgentClassName=");
184                    sb.append(_spiAgentClassName);
185                    sb.append(", spiId=");
186                    sb.append(_spiId);
187                    sb.append("}");
188    
189                    return sb.toString();
190            }
191    
192            public String toXMLString() {
193                    com.liferay.portal.kernel.xml.simple.Element element =
194                            new com.liferay.portal.kernel.xml.simple.Element(
195                                    "SPIConfiguration");
196    
197                    element.addElement("id", _spiId);
198                    element.addElement("javaExecutable", _javaExecutable);
199                    element.addElement("jvmArguments", _jvmArguments);
200                    element.addElement("spiAgentClassName", _spiAgentClassName);
201                    element.addElement("connectorPort", _connectorPort);
202                    element.addElement("baseDir", _baseDir);
203                    element.addElement("portletIds", StringUtil.merge(_portletIds));
204                    element.addElement(
205                            "servletContextNames", StringUtil.merge(_servletContextNames));
206                    element.addElement("pingInterval", _pingInterval);
207                    element.addElement("registerTimeout", _registerTimeout);
208                    element.addElement("shutdownTimeout", _shutdownTimeout);
209                    element.addElement("extraSettings", _extraSettings);
210    
211                    return element.toXMLString();
212            }
213    
214            private static final long serialVersionUID = 1L;
215    
216            private String _baseDir;
217            private int _connectorPort;
218            private String _extraSettings;
219            private String _javaExecutable;
220            private String _jvmArguments;
221            private long _pingInterval;
222            private String[] _portletIds;
223            private long _registerTimeout;
224            private String[] _servletContextNames;
225            private long _shutdownTimeout;
226            private String _spiAgentClassName;
227            private String _spiId;
228    
229    }