]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/CmsDeployProperty.java
Refactor deploy properties and move legacy CMS exception.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / CmsDeployProperty.java
diff --git a/org.argeo.cms/src/org/argeo/cms/CmsDeployProperty.java b/org.argeo.cms/src/org/argeo/cms/CmsDeployProperty.java
new file mode 100644 (file)
index 0000000..ef1edcc
--- /dev/null
@@ -0,0 +1,147 @@
+package org.argeo.cms;
+
+import java.util.Objects;
+
+/** A property that can be used to configure a CMS node deployment. */
+public enum CmsDeployProperty {
+       //
+       // DIRECTORY
+       //
+       DIRECTORY("argeo.directory", 64),
+       //
+       // DATABASE
+       //
+       /** URL of the database backend. */
+       DB_URL("argeo.db.url"),
+       /** DB user of the database backend. */
+       DB_USER("argeo.db.user"),
+       /** DB user password of the database backend. */
+       DB_PASSWORD("argeo.db.password"),
+       //
+       // NETWORK
+       //
+       /** Either a host or an IP address. Restricts all servers to it. */
+       HOST("argeo.host"),
+       //
+       // HTTP
+       //
+       /** Request an HTTP server on this port. */
+       HTTP_PORT("argeo.http.port"),
+       /** Request an HTTPS server on this port. */
+       HTTPS_PORT("argeo.https.port"),
+       /**
+        * The HTTP header used to convey the DN of a client verified by a reverse
+        * proxy. Typically SSL_CLIENT_S_DN for Apache.
+        */
+       HTTP_PROXY_SSL_HEADER_DN("argeo.http.proxy.ssl.header.dn"),
+       //
+       // SSL
+       //
+       /** SSL keystore for the system. */
+       SSL_KEYSTORE("argeo.ssl.keystore"),
+       /** SSL keystore password for the system. */
+       SSL_PASSWORD("argeo.ssl.password"),
+       /** SSL keystore type password for the system. */
+       SSL_KEYSTORETYPE("argeo.ssl.keystoretype"),
+       /** SSL password for the private key. */
+       SSL_KEYPASSWORD("argeo.ssl.keypassword"),
+       /** Whether a client certificate is required. */
+       SSL_NEEDCLIENTAUTH("argeo.ssl.needclientauth"),
+       /** Whether a client certificate can be used. */
+       SSL_WANTCLIENTAUTH("argeo.ssl.wantclientauth"),
+       /** SSL protocol to use. */
+       SSL_PROTOCOL("argeo.ssl.protocol"),
+       /** SSL algorithm to use. */
+       SSL_ALGORITHM("argeo.ssl.algorithm"),
+       //
+       // WEBSOCKET
+       //
+       /** Whether web socket should be enables in web server. */
+       WEBSOCKET_ENABLED("argeo.websocket.enabled"),
+       //
+       // INTERNATIONALIZATION
+       //
+       /** Locales enabled for this system, the first one is considered the default. */
+       LOCALE("argeo.locale", 256),
+       //
+       // NODE
+       //
+       /** Directories to copy to the data area during the first initialisation. */
+       NODE_INIT("argeo.node.init", 64),
+       //
+       // JAVA
+       //
+       /** Custom JAAS config. */
+       JAVA_LOGIN_CONFIG("java.security.auth.login.config", true),
+       //
+       // OSGi
+       //
+       /** OSGi writable data area. */
+       OSGI_INSTANCE_AREA("osgi.instance.area"),
+       /** OSGi writable configuration area. */
+       OSGI_CONFIGURATION_AREA("osgi.configuration.area"),
+       //
+       ;
+
+       private String property;
+       private boolean systemPropertyOnly = false;
+
+       private int maxCount = 1;
+
+       CmsDeployProperty(String property) {
+               this(property, 1, false);
+       }
+
+       CmsDeployProperty(String property, int maxCount) {
+               this(property, maxCount, false);
+       }
+
+       CmsDeployProperty(String property, boolean systemPropertyOnly) {
+               this.property = property;
+       }
+
+       CmsDeployProperty(String property, int maxCount, boolean systemPropertyOnly) {
+               this.property = property;
+               this.systemPropertyOnly = systemPropertyOnly;
+               this.maxCount = maxCount;
+       }
+
+       public String getProperty() {
+               return property;
+       }
+
+       public boolean isSystemPropertyOnly() {
+               return systemPropertyOnly;
+       }
+
+       public int getMaxCount() {
+               return maxCount;
+       }
+
+       public static CmsDeployProperty find(String property) {
+               int index = getPropertyIndex(property);
+               String propertyName = index == 0 ? property : property.substring(0, property.lastIndexOf('.'));
+               for (CmsDeployProperty deployProperty : values()) {
+                       if (deployProperty.getProperty().equals(propertyName))
+                               return deployProperty;
+               }
+               return null;
+       }
+
+       public static int getPropertyIndex(String property) {
+               Objects.requireNonNull(property);
+               int lastDot = property.lastIndexOf('.');
+               if (lastDot <= 0 || lastDot == (property.length() - 1)) {
+                       throw new IllegalArgumentException("Property " + property + " is not qualified (must contain a dot).");
+               }
+               String lastSegment = property.substring(lastDot + 1);
+               int index;
+               try {
+                       index = Integer.parseInt(lastSegment);
+               } catch (NumberFormatException e) {
+                       index = 0;
+               }
+               return index;
+       }
+
+}