You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/20 13:33:45 UTC
[10/51] [abbrv] isis git commit: ISIS-1406: lots more refactoring
around IsisConfiguration and IsisConfigurationBuilder.
ISIS-1406: lots more refactoring around IsisConfiguration and IsisConfigurationBuilder.
specifically:
- simplified IsisConfigurationBuilder, now a single class (rather than an interface with 4 different impls, only 2 of which were used).
- removed IsisRunner, so that the command line options are now a responsibility of the IsisConfigurationBuilder
- IsisConfigurationBuilder is passed from o.a.i.WebServer to IsisWicketApplication (not just the "primers"
- removed OptionValidator, wasn't being used
- FacetFactoryAbstract responsible for providing IsisConfiguration to all subclass impls
- InstallerLookup simplified, no longer responsible for appending to the IsisConfigurationBuilder
- InstallerAbstract impls now all have the IsisConfiguration injected into them (constructor injection).
- removed duplication between IsisWebAppBootstrapper and IsisWicketApplication
As of this commit the app runs, but the fixtures are not being automatically installed.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/74565888
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/74565888
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/74565888
Branch: refs/heads/master
Commit: 7456588834a18ff4b47e59af93e1ccaa29912457
Parents: dcaab8e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu May 19 13:53:08 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu May 19 13:53:08 2016 +0100
----------------------------------------------------------------------
.../integtestsupport/IsisSystemForTest.java | 2 +-
.../isis/core/commons/components/Installer.java | 34 --
.../commons/components/InstallerAbstract.java | 117 ++++++
.../core/commons/config/InstallerAbstract.java | 176 ---------
.../core/commons/config/IsisConfiguration.java | 3 +-
.../config/IsisConfigurationBuilder.java | 73 ----
.../config/IsisConfigurationBuilderAware.java | 25 --
.../config/IsisConfigurationBuilderDefault.java | 76 ----
.../IsisConfigurationBuilderFileSystem.java | 57 ---
.../config/IsisConfigurationBuilderPrimer.java | 26 --
...IsisConfigurationBuilderResourceStreams.java | 289 ---------------
.../config/IsisConfigurationDefault.java | 4 -
.../isis/core/commons/config/JmxBeanServer.java | 73 ----
.../core/commons/config/PropertiesReader.java | 54 ---
.../isis/core/commons/config/package-info.java | 2 +-
.../ConfigurationResourceAndPolicy.java | 46 +++
.../configbuilder/IsisConfigurationBuilder.java | 371 +++++++++++++++++++
.../commons/configbuilder/PropertiesReader.java | 54 +++
.../isis/core/commons/factory/InstanceUtil.java | 69 +++-
.../isis/core/commons/jmx/JmxBeanServer.java | 67 ++++
...sourceStreamSourceChainOfResponsibility.java | 3 +
.../metamodel/facets/FacetFactoryAbstract.java | 11 +-
...llectionIdentifyingFacetFactoryAbstract.java | 14 -
.../action/ActionAnnotationFacetFactory.java | 20 +-
.../paged/PagedFacetOnActionFactory.java | 10 +-
.../CollectionAnnotationFacetFactory.java | 7 +-
.../paged/PagedFacetOnCollectionFactory.java | 10 +-
.../facets/fallback/FallbackFacetFactory.java | 16 -
...FacetOnActionFromConfiguredRegexFactory.java | 18 +-
.../annotprop/CssClassFacetOnMemberFactory.java | 7 +-
.../CssClassFaFacetOnMemberFactory.java | 8 +-
.../ViewModelSemanticCheckingFacetFactory.java | 14 +-
...FacetAnnotationElseConfigurationFactory.java | 26 +-
.../DomainObjectAnnotationFacetFactory.java | 26 +-
.../DomainObjectLayoutFacetFactory.java | 19 +-
...FacetAnnotationElseConfigurationFactory.java | 20 +-
...FacetAnnotationElseConfigurationFactory.java | 25 +-
...ueFacetAnnotationOrConfigurationFactory.java | 24 +-
...ValueFacetUsingSemanticsProviderFactory.java | 14 -
.../PropertyAnnotationFacetFactory.java | 8 +-
.../ConfigurationServiceInternal.java | 2 -
.../facetprocessor/FacetProcessor.java | 1 -
...icationManagerStandardInstallerAbstract.java | 14 +-
...izationManagerStandardInstallerAbstract.java | 20 +-
.../runtime/optionhandler/OptionHandler.java | 11 +-
.../runtime/runner/opts/OptionValidator.java | 28 ++
.../IsisConfigurationBuilderForWebapp.java | 44 ---
.../progmodels/dflt/JavaReflectorInstaller.java | 5 +
.../JavaReflectorInstallerNoDecorators.java | 47 ++-
.../ConfigurationBuilderFileSystemTest.java | 76 ----
...ourceStreamsConfigResourceAndPolicyTest.java | 47 ---
.../ConfigurationBuilderTwoDirectoriesTest.java | 37 --
...ourceStreamsConfigResourceAndPolicyTest.java | 49 +++
.../ObjectReflectorDefaultTestAbstract.java | 3 -
...StandardInstallerAbstractForDfltRuntime.java | 7 +-
.../fixtures/FixturesInstallerAbstract.java | 7 +-
.../FixturesInstallerFromConfiguration.java | 9 +-
.../runtime/fixtures/FixturesInstallerNoop.java | 44 ---
.../installerregistry/InstallerLookup.java | 8 +-
.../PersistenceMechanismInstaller.java | 5 +-
.../core/runtime/runner/IsisBootstrapper.java | 29 --
.../isis/core/runtime/runner/IsisRunner.java | 276 --------------
.../opts/OptionHandlerAdditionalProperty.java | 4 +-
.../runner/opts/OptionHandlerAppManifest.java | 6 +-
.../runner/opts/OptionHandlerConfiguration.java | 4 +-
.../runtime/runner/opts/OptionHandlerDebug.java | 4 +-
.../opts/OptionHandlerDeploymentType.java | 10 +-
.../runner/opts/OptionHandlerDiagnostics.java | 4 +-
.../opts/OptionHandlerFixtureAbstract.java | 4 +-
...onHandlerFixtureFromEnvironmentVariable.java | 4 +-
.../runtime/runner/opts/OptionHandlerHelp.java | 4 +-
.../opts/OptionHandlerInitParameters.java | 4 +-
.../runner/opts/OptionHandlerNoSplash.java | 4 +-
.../runner/opts/OptionHandlerPassword.java | 4 +-
.../runtime/runner/opts/OptionHandlerQuiet.java | 4 +-
.../runner/opts/OptionHandlerReflector.java | 4 +-
.../opts/OptionHandlerSystemProperties.java | 4 +-
.../runtime/runner/opts/OptionHandlerUser.java | 4 +-
.../runner/opts/OptionHandlerVerbose.java | 4 +-
.../runner/opts/OptionHandlerVersion.java | 4 +-
.../runtime/runner/opts/OptionValidator.java | 28 --
.../OptionValidatorUserAndPasswordCombo.java | 48 ---
.../runtime/services/ServicesInstaller.java | 4 +-
.../services/ServicesInstallerAbstract.java | 10 +-
.../ServicesInstallerFromAnnotation.java | 67 +++-
.../ServicesInstallerFromConfiguration.java | 16 +-
...InstallerFromConfigurationAndAnnotation.java | 33 +-
.../core/runtime/system/IsisSystemFactory.java | 3 -
.../system/persistence/PersistenceSession.java | 28 +-
.../IsisComponentProviderDefault2.java | 26 +-
.../IsisComponentProviderUsingInstallers.java | 4 +-
.../core/webapp/IsisWebAppBootstrapper.java | 142 +++----
.../isis/core/webapp/WebAppConstants.java | 13 +-
...ataNucleusPersistenceMechanismInstaller.java | 24 +-
.../ShiroAuthenticationManagerInstaller.java | 17 +-
.../ShiroAuthorizationManagerInstaller.java | 10 +-
.../BypassAuthenticationManagerInstaller.java | 10 +-
.../BypassAuthorizationManagerInstaller.java | 8 +-
.../wicket/viewer/IsisWicketApplication.java | 80 +---
.../wicket/viewer/IsisWicket_providers.java | 2 +-
.../apache/isis/core/webserver/WebServer.java | 180 ++++++---
.../core/webserver/WebServerBootstrapper.java | 125 -------
.../internal/OptionHandlerAddress.java | 4 +-
.../webserver/internal/OptionHandlerPort.java | 4 +-
.../internal/OptionHandlerResourceBase.java | 4 +-
.../internal/OptionHandlerStartupMode.java | 4 +-
106 files changed, 1326 insertions(+), 2335 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index 475420e..82bf0d5 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -240,7 +240,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
Joiner.on(",").join(packagePrefixes)
);
- final ServicesInstaller installer = new ServicesInstallerFromConfigurationAndAnnotation();
+ final ServicesInstaller installer = new ServicesInstallerFromConfigurationAndAnnotation(configuration);
//installer.setConfiguration(configuration);
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
index b756b19..48badad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/Installer.java
@@ -49,47 +49,13 @@ public interface Installer extends ApplicationScopedComponent {
* Because all implementations of a given subinterface of {@link Installer}
* should return the same value for this method, by convention these
* subinterfaces define a constant which the implementation can just return.
- *
- * <p>
- * Used, with {@link #getName()}, to determine the config files and config
- * keys for this installer.
- *
- * @see #getConfigurationResources()
*/
String getType();
/**
* The name (qualified by type).
- *
- * <p>
- * Used, with {@link #getType()}, to determine the config files and config
- * keys for this installer.
- *
- * @see #getConfigurationResources()
*/
String getName();
- /**
- * The configuration resources (files) to merge in configuration properties.
- *
- * <p>
- * For example, would return list of [<tt>persistor.properties</tt>, and
- * <tt>persistor_in-memory.properties</tt>] for the in-memory object store.
- *
- * <p>
- * The implementation should look under keys prefixed either
- * <tt>isis.persistor</tt> or <tt>isis.persistor.in-memory</tt>.
- *
- * <p>
- * Note that we use an '_' underscore to join the {@link #getType() type}
- * and {@link #getName() name} in the filenames, but a '.' (period) for the
- * keys.
- */
- List<String> getConfigurationResources();
-
- /**
- * The (classes of) the types that this installer makes available in the
- * {@link #getModule() module}.
- */
List<Class<?>> getTypes();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
new file mode 100644
index 0000000..a9238ab
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.commons.components;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+
+public abstract class InstallerAbstract implements Installer {
+
+ //region > constructor, fields
+
+ private final String type;
+ private final String name;
+ private final IsisConfigurationDefault isisConfiguration;
+
+ /**
+ * Subclasses should pass in the type defined as a constant in the
+ * subinterface of Installer.
+ *
+ * <p>
+ * For example, <tt>PersistenceMechanismInstaller</tt> has a constant
+ * <tt>PersistenceMechanismInstaller#TYPE</tt>. Any implementation of
+ * <tt>PersistenceMechanismInstaller</tt> should pass this constant value up
+ * to this constructor.
+ */
+ public InstallerAbstract(
+ final String type,
+ final String name,
+ final IsisConfigurationDefault isisConfiguration) {
+ this.type = type;
+ this.name = name;
+ this.isisConfiguration = isisConfiguration;
+ }
+
+ //endregion
+
+ //region > type, name
+
+ @Override
+ public String getType() {
+ return type;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ //endregion
+
+ //region > configuration (injected)
+
+ public IsisConfigurationDefault getConfiguration() {
+ return isisConfiguration;
+ }
+ //endregion
+
+ //region > init, shutdown
+
+ /**
+ * Default implementation does nothing.
+ */
+ public void init() {
+ // no-op implementation, subclasses may override!
+ }
+
+ /**
+ * Default implementation does nothing.
+ */
+ public void shutdown() {
+ // no-op implementation, subclasses may override!
+ }
+
+ //endregion
+
+ //region > helpers (for subclasses)
+
+ /**
+ * Helper for subclasses implementing {@link #getTypes()}.
+ */
+ protected static List<Class<?>> listOf(final Class<?>... classes) {
+ return Collections.unmodifiableList(Lists.<Class<?>> newArrayList(classes));
+ }
+
+ /**
+ * Helper for subclasses implementing {@link #getTypes()}.
+ */
+ protected static List<Class<?>> listOf(final List<Class<?>> classList, final Class<?>... classes) {
+ final List<Class<?>> arrayList = Lists.<Class<?>> newArrayList(classes);
+ arrayList.addAll(0, classList);
+ return Collections.unmodifiableList(arrayList);
+ }
+
+ //endregion
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
deleted file mode 100644
index 21048ef..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/InstallerAbstract.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.core.commons.components.Installer;
-
-public abstract class InstallerAbstract implements Installer, IsisConfigurationBuilderAware {
-
- private final String type;
- private final String name;
-
- private IsisConfigurationBuilder isisConfigurationBuilder;
- private IsisConfiguration configuration;
-
- /**
- * Subclasses should pass in the type defined as a constant in the
- * subinterface of Installer.
- *
- * <p>
- * For example, <tt>PersistenceMechanismInstaller</tt> has a constant
- * <tt>PersistenceMechanismInstaller#TYPE</tt>. Any implementation of
- * <tt>PersistenceMechanismInstaller</tt> should pass this constant value up
- * to this constructor.
- */
- public InstallerAbstract(final String type, final String name) {
- this.type = type;
- this.name = name;
- }
-
- @Override
- public String getType() {
- return type;
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- /**
- * Returns <tt>[type.properties, type_name.properties</tt>.
- *
- * <p>
- * For example,
- * <tt>[persistor.properties, persistor_in-memory.properties]</tt>.
- *
- * @see #getType()
- * @see #getName()
- */
- @Override
- public List<String> getConfigurationResources() {
- final List<String> resourceList = Lists.newArrayList();
- final String componentImplementationFile = getType() + "_" + getName() + ".properties";
- resourceList.add(componentImplementationFile);
- final String componentFile = getType() + ".properties";
- resourceList.add(componentFile);
- addConfigurationResources(resourceList);
- return Collections.unmodifiableList(resourceList);
- }
-
- /**
- * Optional hook method to allow subclasses to specify any additional config
- * resources.
- */
- protected void addConfigurationResources(final List<String> configurationResources) {
- }
-
- // ////////////////////////////////////////////////////
- // init, shutdown
- // ////////////////////////////////////////////////////
-
- /**
- * Default implementation does nothing.
- */
- public void init() {
- // no-op implementation, subclasses may override!
- }
-
- /**
- * Default implementation does nothing.
- */
- public void shutdown() {
- // no-op implementation, subclasses may override!
- }
-
- /**
- * Either this method or {@link #setConfiguration(IsisConfiguration)} should
- * be called prior to calling {@link #getConfiguration()}.
- *
- * <p>
- * If a {@link #setConfiguration(IsisConfiguration) configuration} has
- * already been provided, then throws {@link IllegalStateException}.
- */
- @Override
- public void setConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
- if (configuration != null) {
- throw new IllegalStateException("A IsisConfiguration has already been provided.");
- }
- this.isisConfigurationBuilder = isisConfigurationBuilder;
- }
-
- /**
- * Either this method or
- * {@link #setConfigurationBuilder(IsisConfigurationBuilder)} should be
- * called prior to calling {@link #getConfiguration()}.
- *
- * <p>
- * If a {@link #setConfigurationBuilder(IsisConfigurationBuilder)
- * configuration builder} has already been provided, then throws
- * {@link IllegalStateException}.
- */
- public void setConfiguration(final IsisConfiguration configuration) {
- if (isisConfigurationBuilder != null) {
- throw new IllegalStateException("An IsisConfigurationBuilder has already been provided.");
- }
- this.configuration = configuration;
- }
-
- /**
- * Returns a <i>snapshot</i> of the current configuration provided by the
- * {@link #setConfigurationBuilder(IsisConfigurationBuilder) injected}
- * {@link IsisConfigurationBuilder}.
- *
- * <p>
- * Implementation note: the implementation is in fact just
- * {@link InstallerLookup}.
- */
- public IsisConfiguration getConfiguration() {
- if (isisConfigurationBuilder != null) {
- return isisConfigurationBuilder.getConfiguration();
- } else if (configuration != null) {
- return configuration;
- } else {
- throw new IllegalStateException("Neither a ConfigurationBuilder nor Configuration has not been provided");
- }
- }
-
- /**
- * Helper for subclasses implementing {@link #getTypes()}.
- */
- protected static List<Class<?>> listOf(final Class<?>... classes) {
- return Collections.unmodifiableList(Lists.<Class<?>> newArrayList(classes));
- }
-
- /**
- * Helper for subclasses implementing {@link #getTypes()}.
- */
- protected static List<Class<?>> listOf(final List<Class<?>> classList, final Class<?>... classes) {
- final List<Class<?>> arrayList = Lists.<Class<?>> newArrayList(classes);
- arrayList.addAll(0, classList);
- return Collections.unmodifiableList(arrayList);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
index 59e8039..12a0c11 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
import java.util.Map;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
+import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
import org.apache.isis.core.commons.resource.ResourceStreamSource;
/**
@@ -43,8 +44,6 @@ import org.apache.isis.core.commons.resource.ResourceStreamSource;
*/
public interface IsisConfiguration extends Iterable<String>, ApplicationScopedComponent {
- void injectInto(Object candidate);
-
/**
* Creates a new IsisConfiguration containing the properties starting with
* the specified prefix. The names of the new properties will have the
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
deleted file mode 100644
index c118c87..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilder.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
-
-/**
- * Holds a mutable set of properties representing the configuration.
- *
- * <p>
- * Mutable/immutable pair with the {@link IsisConfiguration}. To obtain the
- * configuration, use {@link #getConfiguration()}.
- *
- * @see IsisConfiguration for more details on the mutable/immutable pair
- * pattern.
- */
-public interface IsisConfigurationBuilder {
-
- void injectInto(Object candidate);
-
- /**
- * Returns a currently known {@link IsisConfiguration}.
- */
- IsisConfigurationDefault getConfiguration();
-
- void addDefaultConfigurationResources();
-
- void addConfigurationResource(final String installerName, final NotFoundPolicy notFoundPolicy);
-
- /**
- * Adds additional property; if already present then will _not_ be replaced.
- */
- void add(final String key, final String value);
-
- /**
- * Adds/updates property; if already present then _will_ be replaced.
- */
- void put(final String key, final String value);
-
- /**
- * The underlying {@link ResourceStreamSource} from which the configuration
- * is being read.
- *
- * <p>
- * Note that this may be a {@link ResourceStreamSourceChainOfResponsibility composite}.
- */
- ResourceStreamSource getResourceStreamSource();
-
- /**
- * Log a summary of resources found or not found.
- */
- void dumpResourcesToLog();
-
- void lockConfiguration();
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java
deleted file mode 100644
index 07023b7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderAware.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-public interface IsisConfigurationBuilderAware {
-
- void setConfigurationBuilder(IsisConfigurationBuilder configurationLoader);
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java
deleted file mode 100644
index ed06d2b..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderDefault.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-
-/**
- * Convenience implementation of {@link IsisConfigurationBuilder} that loads
- * configuration resource as per {@link IsisConfigurationBuilderFileSystem} and
- * otherwise from the {@link ResourceStreamSourceContextLoaderClassPath
- * classpath}.
- *
- * @see ResourceStreamSourceFileSystem
- */
-public class IsisConfigurationBuilderDefault extends IsisConfigurationBuilderResourceStreams {
-
- @SuppressWarnings("unused")
- private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderDefault.class);
-
- public IsisConfigurationBuilderDefault() {
- super(resourceStreamSources(null));
- }
-
- public IsisConfigurationBuilderDefault(final String firstDirectory) {
- super(resourceStreamSources(firstDirectory));
- }
-
- private static ResourceStreamSource[] resourceStreamSources(final String firstDirectory) {
- final ArrayList<ResourceStreamSource> rssList = Lists.newArrayList();
- if (firstDirectory != null) {
- rssList.add(fromFileSystem(firstDirectory));
- }
- rssList.addAll(Arrays.asList(fromFileSystem(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY), fromFileSystem(ConfigurationConstants.WEBINF_FULL_DIRECTORY), fromClassPath(), fromClassPath(ConfigurationConstants.WEBINF_DIRECTORY)));
- return rssList.toArray(new ResourceStreamSource[0]);
- }
-
- private static ResourceStreamSource fromFileSystem(final String directory) {
- return ResourceStreamSourceFileSystem.create(directory);
- }
-
- private static ResourceStreamSource fromClassPath() {
- return ResourceStreamSourceContextLoaderClassPath.create();
- }
-
- private static ResourceStreamSource fromClassPath(final String prefix) {
- return ResourceStreamSourceContextLoaderClassPath.create(prefix);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java
deleted file mode 100644
index f481ce7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderFileSystem.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-
-/**
- * Convenience implementation of {@link IsisConfigurationBuilder} that loads
- * configuration resource from a specified directory (or directories) on the
- * filesystem.
- *
- * @see ResourceStreamSourceFileSystem
- */
-public class IsisConfigurationBuilderFileSystem extends IsisConfigurationBuilderResourceStreams {
-
- @SuppressWarnings("unused")
- private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderFileSystem.class);
-
- private static ResourceStreamSource createResourceStreamSource(final String... directories) {
- final ResourceStreamSourceChainOfResponsibility composite = new ResourceStreamSourceChainOfResponsibility();
- for (final String directory : directories) {
- composite.addResourceStreamSource(new ResourceStreamSourceFileSystem(directory));
- }
- return composite;
- }
-
- public IsisConfigurationBuilderFileSystem(final String... directories) {
- super(createResourceStreamSource(directories));
- }
-
- public IsisConfigurationBuilderFileSystem() {
- super(ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java
deleted file mode 100644
index 70e4df8..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderPrimer.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-public interface IsisConfigurationBuilderPrimer {
-
- void primeConfigurationBuilder(IsisConfigurationBuilder isisConfigurationBuilder);
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
deleted file mode 100644
index 695cfd9..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.Sets;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-
-/**
- * Adapter for {@link IsisConfigurationBuilder}, loading the specified
- * configuration resource (file) from the given {@link ResourceStreamSource}(s).
- *
- * <p>
- * If a property is in multiple configuration resources then the latter
- * resources will overwrite the former.
- */
-public class IsisConfigurationBuilderResourceStreams implements IsisConfigurationBuilder {
-
- private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderResourceStreams.class);
-
- static class ConfigurationResourceAndPolicy {
- private final String configurationResource;
- private final NotFoundPolicy notFoundPolicy;
-
- public ConfigurationResourceAndPolicy(final String configurationResource, final NotFoundPolicy notFoundPolicy) {
- this.configurationResource = configurationResource;
- this.notFoundPolicy = notFoundPolicy;
- }
-
- public String getConfigurationResource() {
- return configurationResource;
- }
-
- public NotFoundPolicy getNotFoundPolicy() {
- return notFoundPolicy;
- }
-
- @Override
- public String toString() {
- return String.format("%s{%s}", configurationResource, notFoundPolicy);
- }
- }
-
- private final Set<String> configurationResourcesFound = Sets.newLinkedHashSet();
- private final Set<String> configurationResourcesNotFound = Sets.newLinkedHashSet();
- private final ResourceStreamSource resourceStreamSource;
- private final IsisConfigurationDefault configuration;
- private final List<ConfigurationResourceAndPolicy> configurationResources = new ArrayList<ConfigurationResourceAndPolicy>();
- private boolean locked;
-
- // ////////////////////////////////////////////////////////////
- // Constructor, initialization
- // ////////////////////////////////////////////////////////////
-
- private static ResourceStreamSource createComposite(final ResourceStreamSource... resourceStreamSources) {
- final ResourceStreamSourceChainOfResponsibility composite = new ResourceStreamSourceChainOfResponsibility();
- for (final ResourceStreamSource rss : resourceStreamSources) {
- if (rss == null) {
- continue;
- }
- composite.addResourceStreamSource(rss);
- }
- return composite;
- }
-
- public IsisConfigurationBuilderResourceStreams() {
- this(ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY));
- }
-
- public IsisConfigurationBuilderResourceStreams(final ResourceStreamSource... resourceStreamSources) {
- this(createComposite(resourceStreamSources));
- }
-
- public IsisConfigurationBuilderResourceStreams(final ResourceStreamSource resourceStreamSource) {
- this.resourceStreamSource = resourceStreamSource;
- configuration = new IsisConfigurationDefault(resourceStreamSource);
- }
-
- public void addDefaultConfigurationResources() {
- addConfigurationResource(ConfigurationConstants.DEFAULT_CONFIG_FILE, NotFoundPolicy.FAIL_FAST);
- addConfigurationResource(ConfigurationConstants.WEB_CONFIG_FILE, NotFoundPolicy.CONTINUE); //web.properties
- addConfigurationResource("war.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("viewer_wicket.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("viewer_restful.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("viewer_restfulobjects.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("persistor_datanucleus.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("persistor.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("authentication_shiro.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("authentication_bypass.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("authentication.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("authorization_shiro.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("authorization_bypass.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("authorization.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("reflector_java.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("reflector.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("fixtures-installer_configuration.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("fixtures-installer_noop.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("fixtures-installer.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("services-installer_annotation.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("services-installer_configuration.properties", NotFoundPolicy.CONTINUE);
-
- addConfigurationResource("services-installer_configuration-and-annotation.properties", NotFoundPolicy.CONTINUE);
- addConfigurationResource("services-installer.properties", NotFoundPolicy.CONTINUE);
-
- }
-
- // ////////////////////////////////////////////////////////////
- // ResourceStreamSource
- // ////////////////////////////////////////////////////////////
-
- @Override
- public ResourceStreamSource getResourceStreamSource() {
- return resourceStreamSource;
- }
-
- // ////////////////////////////////////////////////////////////
- // populating or updating
- // ////////////////////////////////////////////////////////////
-
- /**
- * Registers the configuration resource (usually, a file) with the specified
- * name from the first {@link ResourceStreamSource} available.
- *
- * <p>
- * If the configuration resource cannot be found then the provided
- * {@link NotFoundPolicy} determines whether an exception is thrown or not.
- *
- * <p>
- * Must be called before {@link IsisConfigurationBuilder#getConfiguration()}; the resource is
- * actually read on {@link IsisConfigurationBuilder#getConfiguration()}.
- */
- @Override
- public synchronized void addConfigurationResource(final String configurationResource, final NotFoundPolicy notFoundPolicy) {
- LOG.debug("looking for properties file " + configurationResource);
- loadConfigurationResource(configuration, new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
- configurationResources.add(new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
- }
-
- @Override
- public synchronized void add(final String key, final String value) {
- if (locked) {
- throw new IsisException("Configuration has been locked and cannot be changed");
- }
- configuration.add(key, value);
- }
-
- @Override
- public synchronized void put(final String key, final String value) {
- if (locked) {
- throw new IsisException("Configuration has been locked and cannot be changed");
- }
- configuration.put(key, value);
- }
-
- public void lockConfiguration() {
- locked = true;
- }
-
- // ////////////////////////////////////////////////////////////
- // getConfiguration
- // ////////////////////////////////////////////////////////////
-
- /**
- * Returns the current {@link IsisConfiguration configuration}.
- */
- @Override
- public synchronized IsisConfigurationDefault getConfiguration() {
- if(!locked) {
- lockConfiguration();
- dumpResourcesToLog();
- }
- return configuration;
- }
-
- private void loadConfigurationResource(final IsisConfigurationDefault configuration, final ConfigurationResourceAndPolicy configResourceAndPolicy) {
- final String configurationResource = configResourceAndPolicy.getConfigurationResource();
- final NotFoundPolicy notFoundPolicy = configResourceAndPolicy.getNotFoundPolicy();
- LOG.debug("checking availability of configuration resource: " + configurationResource + ", notFoundPolicy: " + notFoundPolicy);
- loadConfigurationResource(configuration, configurationResource, notFoundPolicy);
- }
-
- /**
- * Loads the configuration resource (usually, a file) with the specified
- * name from the first {@link ResourceStreamSource} available.
- *
- * <p>
- * If the configuration resource cannot be found then the provided
- * {@link NotFoundPolicy} determines whether an exception is thrown or not.
- */
- protected void loadConfigurationResource(final IsisConfigurationDefault configuration, final String configurationResource, final NotFoundPolicy notFoundPolicy) {
- try {
- final PropertiesReader propertiesReader = loadConfigurationResource(resourceStreamSource, configurationResource);
- LOG.info("loading properties from " + configurationResource);
- configuration.add(propertiesReader.getProperties());
- configurationResourcesFound.add(configurationResource);
- return;
- } catch (final IOException ignore) { }
- if (notFoundPolicy == NotFoundPolicy.FAIL_FAST) {
- throw new IsisException("failed to load '" + configurationResource + "'; tried using: " + resourceStreamSource.getName());
- } else {
- configurationResourcesNotFound.add(configurationResource);
- LOG.debug("'" + configurationResource + "' not found, but not needed");
- }
- }
-
- private PropertiesReader loadConfigurationResource(final ResourceStreamSource resourceStreamSource, final String configurationResource) throws IOException {
- return new PropertiesReader(resourceStreamSource, configurationResource);
- }
-
-
- // TODO review this, should this option default to yes?
- private void addShowExplorationOptionsIfNotSpecified(final IsisConfigurationDefault configuration) {
- if (configuration.getString(ConfigurationConstants.SHOW_EXPLORATION_OPTIONS) == null) {
- configuration.add(ConfigurationConstants.SHOW_EXPLORATION_OPTIONS, "yes");
- }
- }
-
- // ////////////////////////////////////////////////////////////
- // Logging
- // ////////////////////////////////////////////////////////////
-
- @Override
- public void dumpResourcesToLog() {
- if (LOG.isInfoEnabled()) {
- LOG.info("Configuration resources FOUND:");
- for (String resource : configurationResourcesFound) {
- LOG.info("* " + resource);
- }
- LOG.info("Configuration resources NOT FOUND (but not needed):");
- for (String resource : configurationResourcesNotFound) {
- LOG.info("* " + resource);
- }
- }
- }
-
-
- // ////////////////////////////////////////////////////////////
- // Injectable
- // ////////////////////////////////////////////////////////////
-
- public void injectInto(final Object candidate) {
- if (IsisConfigurationBuilderAware.class.isAssignableFrom(candidate.getClass())) {
- final IsisConfigurationBuilderAware cast = IsisConfigurationBuilderAware.class.cast(candidate);
- cast.setConfigurationBuilder(this);
- }
- }
-
- @Override
- public String toString() {
- return Objects.toStringHelper(this).add("resourceStream", resourceStreamSource).add("configResources", configurationResources).toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
index 72f2c40..d433584 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
@@ -458,10 +458,6 @@ public class IsisConfigurationDefault implements IsisConfiguration, Configuratio
// ////////////////////////////////////////////////////////////////////
@Override
- public void injectInto(final Object candidate) {
- }
-
- @Override
public Map<String,String> asMap() {
final Map<String, String> map = Maps.newHashMap();
for(String propertyName: this) {
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java
deleted file mode 100644
index 71d7363..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/JmxBeanServer.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.core.commons.config;
-
-import java.lang.management.ManagementFactory;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class JmxBeanServer {
-
- private static final Logger LOG = LoggerFactory.getLogger(JmxBeanServer.class);
-
- private static JmxBeanServer instance;
- private final MBeanServer server;
-
- private JmxBeanServer() {
- server = ManagementFactory.getPlatformMBeanServer();
- instance = this;
- }
-
- public static JmxBeanServer getInstance() {
- if (instance == null) {
- LOG.info("JMX bean server created");
- instance = new JmxBeanServer();
- }
- return instance;
- }
-
- public void register(final String name, final Object object) {
- try {
- final ObjectName objectName = new ObjectName("Isis:name=" + name);
- server.registerMBean(object, objectName);
- LOG.info(name + " JMX mbean registered: " + object);
- } catch (final MalformedObjectNameException e) {
- throw new RuntimeException(e);
- } catch (final NullPointerException e) {
- throw new RuntimeException(e);
- } catch (final InstanceAlreadyExistsException e) {
- LOG.info(name + " JMX mbean already registered: " + object);
- } catch (final MBeanRegistrationException e) {
- throw new RuntimeException(e);
- } catch (final NotCompliantMBeanException e) {
- throw new RuntimeException(e);
- }
-
- }
-}
-
-// Copyright (c) Naked Objects Group Ltd.
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java
deleted file mode 100644
index 7e5f09d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/PropertiesReader.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.commons.config;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.apache.isis.core.commons.lang.CloseableExtensions;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-
-/**
- * Loads properties using the specified {@link ResourceStreamSource}.
- */
-class PropertiesReader {
-
- private final Properties properties = new Properties();
-
- public PropertiesReader(final ResourceStreamSource resourceStream, final String configurationResource) throws IOException {
-
- InputStream in = null;
- try {
- in = resourceStream.readResource(configurationResource);
- if (in == null) {
- throw new IOException("Unable to find resource " + configurationResource);
- }
- properties.load(in);
- } finally {
- CloseableExtensions.closeSafely(in);
- }
- }
-
- public Properties getProperties() {
- return properties;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
index db80586..17030cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
@@ -32,7 +32,7 @@
*
* <p>
* The {@link org.apache.isis.core.commons.config.ConfigurationBuilder} is used
- * by {@link org.apache.isis.core.commons.config.InstallerAbstract}, an
+ * by {@link org.apache.isis.core.commons.components.InstallerAbstract}, an
* implementation of {@link org.apache.isis.core.commons.components.Installer}
* that allows the configuration to be added to as each component is
* installed.
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java
new file mode 100644
index 0000000..f36bb83
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/ConfigurationResourceAndPolicy.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.commons.configbuilder;
+
+import org.apache.isis.core.commons.config.NotFoundPolicy;
+
+class ConfigurationResourceAndPolicy {
+
+ private final String configurationResource;
+ private final NotFoundPolicy notFoundPolicy;
+
+ public ConfigurationResourceAndPolicy(
+ final String configurationResource,
+ final NotFoundPolicy notFoundPolicy) {
+ this.configurationResource = configurationResource;
+ this.notFoundPolicy = notFoundPolicy;
+ }
+
+ public String getConfigurationResource() {
+ return configurationResource;
+ }
+ public NotFoundPolicy getNotFoundPolicy() {
+ return notFoundPolicy;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s{%s}", configurationResource, notFoundPolicy);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
new file mode 100644
index 0000000..ed229ef
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
@@ -0,0 +1,371 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.commons.configbuilder;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import org.apache.commons.cli.BasicParser;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.core.commons.config.NotFoundPolicy;
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.resource.ResourceStreamSource;
+import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
+import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
+import org.apache.isis.core.runtime.optionhandler.BootPrinter;
+import org.apache.isis.core.runtime.optionhandler.OptionHandler;
+
+/**
+ * Holds a mutable set of properties representing the configuration.
+ *
+ * This implementation loads the specified
+ * configuration resource (file) from the given {@link ResourceStreamSource}(s).
+ *
+ * <p>
+ * If a property is in multiple configuration resources then the latter
+ * resources will overwrite the former.
+ *
+ * <p>
+ * Mutable/immutable pair with the {@link IsisConfiguration}. To obtain the
+ * configuration, use {@link #getConfiguration()}.
+ *
+ * @see {@link IsisConfiguration} for more details on the mutable/immutable pair pattern.
+ *
+ */
+public final class IsisConfigurationBuilder {
+
+ private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilder.class);
+
+ //region > constructor, fields
+
+ private final ResourceStreamSourceChainOfResponsibility resourceStreamSourceChain;
+ private final List<ConfigurationResourceAndPolicy> configurationResources = Lists.newArrayList();
+
+ private final IsisConfigurationDefault configuration;
+ private boolean locked;
+
+ private final Set<String> configurationResourcesFound = Sets.newLinkedHashSet();
+ private final Set<String> configurationResourcesNotFound = Sets.newLinkedHashSet();
+
+ public IsisConfigurationBuilder() {
+ this(ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY));
+ }
+
+ public IsisConfigurationBuilder(final ResourceStreamSource... resourceStreamSources) {
+ this(createComposite(Arrays.asList(resourceStreamSources)));
+ }
+
+ public IsisConfigurationBuilder(final List<ResourceStreamSource> resourceStreamSources) {
+ this(createComposite(resourceStreamSources));
+ }
+
+ public IsisConfigurationBuilder(final ResourceStreamSourceChainOfResponsibility resourceStreamSourceChain) {
+ this.resourceStreamSourceChain = resourceStreamSourceChain;
+ configuration = new IsisConfigurationDefault(resourceStreamSourceChain);
+ }
+
+ private static ResourceStreamSourceChainOfResponsibility createComposite(
+ final List<ResourceStreamSource> resourceStreamSources) {
+ final ResourceStreamSourceChainOfResponsibility composite = new ResourceStreamSourceChainOfResponsibility();
+ for (final ResourceStreamSource rss : resourceStreamSources) {
+ if (rss == null) {
+ continue;
+ }
+ composite.addResourceStreamSource(rss);
+ }
+ return composite;
+ }
+
+ public void addDefaultConfigurationResources() {
+ addConfigurationResource(ConfigurationConstants.DEFAULT_CONFIG_FILE, NotFoundPolicy.FAIL_FAST);
+ addConfigurationResource(ConfigurationConstants.WEB_CONFIG_FILE, NotFoundPolicy.CONTINUE); //web.properties
+ addConfigurationResource("war.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("viewer_wicket.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("viewer_restful.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("viewer_restfulobjects.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("persistor_datanucleus.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("persistor.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("authentication_shiro.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("authentication_bypass.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("authentication.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("authorization_shiro.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("authorization_bypass.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("authorization.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("reflector_java.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("reflector.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("fixtures-installer_configuration.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("fixtures-installer.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("services-installer_annotation.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("services-installer_configuration.properties", NotFoundPolicy.CONTINUE);
+
+ addConfigurationResource("services-installer_configuration-and-annotation.properties", NotFoundPolicy.CONTINUE);
+ addConfigurationResource("services-installer.properties", NotFoundPolicy.CONTINUE);
+ }
+
+ //endregion
+
+ //region > addResourceStreamSource, addResourceStreamSources
+
+ public void addResourceStreamSource(final ResourceStreamSource resourceStreamSource) {
+ addResourceStreamSources(resourceStreamSource);
+ }
+
+ public void addResourceStreamSources(final ResourceStreamSource... resourceStreamSources) {
+ addResourceStreamSources(Arrays.asList(resourceStreamSources));
+ }
+
+ public void addResourceStreamSources(final List<ResourceStreamSource> resourceStreamSources) {
+ ensureNotLocked();
+ for (ResourceStreamSource resourceStreamSource : resourceStreamSources) {
+ this.resourceStreamSourceChain.addResourceStreamSource(resourceStreamSource);
+ }
+ }
+
+ //endregion
+
+ //region > addConfigurationResource
+
+ /**
+ * Registers the configuration resource (usually, a file) with the specified
+ * name from the first {@link ResourceStreamSource} available.
+ *
+ * <p>
+ * If the configuration resource cannot be found then the provided
+ * {@link NotFoundPolicy} determines whether an exception is thrown or not.
+ *
+ * <p>
+ * Must be called before {@link IsisConfigurationBuilder#getConfiguration()}; the resource is
+ * actually read on {@link IsisConfigurationBuilder#getConfiguration()}.
+ */
+ public synchronized void addConfigurationResource(
+ final String configurationResource,
+ final NotFoundPolicy notFoundPolicy) {
+
+ ensureNotLocked();
+
+ if(LOG.isDebugEnabled()) {
+ LOG.debug(String.format(
+ "checking availability of configuration resource: %s, notFoundPolicy: %s",
+ configurationResource, notFoundPolicy));
+ }
+ loadConfigurationResource(configurationResource, notFoundPolicy);
+ configurationResources.add(new ConfigurationResourceAndPolicy(configurationResource, notFoundPolicy));
+ }
+
+ /**
+ * Loads the configuration resource (usually, a file) with the specified
+ * name from the first {@link ResourceStreamSource} available.
+ *
+ * <p>
+ * If the configuration resource cannot be found then the provided
+ * {@link NotFoundPolicy} determines whether an exception is thrown or not.
+ */
+ private void loadConfigurationResource(
+ final String configurationResource,
+ final NotFoundPolicy notFoundPolicy) {
+ try {
+ final PropertiesReader propertiesReader =
+ loadConfigurationResource(resourceStreamSourceChain, configurationResource);
+ LOG.info("loading properties from " + configurationResource);
+ configuration.add(propertiesReader.getProperties());
+ configurationResourcesFound.add(configurationResource);
+ return;
+ } catch (final IOException ignore) {
+ // ignore
+ }
+ if (notFoundPolicy == NotFoundPolicy.FAIL_FAST) {
+ throw new IsisException(String.format(
+ "failed to load '%s'; tried using: %s",
+ configurationResource, resourceStreamSourceChain.getName()));
+ }
+ configurationResourcesNotFound.add(configurationResource);
+ if(LOG.isDebugEnabled()) {
+ LOG.debug(String.format("'%s' not found, but not needed", configurationResource));
+
+ }
+ }
+
+ private PropertiesReader loadConfigurationResource(final ResourceStreamSource resourceStreamSource, final String configurationResource) throws IOException {
+ return new PropertiesReader(resourceStreamSource, configurationResource);
+ }
+
+
+ //endregion
+
+ //region > add, put
+
+ /**
+ * Adds additional property; if already present then will _not_ be replaced.
+ */
+ public synchronized void add(final String key, final String value) {
+ ensureNotLocked();
+ configuration.add(key, value);
+ }
+
+ /**
+ * Adds/updates property; if already present then _will_ be replaced.
+ */
+ public synchronized void put(final String key, final String value) {
+ ensureNotLocked();
+ configuration.put(key, value);
+ }
+
+
+ //endregion
+
+ //region > parseAndPrimeWith, primeWith
+
+ public boolean parseAndPrimeWith(final List<OptionHandler> optionHandlers, final String[] args) {
+
+ // add options (ie cmd line flags)
+ final Options options = new Options();
+ for (final OptionHandler optionHandler : optionHandlers) {
+ optionHandler.addOption(options);
+ }
+
+ // parse options from the cmd line
+ final boolean parsedOk = parseAndPrimeWith(options, optionHandlers, args);
+
+ if(parsedOk) {
+ for (final OptionHandler optionHandler : optionHandlers) {
+ primeWith(optionHandler);
+ }
+ }
+
+ return parsedOk;
+ }
+
+ private boolean parseAndPrimeWith(final Options options, final List<OptionHandler> optionHandlers, final String[] args) {
+ final BootPrinter printer = new BootPrinter(getClass());
+ final CommandLineParser parser = new BasicParser();
+ try {
+ final CommandLine commandLine = parser.parse(options, args);
+ for (final OptionHandler optionHandler : optionHandlers) {
+ if (!optionHandler.handle(commandLine, printer, options)) {
+ return false;
+ }
+ }
+ } catch (final ParseException e) {
+ printer.printErrorMessage(e.getMessage());
+ printer.printHelp(options);
+ return false;
+ }
+ return true;
+ }
+
+ public void primeWith(final OptionHandler optionHandler) {
+ ensureNotLocked();
+
+ LOG.debug("priming configurations for '{}'", optionHandler);
+ optionHandler.prime(this);
+ }
+
+ //endregion
+
+ //region > getConfiguration, peekConfiguration, isLocked
+
+ /**
+ * Returns the {@link IsisConfiguration}; this will cause the configuration to be locked
+ */
+ public synchronized IsisConfigurationDefault getConfiguration() {
+ if(!locked) {
+ locked = true;
+ dumpResourcesToLog();
+ }
+ return configuration;
+ }
+
+ /**
+ * Set once {@link #getConfiguration()} is called.
+ */
+ public boolean isLocked() {
+ return locked;
+ }
+
+ /**
+ * Creates a copy of the current {@link #getConfiguration()}, without locking.
+ *
+ * <p>
+ * Used while bootstrapping, to obtain the web.server port etc.
+ * </p>
+ */
+ public synchronized IsisConfigurationDefault peekConfiguration() {
+ return new IsisConfigurationDefault(resourceStreamSourceChain);
+ }
+
+ private void ensureNotLocked() {
+ if (locked) {
+ throw new IsisException("Configuration has been locked and cannot be changed");
+ }
+ }
+
+ //endregion
+
+ //region > dumpResourcesToLog, toString
+
+ /**
+ * Log a summary of resources found or not found.
+ */
+ public void dumpResourcesToLog() {
+ if (LOG.isInfoEnabled()) {
+ LOG.info("Configuration resources FOUND:");
+ for (String resource : configurationResourcesFound) {
+ LOG.info("* " + resource);
+ }
+ LOG.info("Configuration resources NOT FOUND (but not needed):");
+ for (String resource : configurationResourcesNotFound) {
+ LOG.info("* " + resource);
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("resourceStream", resourceStreamSourceChain)
+ .add("configResources", configurationResources).toString();
+ }
+
+ //endregion
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
new file mode 100644
index 0000000..2c58d15
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.commons.configbuilder;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.apache.isis.core.commons.lang.CloseableExtensions;
+import org.apache.isis.core.commons.resource.ResourceStreamSource;
+
+/**
+ * Loads properties using the specified {@link ResourceStreamSource}.
+ */
+class PropertiesReader {
+
+ private final Properties properties = new Properties();
+
+ public PropertiesReader(final ResourceStreamSource resourceStream, final String configurationResource) throws IOException {
+
+ InputStream in = null;
+ try {
+ in = resourceStream.readResource(configurationResource);
+ if (in == null) {
+ throw new IOException("Unable to find resource " + configurationResource);
+ }
+ properties.load(in);
+ } finally {
+ CloseableExtensions.closeSafely(in);
+ }
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
index 2d29fdb..d9df199 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/factory/InstanceUtil.java
@@ -19,6 +19,9 @@
package org.apache.isis.core.commons.factory;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.commons.lang.ObjectExtensions;
@@ -27,23 +30,27 @@ public final class InstanceUtil {
private InstanceUtil() {
}
- public static Object createInstance(final String className) {
- return createInstance(className, (Class<?>) null, null);
+ public static Object createInstance(final String className, Object... args) {
+ return createInstance(className, (Class<?>) null, null, args);
}
- public static Object createInstance(final Class<?> cls) {
- return createInstance(cls, (Class<?>) null, null);
+ public static Object createInstance(final Class<?> cls, Object... args) {
+ return createInstance(cls, (Class<?>) null, null, args);
}
- public static <T> T createInstance(final String className, final Class<T> requiredClass) {
- return createInstance(className, (Class<T>) null, requiredClass);
+ public static <T> T createInstance(final String className, final Class<T> requiredClass, Object... args) {
+ return createInstance(className, (Class<T>) null, requiredClass, args);
}
- public static <T> T createInstance(final Class<?> cls, final Class<T> requiredClass) {
- return createInstance(cls, (Class<T>) null, requiredClass);
+ public static <T> T createInstance(final Class<?> cls, final Class<T> requiredClass, Object... args) {
+ return createInstance(cls, (Class<T>) null, requiredClass, args);
}
- public static <T> T createInstance(final String className, final String defaultTypeName, final Class<T> requiredType) {
+ public static <T> T createInstance(
+ final String className,
+ final String defaultTypeName,
+ final Class<T> requiredType,
+ Object... args) {
Class<? extends T> defaultType = null;
if (defaultTypeName != null) {
try {
@@ -57,10 +64,14 @@ public final class InstanceUtil {
throw new InstanceCreationClassException(String.format("Default type '%s' found, but is missing a dependent class: %s", defaultTypeName, e.getMessage()), e);
}
}
- return createInstance(className, defaultType, requiredType);
+ return createInstance(className, defaultType, requiredType, args);
}
- public static <T> T createInstance(final Class<?> cls, final String defaultTypeName, final Class<T> requiredType) {
+ public static <T> T createInstance(
+ final Class<?> cls,
+ final String defaultTypeName,
+ final Class<T> requiredType,
+ Object... args) {
Class<? extends T> defaultType = null;
if (defaultTypeName != null) {
defaultType = loadClass(defaultTypeName, requiredType);
@@ -75,18 +86,21 @@ public final class InstanceUtil {
throw new InstanceCreationClassException(String.format("Default type '%s' found, but is missing a dependent class: %s", defaultTypeName, e.getMessage()), e);
}
}
- return createInstance(cls, defaultType, requiredType);
+ return createInstance(cls, defaultType, requiredType, args);
}
- public static <T> T createInstance(final String className, final Class<? extends T> defaultType, final Class<T> requiredType) {
+ public static <T> T createInstance(
+ final String className,
+ final Class<? extends T> defaultType,
+ final Class<T> requiredType,
+ Object... args) {
Assert.assertNotNull("Class to instantiate must be specified", className);
- Class<?> cls = null;
try {
- cls = Thread.currentThread().getContextClassLoader().loadClass(className);
+ final Class<?> cls = Thread.currentThread().getContextClassLoader().loadClass(className);
if (cls == null) {
throw new InstanceCreationClassException(String.format("Failed to load class '%s'", className));
}
- return createInstance(cls, defaultType, requiredType);
+ return createInstance(cls, defaultType, requiredType, args);
} catch (final ClassNotFoundException e) {
if (className.indexOf('.') == -1) {
throw new UnavailableClassException(String.format("The component '%s' cannot be found", className));
@@ -97,21 +111,38 @@ public final class InstanceUtil {
}
}
- public static <T> T createInstance(final Class<?> cls, final Class<? extends T> defaultType, final Class<T> requiredType) {
+ public static <T> T createInstance(
+ final Class<?> cls,
+ final Class<? extends T> defaultType,
+ final Class<T> requiredType,
+ Object... args) {
Assert.assertNotNull("Class to instantiate must be specified", cls);
try {
if (requiredType == null || requiredType.isAssignableFrom(cls)) {
final Class<T> tClass = ObjectExtensions.asT(cls);
- return tClass.newInstance();
+
+ if(args == null || args.length == 0) {
+ return tClass.newInstance();
+ } else {
+ Class<?>[] paramTypes = new Class[args.length];
+ for (int i = 0; i < args.length; i++) {
+ final Object arg = args[i];
+ paramTypes[i] = arg.getClass();
+ }
+ final Constructor<T> constructor = tClass.getConstructor(paramTypes);
+ return constructor.newInstance(args);
+ }
} else {
throw new InstanceCreationClassException(String.format("Class '%s' is not of type '%s'", cls.getName(), requiredType));
}
} catch (final NoClassDefFoundError e) {
throw new InstanceCreationClassException(String.format("Class '%s'found , but is missing a dependent class: %s", cls, e.getMessage()), e);
- } catch (final InstantiationException e) {
+ } catch (final InstantiationException | InvocationTargetException e) {
throw new InstanceCreationException(String.format("Could not instantiate an object of class '%s'; %s", cls.getName(), e.getMessage()));
} catch (final IllegalAccessException e) {
throw new InstanceCreationException(String.format("Could not access the class '%s'; %s", cls.getName(), e.getMessage()));
+ } catch (NoSuchMethodException e) {
+ throw new InstanceCreationException(String.format("Could not find constructor in the class '%s'; %s", cls.getName(), e.getMessage()));
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/74565888/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java
new file mode 100644
index 0000000..86a1e9d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/jmx/JmxBeanServer.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.commons.jmx;
+
+import java.lang.management.ManagementFactory;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JmxBeanServer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(JmxBeanServer.class);
+
+ private static JmxBeanServer instance;
+ private final MBeanServer server;
+
+ private JmxBeanServer() {
+ server = ManagementFactory.getPlatformMBeanServer();
+ instance = this;
+ }
+
+ public static JmxBeanServer getInstance() {
+ if (instance == null) {
+ LOG.info("JMX bean server created");
+ instance = new JmxBeanServer();
+ }
+ return instance;
+ }
+
+ public void register(final String name, final Object object) {
+ try {
+ final ObjectName objectName = new ObjectName("Isis:name=" + name);
+ server.registerMBean(object, objectName);
+ LOG.info(name + " JMX mbean registered: " + object);
+ } catch (final MalformedObjectNameException | NullPointerException | MBeanRegistrationException | NotCompliantMBeanException e) {
+ throw new RuntimeException(e);
+ } catch (final InstanceAlreadyExistsException e) {
+ LOG.info(name + " JMX mbean already registered: " + object);
+ }
+
+ }
+}
+
+// Copyright (c) Naked Objects Group Ltd.