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 2014/10/02 18:02:38 UTC
git commit: ISIS-912: allow fixtures to be installed from command
line even if using the simplericity jetty-console wrapper.
Repository: isis
Updated Branches:
refs/heads/master 0d5d3eb43 -> a064fe362
ISIS-912: allow fixtures to be installed from command line even if using the simplericity jetty-console wrapper.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/a064fe36
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/a064fe36
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/a064fe36
Branch: refs/heads/master
Commit: a064fe362dba9d652d654141c35fb56a0a57ed0d
Parents: 0d5d3eb
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Oct 2 16:46:32 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Oct 2 16:46:32 2014 +0100
----------------------------------------------------------------------
.../wicket/viewer/IsisWicketApplication.java | 12 ++-
.../jdo/datanucleus/DataNucleusObjectStore.java | 56 ++++---------
.../fixtures/FixturesInstallerDelegate.java | 28 +------
.../FixturesInstallerFromConfiguration.java | 80 +++++++++++++++---
.../isis/core/runtime/runner/IsisRunner.java | 5 +-
...onHandlerFixtureFromEnvironmentVariable.java | 69 ++++++++++++++++
.../OptionHandlerFixtureFromInitParameters.java | 86 ++++++++++++++++++++
.../opts/OptionHandlerSystemProperties.java | 77 ++++++++++++++++++
.../ServicesInstallerFromConfiguration.java | 5 ++
.../core/webapp/IsisWebAppBootstrapper.java | 21 +++--
.../src/main/webapp/WEB-INF/isis.properties | 6 +-
.../src/main/webapp/WEB-INF/isis.properties | 4 +-
12 files changed, 351 insertions(+), 98 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 9499efa..d87e9df 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -63,6 +63,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
import org.apache.isis.core.runtime.runner.IsisInjectModule;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixtureFromInitParameters;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystem;
import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -387,11 +388,16 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
@SuppressWarnings("unchecked")
private static void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
- final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
- if (isisConfigurationBuilderPrimers == null) {
- return;
+ LOG.info("loading properties from option handlers");
+ final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = Lists.newArrayList();
+ final List<IsisConfigurationBuilderPrimer> primers = (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
+ if(primers != null) {
+ isisConfigurationBuilderPrimers.addAll(primers);
}
+ // also support loading from init parameters (specifically, to support simplericity's jetty-console)
+ isisConfigurationBuilderPrimers.add(new OptionHandlerFixtureFromInitParameters(servletContext));
for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : isisConfigurationBuilderPrimers) {
+ LOG.info("priming configurations for " + isisConfigurationBuilderPrimer);
isisConfigurationBuilderPrimer.primeConfigurationBuilder(isisConfigurationBuilder);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/objectstore-jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
----------------------------------------------------------------------
diff --git a/core/objectstore-jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java b/core/objectstore-jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
index d0fd657..58496b6 100644
--- a/core/objectstore-jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
+++ b/core/objectstore-jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
@@ -18,48 +18,33 @@
*/
package org.apache.isis.objectstore.jdo.datanucleus;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatContext;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-
import java.sql.Connection;
import java.text.MessageFormat;
import java.util.List;
import java.util.Map;
-
import javax.jdo.FetchGroup;
import javax.jdo.FetchPlan;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.spi.PersistenceCapable;
-
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-
-import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
-import org.apache.isis.core.runtime.persistence.PojoRefreshException;
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.debug.DebugBuilder;
import org.apache.isis.core.commons.exceptions.NotYetImplementedException;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
-import org.apache.isis.core.metamodel.adapter.ResolveState;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
+import org.apache.isis.core.metamodel.adapter.oid.*;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
+import org.apache.isis.core.runtime.persistence.PojoRefreshException;
import org.apache.isis.core.runtime.persistence.UnsupportedFindException;
import org.apache.isis.core.runtime.persistence.objectstore.ObjectStoreSpi;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
@@ -81,15 +66,14 @@ import org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchron
import org.apache.isis.objectstore.jdo.datanucleus.persistence.commands.DataNucleusCreateObjectCommand;
import org.apache.isis.objectstore.jdo.datanucleus.persistence.commands.DataNucleusDeleteObjectCommand;
import org.apache.isis.objectstore.jdo.datanucleus.persistence.commands.DataNucleusUpdateObjectCommand;
-import org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindAllInstancesProcessor;
-import org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindByPatternProcessor;
-import org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindByTitleProcessor;
-import org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindUsingApplibQueryProcessor;
-import org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryProcessor;
-import org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.QueryUtil;
+import org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.*;
import org.apache.isis.objectstore.jdo.datanucleus.persistence.spi.JdoObjectIdSerializer;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoNamedQuery;
+import static org.apache.isis.core.commons.ensure.Ensure.*;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+
public class DataNucleusObjectStore implements ObjectStoreSpi {
private static final Logger LOG = LoggerFactory.getLogger(DataNucleusObjectStore.class);
@@ -171,12 +155,12 @@ public class DataNucleusObjectStore implements ObjectStoreSpi {
* {@inheritDoc}
* <p>
* Automatically {@link IsisTransactionManager#endTransaction() ends
- * (commits)} the current (Isis) {@link Transaction}. This in turn
+ * (commits)} the current (Isis) {@link IsisTransaction}. This in turn
* {@link DataNucleusObjectStore#commitJdoTransaction() commits the underlying
- * JPA transaction}.
+ * JDO transaction}.
+ *
* <p>
- * The corresponding DataNucleus {@link Entity} is then
- * {@link EntityManager#close() close}d.
+ * The corresponding DataNucleus entity is then closed.
*/
public void close() {
ensureOpened();
@@ -223,7 +207,9 @@ public class DataNucleusObjectStore implements ObjectStoreSpi {
* the fly during bootstrapping if required.
*/
public boolean isFixturesInstalled() {
- return ! getConfiguration().getBoolean(INSTALL_FIXTURES_KEY, INSTALL_FIXTURES_DEFAULT);
+ final boolean installFixtures = getConfiguration().getBoolean(INSTALL_FIXTURES_KEY, INSTALL_FIXTURES_DEFAULT);
+ LOG.info("isFixturesInstalled: " + INSTALL_FIXTURES_KEY + " = " + installFixtures);
+ return !installFixtures;
}
@@ -430,18 +416,6 @@ public class DataNucleusObjectStore implements ObjectStoreSpi {
- /**
- * Will do nothing if object is already resolved or if object is transient.
- * <p>
- * TODO:
- * The final {@link ResolveState} of the adapter is set using
- * {@link NakedLoadPostEventListener#onPostLoad(org.hibernate.event.PostLoadEvent)}
- * Note: this is the same behaviour as MemoryObjectStore, XmlObjectStore
- * and HibernateObjectStore.
- * <p>
- * REVIEW: if the initial state is RESOLVING_PART, then the
- * {@link ResolveState} is not changed. Is this right?
- */
public void resolveImmediately(final ObjectAdapter adapter) {
ensureOpened();
ensureInTransaction();
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java
index d208e26..4011b3e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerDelegate.java
@@ -69,8 +69,6 @@ public class FixturesInstallerDelegate {
*/
private LogonFixture logonFixture;
- private boolean override;
-
// /////////////////////////////////////////////////////////
// Constructor
// /////////////////////////////////////////////////////////
@@ -93,18 +91,6 @@ public class FixturesInstallerDelegate {
this.persistenceSession = persistenceSession;
}
- /**
- * Force the ability to install the fixtures (outside of initial bootstrapping).
- *
- *
- * <p>
- * Intended for programmatic reuse of installation of fixtures within the
- * running application (eg for demo purposes).
- */
- public FixturesInstallerDelegate withOverride() {
- this.override = true;
- return this;
- }
// /////////////////////////////////////////////////////////
// addFixture, getFixtures, clearFixtures
@@ -149,8 +135,9 @@ public class FixturesInstallerDelegate {
*
* <p>
* The set of fixtures (as per {@link #getFixtures()}) is <i>not</i> cleared
- * after installation; this allows the {@link FixtureBuilderAbstract} to be
- * reused across multiple tests.
+ * after installation; the intention being to allow the
+ * {@link org.apache.isis.core.runtime.fixtures.FixturesInstallerAbstract} to be
+ * reused across multiple tests (REVIEW: does that make sense?)
*/
public final void installFixtures() {
preInstallFixtures(getPersistenceSession());
@@ -235,12 +222,7 @@ public class FixturesInstallerDelegate {
}
private boolean shouldInstallFixture(final InstallableFixture installableFixture) {
- if(override) {
- return true;
- }
-
final FixtureType fixtureType = installableFixture.getType();
-
if (fixtureType == FixtureType.DOMAIN_OBJECTS) {
return !IsisContext.getPersistenceSession().isFixturesInstalled();
}
@@ -292,9 +274,7 @@ public class FixturesInstallerDelegate {
/**
* Returns either the {@link IsisContext#getPersistenceSession() singleton }
- * persistor or the persistor
- * {@link #AbstractFixtureBuilder(PersistenceSession) specified by the
- * constructor} if specified.
+ * persistor or the persistor specified in the constructor.
*
* <p>
* Note: if a {@link PersistenceSession persistor} was specified via the
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
index 40b08ae..f6dc7f4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstallerFromConfiguration.java
@@ -30,8 +30,14 @@ import org.apache.isis.core.runtime.fixtures.domainservice.ObjectLoaderFixture;
public class FixturesInstallerFromConfiguration extends FixturesInstallerAbstract {
private static final Logger LOG = LoggerFactory.getLogger(FixturesInstallerFromConfiguration.class);
- private static final String NAKEDOBJECTS_FIXTURES = ConfigurationConstants.ROOT + "fixtures";
- private static final String NAKEDOBJECTS_FIXTURES_PREFIX = ConfigurationConstants.ROOT + "fixtures.prefix";
+
+ private static final String FIXTURES = ConfigurationConstants.ROOT + "fixtures";
+ /**
+ * @deprecated - just adds to the cognotive load...
+ */
+ @Deprecated
+ private static final String FIXTURES_PREFIX = ConfigurationConstants.ROOT + "fixtures.prefix";
+
private static final String EXPLORATION_OBJECTS = ConfigurationConstants.ROOT + "exploration-objects";
public FixturesInstallerFromConfiguration() {
@@ -40,17 +46,13 @@ public class FixturesInstallerFromConfiguration extends FixturesInstallerAbstrac
@Override
protected void addFixturesTo(final FixturesInstallerDelegate delegate) {
- String fixturePrefix = getConfiguration().getString(NAKEDOBJECTS_FIXTURES_PREFIX);
- fixturePrefix = fixturePrefix == null ? "" : fixturePrefix.trim();
- if (fixturePrefix.length() > 0 && !fixturePrefix.endsWith(ConfigurationConstants.DELIMITER)) {
- fixturePrefix = fixturePrefix + ConfigurationConstants.DELIMITER;
- }
+
+ final FixtureConfig fixtureConfig = getFixtureConfig();
try {
- final String[] fixtureList = getConfiguration().getList(NAKEDOBJECTS_FIXTURES);
boolean fixtureLoaded = false;
- for (final String element : fixtureList) {
- final String fixtureFullyQualifiedName = fixturePrefix + element;
+ for (final String element : fixtureConfig.getFixtures()) {
+ final String fixtureFullyQualifiedName = fixtureConfig.getFixturePrefix() + element;
LOG.info(" adding fixture " + fixtureFullyQualifiedName);
final Object fixture = InstanceUtil.createInstance(fixtureFullyQualifiedName);
fixtureLoaded = true;
@@ -69,4 +71,62 @@ public class FixturesInstallerFromConfiguration extends FixturesInstallerAbstrac
}
}
+ private static class FixtureConfig {
+
+ //region > fixtures
+
+ private String[] fixtures;
+
+ String[] getFixtures() {
+ return fixtures;
+ }
+
+ void setFixtures(String[] fixtures) {
+ this.fixtures = fixtures;
+ }
+
+ void setFixtures(String fixturesStr) {
+ if(fixturesStr != null) {
+ setFixtures(new String[]{fixturesStr});
+ } else {
+ setFixtures(new String[]{});
+ }
+
+ }
+
+ @SuppressWarnings("unused")
+ boolean hasFixtures() {
+ return fixtures != null && fixtures.length != 0;
+ }
+ //endregion
+
+ //region > fixturePrefix
+
+ private String fixturePrefix;
+ String getFixturePrefix() {
+ return fixturePrefix;
+ }
+
+ void setFixturePrefix(String fixturePrefix) {
+ fixturePrefix = fixturePrefix == null ? "" : fixturePrefix.trim();
+ if (fixturePrefix.length() > 0 && !fixturePrefix.endsWith(ConfigurationConstants.DELIMITER)) {
+ fixturePrefix = fixturePrefix + ConfigurationConstants.DELIMITER;
+ }
+
+ this.fixturePrefix = fixturePrefix;
+ }
+ //endregion
+
+
+ }
+
+ private FixtureConfig getFixtureConfig() {
+ final FixtureConfig fixtureConfig = new FixtureConfig();
+
+ fixtureConfig.setFixtures(getConfiguration().getList(FIXTURES));
+ fixtureConfig.setFixturePrefix(getConfiguration().getString(FIXTURES_PREFIX));
+
+ return fixtureConfig;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
index e3ee3bf..2336d96 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisRunner.java
@@ -228,10 +228,9 @@ public class IsisRunner {
addOptionHandler(optionHandlerDeploymentType);
addOptionHandler(new OptionHandlerConfiguration());
- OptionHandlerPersistor optionHandlerPersistor;
OptionHandlerViewer optionHandlerViewer;
- addOptionHandler(optionHandlerPersistor = new OptionHandlerPersistor(installerLookup));
+ addOptionHandler(new OptionHandlerPersistor(installerLookup));
addOptionHandler(optionHandlerViewer = new OptionHandlerViewer(installerLookup));
addOptionHandler(new OptionHandlerReflector(installerLookup));
@@ -240,6 +239,8 @@ public class IsisRunner {
addOptionHandler(new OptionHandlerFixture());
addOptionHandler(new OptionHandlerNoSplash());
addOptionHandler(new OptionHandlerAdditionalProperty());
+ addOptionHandler(new OptionHandlerFixtureFromEnvironmentVariable());
+ addOptionHandler(new OptionHandlerSystemProperties());
addOptionHandler(new OptionHandlerDebug());
addOptionHandler(new OptionHandlerDiagnostics());
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java
new file mode 100644
index 0000000..81c604a
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromEnvironmentVariable.java
@@ -0,0 +1,69 @@
+/*
+ * 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.runtime.runner.opts;
+
+import java.util.Map;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Options;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.runtime.optionhandler.BootPrinter;
+import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
+
+public class OptionHandlerFixtureFromEnvironmentVariable extends OptionHandlerAbstract {
+
+ private static final Logger LOG = LoggerFactory.getLogger(OptionHandlerFixtureFromEnvironmentVariable.class);
+
+ private String fixtureClassName;
+
+ @Override
+ @SuppressWarnings("static-access")
+ public void addOption(final Options options) {
+ // no-op
+ }
+
+ @Override
+ public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
+ Map<String, String> properties = System.getenv();
+ for (String key : properties.keySet()) {
+ if (key.equalsIgnoreCase("IsisFixture") || key.equalsIgnoreCase("IsisFixtures")) {
+ this.fixtureClassName = properties.get(key);
+ return true;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+ if(fixtureClassName == null) {
+ return;
+ }
+ prime(isisConfigurationBuilder, "isis.persistor.datanucleus.install-fixtures", "true");
+ prime(isisConfigurationBuilder, "isis.fixtures", fixtureClassName);
+ }
+
+ private static void prime(IsisConfigurationBuilder isisConfigurationBuilder, String key, String value) {
+ LOG.info("priming: " + key + "=" + value);
+ isisConfigurationBuilder.add(key, value);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromInitParameters.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromInitParameters.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromInitParameters.java
new file mode 100644
index 0000000..46e8f25
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerFixtureFromInitParameters.java
@@ -0,0 +1,86 @@
+/*
+ * 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.runtime.runner.opts;
+
+import java.util.Enumeration;
+import java.util.Map;
+import javax.servlet.ServletContext;
+import com.google.common.collect.Maps;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Options;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.runtime.optionhandler.BootPrinter;
+import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
+
+public class OptionHandlerFixtureFromInitParameters extends OptionHandlerAbstract {
+
+ private static final Logger LOG = LoggerFactory.getLogger(OptionHandlerFixtureFromInitParameters.class);
+ private final ServletContext servletContext;
+
+
+
+ public OptionHandlerFixtureFromInitParameters(ServletContext servletContext) {
+ this.servletContext = servletContext;
+ }
+
+ @Override
+ @SuppressWarnings("static-access")
+ public void addOption(final Options options) {
+ // no-op
+ }
+
+ @Override
+ public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
+ // no-op
+ return true;
+ }
+
+ @Override
+ public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+ Map<String,String> additionalProperties = asMap(servletContext);
+ LOG.info("priming configuration builder: " + additionalProperties.size() + " properties to prime");
+ addConfigurationProperties(isisConfigurationBuilder, additionalProperties);
+ }
+
+ private static Map<String, String> asMap(ServletContext servletContext) {
+ Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
+ final Map<String,String> map = Maps.newTreeMap();
+ while(initParameterNames.hasMoreElements()) {
+ final String initParameterName = initParameterNames.nextElement();
+ final String initParameterValue = servletContext.getInitParameter(initParameterName);
+ if (initParameterName.startsWith("isis.")) {
+ map.put(initParameterName, initParameterValue);
+ }
+ }
+ return map;
+ }
+
+ private static void addConfigurationProperties(final IsisConfigurationBuilder isisConfigurationBuilder, final Map<String, String> additionalProperties) {
+ for (final String propertyKey : additionalProperties.keySet()) {
+ final String propertyValue = additionalProperties.get(propertyKey);
+
+ LOG.info("priming: " + propertyKey + "=" + propertyValue);
+ isisConfigurationBuilder.add(propertyKey, propertyValue);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java
new file mode 100644
index 0000000..881bb72
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerSystemProperties.java
@@ -0,0 +1,77 @@
+/*
+ * 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.runtime.runner.opts;
+
+import java.util.Map;
+import java.util.Properties;
+import com.google.common.collect.Maps;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Options;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
+import org.apache.isis.core.runtime.optionhandler.BootPrinter;
+import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
+
+public class OptionHandlerSystemProperties extends OptionHandlerAbstract {
+
+ private static final Logger LOG = LoggerFactory.getLogger(OptionHandlerSystemProperties.class);
+
+ private Map<String,String> additionalProperties;
+
+ @Override
+ @SuppressWarnings("static-access")
+ public void addOption(final Options options) {
+ // no-op
+ }
+
+ @Override
+ public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
+ this.additionalProperties = asMap(System.getProperties());
+ return true;
+ }
+
+ private static Map<String, String> asMap(Properties properties) {
+ final Map<String,String> map = Maps.newTreeMap();
+ for (String key : properties.stringPropertyNames()) {
+ final String value = properties.getProperty(key);
+ if (key.startsWith("isis.")) {
+ map.put(key, value);
+ }
+ }
+ return map;
+ }
+
+ @Override
+ public void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder) {
+ LOG.info("priming configuration builder: " + additionalProperties.size() + " properties to prime");
+ addConfigurationProperties(isisConfigurationBuilder, additionalProperties);
+ }
+
+ private static void addConfigurationProperties(final IsisConfigurationBuilder isisConfigurationBuilder, final Map<String, String> additionalProperties) {
+ for (final String propertyKey : additionalProperties.keySet()) {
+ final String propertyValue = additionalProperties.get(propertyKey);
+
+ LOG.info("priming: " + propertyKey + "=" + propertyValue);
+ isisConfigurationBuilder.add(propertyKey, propertyValue);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
index 06f530b..184cc68 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromConfiguration.java
@@ -37,6 +37,11 @@ public class ServicesInstallerFromConfiguration extends InstallerAbstract implem
private static final String SERVICES = "services";
private static final String EXPLORATION_OBJECTS = "exploration-objects";
+
+ /**
+ * @deprecated - just adds to the cognotive load...
+ */
+ @Deprecated
private static final String SERVICES_PREFIX = "services.prefix";
private final static Pattern regex = Pattern.compile("((\\d+):)(.*)");
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
index 794e331..a28619d 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppBootstrapper.java
@@ -20,17 +20,14 @@
package org.apache.isis.core.webapp;
import java.util.List;
-
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
-
+import com.google.common.collect.Lists;
import com.google.inject.Guice;
import com.google.inject.Injector;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import org.apache.isis.core.commons.config.IsisConfigurationBuilder;
import org.apache.isis.core.commons.config.IsisConfigurationBuilderPrimer;
import org.apache.isis.core.commons.config.IsisConfigurationBuilderResourceStreams;
@@ -41,6 +38,7 @@ import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
import org.apache.isis.core.runtime.runner.IsisInjectModule;
+import org.apache.isis.core.runtime.runner.opts.OptionHandlerFixtureFromInitParameters;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystem;
import org.apache.isis.core.runtime.system.SystemConstants;
@@ -133,13 +131,15 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
}
@SuppressWarnings("unchecked")
- private void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
+ private static void primeConfigurationBuilder(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
LOG.info("loading properties from option handlers");
- final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers =
- (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
- if (isisConfigurationBuilderPrimers == null) {
- return;
+ final List<IsisConfigurationBuilderPrimer> isisConfigurationBuilderPrimers = Lists.newArrayList();
+ final List<IsisConfigurationBuilderPrimer> primers = (List<IsisConfigurationBuilderPrimer>) servletContext.getAttribute(WebAppConstants.CONFIGURATION_PRIMERS_KEY);
+ if(primers != null) {
+ isisConfigurationBuilderPrimers.addAll(primers);
}
+ // also support loading from init parameters (specifically, to support simplericity's jetty-console)
+ isisConfigurationBuilderPrimers.add(new OptionHandlerFixtureFromInitParameters(servletContext));
for (final IsisConfigurationBuilderPrimer isisConfigurationBuilderPrimer : isisConfigurationBuilderPrimers) {
LOG.debug("priming configurations for " + isisConfigurationBuilderPrimer);
isisConfigurationBuilderPrimer.primeConfigurationBuilder(isisConfigurationBuilder);
@@ -153,8 +153,7 @@ public class IsisWebAppBootstrapper implements ServletContextListener {
* {@value WebAppConstants#DEPLOYMENT_TYPE_KEY} and also
* {@value SystemConstants#DEPLOYMENT_TYPE_KEY}.
* <p>
- * If no setting is found, defaults to
- * {@value WebAppConstants#DEPLOYMENT_TYPE_DEFAULT}.
+ * If no setting is found, defaults to {@link WebAppConstants#DEPLOYMENT_TYPE_DEFAULT}.
*/
private DeploymentType determineDeploymentType(final IsisConfigurationBuilder isisConfigurationBuilder, final ServletContext servletContext) {
String deploymentTypeStr = null;
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 0cc949f..e49101a 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -145,13 +145,12 @@ isis.services.ServicesInstallerFromAnnotation.packagePrefix=dom.simple,\
fixture.simple,\
webapp.prototyping
-#isis.services.prefix =
isis.services = \
org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions,\
\
# customizable exception handling, \
org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
- \
+ #
# Specify the (optional) test fixtures
@@ -160,8 +159,7 @@ isis.services = \
# in-memory object store, the fixtures are installed on every run. For other
# object stores, they are used only when the object store is first initialized.
#
-#isis.fixtures.prefix=
-isis.fixtures=fixture.simple.SimpleObjectsFixture
+isis.fixtures=fixture.simple.SimpleObjectsFixture
#
http://git-wip-us.apache.org/repos/asf/isis/blob/a064fe36/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 6a48898..c6269a3 100644
--- a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -147,13 +147,12 @@ isis.services.ServicesInstallerFromAnnotation.packagePrefix=app,\
webapp.admin,\
webapp.prototyping
-#isis.services.prefix =
isis.services = \
org.apache.isis.applib.services.bookmark.BookmarkHolderActionContributions,\
\
# customizable exception handling, \
org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
- \
+ #
# Specify the (optional) test fixtures
@@ -162,7 +161,6 @@ isis.services = \
# in-memory object store, the fixtures are installed on every run. For other
# object stores, they are used only when the object store is first initialized.
#
-#isis.fixtures.prefix=
isis.fixtures=fixture.todo.scenarios.RecreateToDoItemsForSven