diff --git a/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java b/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java
index 4c792c827..5e39c6113 100755
--- a/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java
+++ b/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherConfig.java
@@ -1,106 +1,134 @@
/*
- * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
+ * Copyright (C) 2016 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
*/
package com.arsdigita.dispatcher;
-import com.arsdigita.runtime.AbstractConfig;
-import com.arsdigita.util.parameter.BooleanParameter;
-import com.arsdigita.util.parameter.IntegerParameter;
-import com.arsdigita.util.parameter.Parameter;
-import com.arsdigita.util.parameter.StringParameter;
-import org.apache.log4j.Logger;
+import java.util.Objects;
+import org.libreccm.cdi.utils.CdiUtil;
+import org.libreccm.configuration.Configuration;
+import org.libreccm.configuration.ConfigurationManager;
+import org.libreccm.configuration.Setting;
/**
- * @author Randy Graebner
- * @version $Id: DispatcherConfig.java 1169 2006-06-14 13:08:25Z fabrice $
+ *
+ * @author Jens Pelzetter
*/
-public final class DispatcherConfig extends AbstractConfig {
+@Configuration(descBundle = "com.arsdigita.dispatcher.DispatcherConfigDescription",
+ descKey = "dispatcher.config.description")
+public final class DispatcherConfig {
- private static final Logger s_log = Logger.getLogger(DispatcherConfig.class);
+ @Setting(descKey = "dispatcher.config.caching_active")
+ private Boolean cachingActive = true;
- private final Parameter m_cachingActive;
- private final Parameter m_defaultExpiry;
- private final Parameter m_staticURLPrefix;
+ @Setting(descKey = "dispatcher.config.default_expiry")
+ private Integer defaultExpiry = 259200;
- /** Default top-level container for all Bebop components and containersPage
- * to use for dispatching Bebop pages. A custom installation may provide
- * it's own implementation. Use with care because all pages inherit from
- * this class!
- * Default is {@see com.arsdigita.bebop.Page} */
- private final Parameter m_defaultPageClass= new
- StringParameter("waf.dispatcher.default_page_class",
- Parameter.OPTIONAL,
- "com.arsdigita.bebop.Page");
+ @Setting(descKey = "dispatcher.config.static_url_prefix")
+ private String staticUrlPrefix = "/STATICII/";
- public DispatcherConfig() {
- m_cachingActive = new BooleanParameter
- ("waf.dispatcher.is_caching_active",
- Parameter.REQUIRED, Boolean.TRUE);
+ @Setting(descKey = "dispatcher.config.default_page_class")
+ private String defaultPageClass = "com.arsdigita.bebop.Page";
- // defaults to three days
- m_defaultExpiry = new IntegerParameter
- ("waf.dispatcher.default_expiry", Parameter.REQUIRED,
- new Integer(259200));
-
- m_staticURLPrefix = new StringParameter
- ("waf.dispatcher.static_url_prefix", Parameter.REQUIRED,
- "/STATICII/");
-
- register(m_staticURLPrefix);
- register(m_cachingActive);
- register(m_defaultExpiry);
- register(m_defaultPageClass);
-
- loadInfo();
+ public static DispatcherConfig getConfig() {
+ final CdiUtil cdiUtil = new CdiUtil();
+ final ConfigurationManager confManager = cdiUtil.findBean(
+ ConfigurationManager.class);
+ return confManager.findConfiguration(DispatcherConfig.class);
}
- /**
- * Get the URL for static items
- */
- public String getStaticURLPrefix() {
- return (String)get(m_staticURLPrefix);
+ public Boolean isCachingActive() {
+ return cachingActive;
}
- /**
- * This returns Boolean.TRUE if the caching is active
- */
- public Boolean getCachingActive() {
- return (Boolean)get(m_cachingActive);
+ public void setCachingActive(final Boolean cachingActive) {
+ this.cachingActive = cachingActive;
}
- public boolean isCachingActive() {
- return Boolean.TRUE.equals(getCachingActive());
+ public Integer getDefaultExpiry() {
+ return defaultExpiry;
}
- /**
- * This returns the number of seconds something is cached for
- */
- public Integer getDefaultExpiryTime() {
- return (Integer)get(m_defaultExpiry);
+ public void setDefaultExpiry(final Integer defaultExpiry) {
+ this.defaultExpiry = defaultExpiry;
}
-
- /**
- * Retrieve the top-level container for all Bebop components and
- * containersPage to use by dispatcher.
- * Most installation should use the provided default implementation in
- * {@see com.arsdigita.bebop.Page}
- */
+
+ public String getStaticUrlPrefix() {
+ return staticUrlPrefix;
+ }
+
+ public void setStaticUrlPrefix(final String staticUrlPrefix) {
+ this.staticUrlPrefix = staticUrlPrefix;
+ }
+
public String getDefaultPageClass() {
- return (String)get(m_defaultPageClass);
+ return defaultPageClass;
+ }
+
+ public void setDefaultPageClass(final String defaultPageClass) {
+ this.defaultPageClass = defaultPageClass;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 97 * hash + Objects.hashCode(cachingActive);
+ hash = 97 * hash + Objects.hashCode(defaultExpiry);
+ hash = 97 * hash + Objects.hashCode(staticUrlPrefix);
+ hash = 97 * hash + Objects.hashCode(defaultPageClass);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof DispatcherConfig)) {
+ return false;
+ }
+ final DispatcherConfig other = (DispatcherConfig) obj;
+ if (!Objects.equals(staticUrlPrefix, other.getStaticUrlPrefix())) {
+ return false;
+ }
+ if (!Objects.equals(defaultPageClass, other.getDefaultPageClass())) {
+ return false;
+ }
+ if (!Objects.equals(cachingActive, other.isCachingActive())) {
+ return false;
+ }
+ return Objects.equals(defaultExpiry, other.getDefaultExpiry());
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s{ "
+ + "cachingActive = %b, "
+ + "defaultExpiry = %d, "
+ + "staticUrlPrefix = \"%s\", "
+ + "defaultPageClass = \"%s\""
+ + " }",
+ super.toString(),
+ cachingActive,
+ defaultExpiry,
+ staticUrlPrefix,
+ defaultPageClass);
}
}
diff --git a/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherHelper.java b/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherHelper.java
index 025642abb..d8d1449a3 100644
--- a/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherHelper.java
+++ b/ccm-core/src/main/java/com/arsdigita/dispatcher/DispatcherHelper.java
@@ -69,7 +69,6 @@ public final class DispatcherHelper implements DispatcherConstants {
private static String s_staticURL;
private static boolean s_cachingActive;
private static int s_defaultExpiry;
- private static DispatcherConfig s_config;
public static SimpleDateFormat rfc1123_formatter;
private static boolean initialized = false;
@@ -81,11 +80,9 @@ public final class DispatcherHelper implements DispatcherConstants {
rfc1123_formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
rfc1123_formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
- // set the defaults
- s_config = getConfig();
- s_staticURL = s_config.getStaticURLPrefix();
- s_defaultExpiry = s_config.getDefaultExpiryTime().intValue();
- s_cachingActive = s_config.isCachingActive();
+ s_staticURL = DispatcherConfig.getConfig().getStaticUrlPrefix();
+ s_defaultExpiry = DispatcherConfig.getConfig().getDefaultExpiry();
+ s_cachingActive = DispatcherConfig.getConfig().isCachingActive();
initialized = true;
}
@@ -1115,18 +1112,6 @@ public final class DispatcherHelper implements DispatcherConstants {
cacheForWorld(response, (int) ((expiry.getTime() - (new Date()).getTime()) / 1000l));
}
- /**
- * This returns a reference to the dispatcher configuration file
- * @return
- */
- public static DispatcherConfig getConfig() {
- if (s_config == null) {
- s_config = new DispatcherConfig();
- s_config.load();
- }
- return s_config;
- }
-
/**
* This method returns the best matching locale for the request. In contrast
* to the other methods available this one will also respect the
diff --git a/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java b/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java
index 0aa468cba..26d034694 100644
--- a/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java
+++ b/ccm-core/src/main/java/com/arsdigita/globalization/GlobalizationConfig.java
@@ -1,104 +1,84 @@
/*
- * Copyright (C) 2010 pboy (pboy@barkhof.uni-bremen.de) All Rights Reserved.
+ * Copyright (C) 2016 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
*/
-
package com.arsdigita.globalization;
-import com.arsdigita.runtime.AbstractConfig;
-import com.arsdigita.util.parameter.StringParameter;
-import com.arsdigita.util.parameter.Parameter;
-
-import org.apache.log4j.Logger;
-
+import java.util.Objects;
+import org.libreccm.cdi.utils.CdiUtil;
+import org.libreccm.configuration.Configuration;
+import org.libreccm.configuration.ConfigurationManager;
+import org.libreccm.configuration.Setting;
/**
- * A configuration record for configuration of the core globalization package
*
- * Accessors of this class may return null. Developers should take care
- * to trap null return values in their code.
- *
- * @author Peter Boy <pboy@barkhof.uni-bremen.de>
- * @version $Id: $
+ * @author Jens Pelzetter
*/
-public class GlobalizationConfig extends AbstractConfig {
+@Configuration(
+ descBundle = "com.arsdigita.globalization.GlobalizationConfigDescription",
+ descKey = "globalization.config.description")
+public class GlobalizationConfig {
- /** A logger instance. */
- private static final Logger s_log = Logger.getLogger(GlobalizationConfig.class);
+ @Setting(descKey = "globalization.config.default_charset")
+ private String defaultCharset = "UTF-8";
- /** Singelton config object. */
- private static GlobalizationConfig s_conf;
-
- /**
- * Gain a UIConfig object.
- *
- * Singelton pattern, don't instantiate a lifecacle object using the
- * constructor directly!
- * @return
- */
- public static synchronized GlobalizationConfig getConfig() {
- if (s_conf == null) {
- s_conf = new GlobalizationConfig();
- s_conf.load();
- }
-
- return s_conf;
+ public static GlobalizationConfig getConfig() {
+ final CdiUtil cdiUtil = new CdiUtil();
+ final ConfigurationManager confManager = cdiUtil.findBean(
+ ConfigurationManager.class);
+ return confManager.findConfiguration(GlobalizationConfig.class);
}
-
-
- /**
- * Default character set for locales not explicitly listed above in the
- * locales parameter.
- * This parameter is read each time the system starts. Therefore, modifications
- * will take effect after a CCM restart.
- */
- // In OLD initializer: DEFAULT_CHARSET as String
- private final Parameter m_defaultCharset =
- new StringParameter(
- "core.globalization.default_charset",
- Parameter.REQUIRED, "UTF-8");
-
-
- /**
- * Constructs an empty RuntimeConfig object.
- *
- */
- public GlobalizationConfig() {
- // pboy: According to the comment for the getConfig() method a singleton
- // pattern is to be used. Therefore the constructor should be changed to
- // private!
- // private GlobalizationConfig() {
- register(m_defaultCharset);
-
- loadInfo();
-
- }
-
-
-
- /**
- * Retrieve the default char set to be used for locales not explicitly
- * listed in the supported locales list.
- *
- * @return root page url
- */
public String getDefaultCharset() {
- return (String)get(m_defaultCharset) ;
+ return defaultCharset;
}
+ public void setDefaultCharset(final String defaultCharset) {
+ this.defaultCharset = defaultCharset;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 5;
+ hash = 43 * hash + Objects.hashCode(defaultCharset);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof GlobalizationConfig)) {
+ return false;
+ }
+ final GlobalizationConfig other = (GlobalizationConfig) obj;
+ return Objects.equals(defaultCharset, other.defaultCharset);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s{ "
+ + "defaultCharset = \"%s\""
+ + " }",
+ super.toString(),
+ defaultCharset);
+ }
}
diff --git a/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java b/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java
index 7210e6237..e04a5dd51 100644
--- a/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java
+++ b/ccm-core/src/main/java/com/arsdigita/ui/login/LoginServlet.java
@@ -29,7 +29,6 @@ import com.arsdigita.bebop.event.ActionEvent;
import com.arsdigita.bebop.event.ActionListener;
import com.arsdigita.bebop.page.BebopApplicationServlet;
import com.arsdigita.dispatcher.DispatcherConfig;
-import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.kernel.security.SecurityConfig;
import com.arsdigita.ui.UI;
import com.arsdigita.web.ReturnSignal;
@@ -227,7 +226,7 @@ public class LoginServlet extends BebopApplicationServlet {
*/
private static Page checkForPageSubClass() {
//check to see if there is subclass of Page defined in Config
- DispatcherConfig dc = DispatcherHelper.getConfig();
+ DispatcherConfig dc = DispatcherConfig.getConfig();
String pageClass = dc.getDefaultPageClass();
Page p = null;
if (!pageClass.equals("com.arsdigita.bebop.Page")) {
diff --git a/ccm-core/src/main/resources/com/arsdigita/dispatcher/DispatcherConfigDescription.properties b/ccm-core/src/main/resources/com/arsdigita/dispatcher/DispatcherConfigDescription.properties
new file mode 100644
index 000000000..91fbd2b58
--- /dev/null
+++ b/ccm-core/src/main/resources/com/arsdigita/dispatcher/DispatcherConfigDescription.properties
@@ -0,0 +1,23 @@
+# Copyright (C) 2016 LibreCCM Foundation.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+
+dispatcher.config.description = Configuration for the Dispatcher
+
+dispatcher.config.caching_active = Toggle whether or not to use HTTP/1.1 caching
+dispatcher.config.default_expiry = Set the default expiration time for HTTP caching
+dispatcher.config.static_url_prefix = Prefix used for serving static files
+dispatcher.config.default_page_class = The default page class. A custom installation may provide it's own implementation. Use with care because all pages inherit from this class!
\ No newline at end of file
diff --git a/ccm-core/src/main/resources/com/arsdigita/dispatcher/DispatcherConfig_parameter.properties b/ccm-core/src/main/resources/com/arsdigita/dispatcher/DispatcherConfig_parameter.properties
deleted file mode 100755
index d48763e5b..000000000
--- a/ccm-core/src/main/resources/com/arsdigita/dispatcher/DispatcherConfig_parameter.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-waf.dispatcher.static_url_prefix.title=Static URL Prefix
-waf.dispatcher.static_url_prefix.purpose=Prefix used for serving static files
-waf.dispatcher.static_url_prefix.example=/STATIC/
-waf.dispatcher.static_url_prefix.format=[url]
-
-waf.dispatcher.is_caching_active.title=Dispatcher caching enabled
-waf.dispatcher.is_caching_active.purpose=Toggle whether or not to use HTTP/1.1 caching
-waf.dispatcher.is_caching_active.example=true
-waf.dispatcher.is_caching_active.format=true|false
-
-waf.dispatcher.default_expiry.title=Default cache expiration
-waf.dispatcher.default_expiry.purpose=Set the default expiration time for HTTP caching
-waf.dispatcher.default_expiry.example=259200
-waf.dispatcher.default_expiry.format=[integer]
-
-waf.dispatcher.default_page_class.title=Default page class
-waf.dispatcher.default_page_class.purpose=the default page class
-waf.dispatcher.default_page_class.example=com.arsdigita.bebop.Page
-waf.dispatcher.default_page_class.format=[String]
diff --git a/ccm-core/src/main/resources/com/arsdigita/globalization/GlobalizationConfigDescription.properties b/ccm-core/src/main/resources/com/arsdigita/globalization/GlobalizationConfigDescription.properties
new file mode 100644
index 000000000..5681429ae
--- /dev/null
+++ b/ccm-core/src/main/resources/com/arsdigita/globalization/GlobalizationConfigDescription.properties
@@ -0,0 +1,20 @@
+# Copyright (C) 2016 LibreCCM Foundation.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+
+globalization.config.description = A configuration record for configuration of the core globalization package
+
+globalization.config.default_charset = Default character set for locales not explicitly listed in the locales parameter.
\ No newline at end of file
diff --git a/ccm-core/src/main/resources/com/arsdigita/globalization/GlobalizationConfig_parameter.properties b/ccm-core/src/main/resources/com/arsdigita/globalization/GlobalizationConfig_parameter.properties
deleted file mode 100644
index 50c9d090d..000000000
--- a/ccm-core/src/main/resources/com/arsdigita/globalization/GlobalizationConfig_parameter.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-core.globalization.default_charset.title=Default Charset
-core.globalization.default_charset.purpose=Default character set for locales not explicitly listed in the locales parameter.
-core.globalization.default_charset.example="UTF-8"
-core.globalization.default_charset.format=[String]