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:58 UTC
[23/51] [abbrv] isis git commit: ISIS-1408: simpifying
InstallerLookup and IsisComponentProvider.
ISIS-1408: simpifying InstallerLookup and IsisComponentProvider.
Right now is slightly broken... not picking up the app manifest.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/b6dc190b
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/b6dc190b
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/b6dc190b
Branch: refs/heads/master
Commit: b6dc190b8a177e869f9c6e3bef3703f0429d4586
Parents: 04bf1f2
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu May 19 20:50:17 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu May 19 20:54:34 2016 +0100
----------------------------------------------------------------------
.../guides/_rgcfg_specifying-components.adoc | 2 +
.../integtestsupport/IsisSystemForTest.java | 40 +--
.../configbuilder/IsisConfigurationBuilder.java | 10 +-
.../runtime/fixtures/FixturesInstaller.java | 3 +-
.../installerregistry/InstallerLookup.java | 56 +---
.../runner/opts/OptionHandlerReflector.java | 71 -----
.../isis/core/runtime/system/IsisSystem.java | 13 +-
.../core/runtime/system/SystemConstants.java | 59 +---
.../AuthenticatorBypass.java | 40 +++
.../IsisComponentProvider.java | 262 +++++++++++++++++-
.../IsisComponentProviderAbstract.java | 269 -------------------
.../IsisComponentProviderDefault2.java | 164 ++---------
.../IsisComponentProviderUsingInstallers.java | 121 ++-------
.../core/runtime/installer-registry.properties | 12 -
14 files changed, 382 insertions(+), 740 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
index 3205a5b..f5bc353 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_specifying-components.adoc
@@ -82,6 +82,8 @@ The mechanism to discover and load domain services:
This property is IGNORED if the `isis.appManifest` configuration property is specified, or if an xref:rgcms.adoc#_rgcms_classes_super_AppManifest[`AppManifest`] is provided programmatically.
+This property is also IGNORED completely in 1.13.0+; the `configuration-and-annotation` implementation is always used.
+
|===
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/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 82bf0d5..c4ac9fd 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
@@ -155,12 +155,12 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
// these fields 'xxxForComponentProvider' are used to initialize the IsisComponentProvider, but shouldn't be used thereafter.
- private final AppManifest appManifestForComponentProvider;
- private final IsisConfiguration configurationForComponentProvider;
- private final List<Object> servicesForComponentProvider;
- private final List<InstallableFixture> fixturesForComponentProvider;
- private final MetaModelValidator metaModelValidatorForComponentProvider;
- private final ProgrammingModel programmingModelForComponentProvider;
+ private final AppManifest appManifestIfAny;
+ private final IsisConfiguration configurationOverride;
+ private final List<Object> servicesIfAny;
+ private final List<InstallableFixture> fixturesIfAny;
+ private final MetaModelValidator metaModelValidatorOverride;
+ private final ProgrammingModel programmingModelOverride;
// populated at #setupSystem
private IsisComponentProvider componentProvider;
@@ -335,15 +335,15 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
final List<InstallableFixture> fixturesIfAny,
final ProgrammingModel programmingModelOverride,
final MetaModelValidator metaModelValidatorOverride,
- final AuthenticationRequest authenticationRequest,
+ final AuthenticationRequest authenticationRequestIfAny,
final List<Listener> listeners) {
- this.appManifestForComponentProvider = appManifestIfAny;
- this.configurationForComponentProvider = configurationOverride;
- this.servicesForComponentProvider = servicesIfAny;
- this.fixturesForComponentProvider = fixturesIfAny;
- this.programmingModelForComponentProvider = programmingModelOverride;
- this.metaModelValidatorForComponentProvider = metaModelValidatorOverride;
- this.authenticationRequestIfAny = authenticationRequest;
+ this.appManifestIfAny = appManifestIfAny;
+ this.configurationOverride = configurationOverride;
+ this.servicesIfAny = servicesIfAny;
+ this.fixturesIfAny = fixturesIfAny;
+ this.programmingModelOverride = programmingModelOverride;
+ this.metaModelValidatorOverride = metaModelValidatorOverride;
+ this.authenticationRequestIfAny = authenticationRequestIfAny;
this.listeners = listeners;
}
@@ -398,12 +398,12 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
componentProvider = new IsisComponentProviderDefault(
DeploymentType.UNIT_TESTING,
- appManifestForComponentProvider,
- servicesForComponentProvider,
- fixturesForComponentProvider,
- configurationForComponentProvider,
- programmingModelForComponentProvider,
- metaModelValidatorForComponentProvider
+ appManifestIfAny,
+ servicesIfAny,
+ fixturesIfAny,
+ configurationOverride,
+ programmingModelOverride,
+ metaModelValidatorOverride
);
isisSystem = new IsisSystem(componentProvider);
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/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
index ed229ef..423d01a 100644
--- 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
@@ -346,14 +346,14 @@ public final class IsisConfigurationBuilder {
* Log a summary of resources found or not found.
*/
public void dumpResourcesToLog() {
- if (LOG.isInfoEnabled()) {
- LOG.info("Configuration resources FOUND:");
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Configuration resources FOUND:");
for (String resource : configurationResourcesFound) {
- LOG.info("* " + resource);
+ LOG.debug("* {}", resource);
}
- LOG.info("Configuration resources NOT FOUND (but not needed):");
+ LOG.debug("Configuration resources NOT FOUND (but not needed):");
for (String resource : configurationResourcesNotFound) {
- LOG.info("* " + resource);
+ LOG.debug("* {}", resource);
}
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
index dcf6356..bb1b2f8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixtures/FixturesInstaller.java
@@ -21,12 +21,11 @@ package org.apache.isis.core.runtime.fixtures;
import org.apache.isis.applib.fixtures.InstallableFixture;
import org.apache.isis.applib.fixtures.LogonFixture;
-import org.apache.isis.core.commons.components.Installer;
/**
* A particular mechanism to install fixtures.
*/
-public interface FixturesInstaller extends Installer {
+public interface FixturesInstaller {
/**
* NB: this has the suffix '-installer' because in the command line we must
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
index 6d27751..cac2a50 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/installerregistry/InstallerLookup.java
@@ -43,15 +43,15 @@ import org.apache.isis.core.commons.factory.InstanceUtil;
import org.apache.isis.core.commons.factory.UnavailableClassException;
import org.apache.isis.core.commons.lang.ObjectExtensions;
import org.apache.isis.core.commons.lang.StringExtensions;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
import org.apache.isis.core.runtime.IsisInstallerRegistry;
import org.apache.isis.core.runtime.about.AboutIsis;
import org.apache.isis.core.runtime.about.ComponentDetails;
import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
-import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
+import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
import org.apache.isis.core.runtime.services.ServicesInstaller;
+import org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation;
import org.apache.isis.core.runtime.system.IsisSystem;
import org.apache.isis.core.runtime.system.SystemConstants;
import org.apache.isis.core.runtime.systemdependencyinjector.SystemDependencyInjector;
@@ -81,7 +81,7 @@ import org.apache.isis.core.runtime.systemdependencyinjector.SystemDependencyInj
* even if it has not been registered in <tt>installer-registry.properties</tt>
* : just specify the {@link Installer}'s fully qualified class name.
*/
-public class InstallerLookup implements InstallerRepository, ApplicationScopedComponent, SystemDependencyInjector {
+public class InstallerLookup implements ApplicationScopedComponent, SystemDependencyInjector {
private static final Logger LOG = LoggerFactory.getLogger(InstallerLookup.class);
@@ -136,32 +136,12 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
}
//endregion
- //region > InstallerRepository impl.
-
- @Override
- public Installer[] getInstallers(final Class<?> cls) {
- final List<Installer> list = new ArrayList<Installer>();
- for (final Installer comp : installerList) {
- if (cls.isAssignableFrom(comp.getClass())) {
- list.add(comp);
- }
- }
- return list.toArray(new Installer[list.size()]);
- }
- //endregion
-
-
- //region > metamodel
- public SpecificationLoaderInstaller reflectorInstaller(final String requested) {
- return getInstaller(SpecificationLoaderInstaller.class, requested, SystemConstants.REFLECTOR_KEY, SystemConstants.REFLECTOR_DEFAULT);
- }
- //endregion
-
//region > framework
public AuthenticationManagerInstaller authenticationManagerInstaller(final String requested) {
return getInstaller(
- AuthenticationManagerInstaller.class, requested,
+ AuthenticationManagerInstaller.class,
+ requested,
SystemConstants.AUTHENTICATION_INSTALLER_KEY,
SystemConstants.AUTHENTICATION_DEFAULT);
}
@@ -173,31 +153,11 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
SystemConstants.AUTHORIZATION_DEFAULT);
}
- public FixturesInstaller fixturesInstaller(final String requested) {
- return getInstaller(
- FixturesInstaller.class, requested,
- SystemConstants.FIXTURES_INSTALLER_KEY,
- SystemConstants.FIXTURES_INSTALLER_DEFAULT);
- }
-
- public PersistenceMechanismInstaller persistenceMechanismInstaller(final String requested) {
- return getInstaller(
- PersistenceMechanismInstaller.class, requested,
- SystemConstants.OBJECT_PERSISTOR_KEY,
- SystemConstants.OBJECT_PERSISTOR_DEFAULT);
- }
-
- public ServicesInstaller servicesInstaller(final String requestedImplementationName) {
- return getInstaller(
- ServicesInstaller.class, requestedImplementationName,
- SystemConstants.SERVICES_INSTALLER_KEY,
- SystemConstants.SERVICES_INSTALLER_DEFAULT);
- }
//endregion
//region > framework - generic
@SuppressWarnings("unchecked")
- public <T extends Installer> T getInstaller(final Class<T> cls, final String implName) {
+ private <T extends Installer> T getInstaller(final Class<T> cls, final String implName) {
Assert.assertNotNull("No name specified", implName);
for (final Installer installer : installerList) {
if (cls.isAssignableFrom(installer.getClass()) && installer.getName().equals(implName)) {
@@ -217,7 +177,8 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
}
return installer;
} catch (final InstanceCreationException e) {
- throw new InstanceCreationException("Specification error in " + IsisInstallerRegistry.INSTALLER_REGISTRY_FILE, e);
+ throw new InstanceCreationException(
+ "Specification error in " + IsisInstallerRegistry.INSTALLER_REGISTRY_FILE, e);
} catch (final UnavailableClassException e) {
return null;
}
@@ -259,7 +220,6 @@ public class InstallerLookup implements InstallerRepository, ApplicationScopedCo
}
//endregion
-
//region > SystemDependencyInjector, Injectable
@Override
public <T> T injectDependenciesInto(final T candidate) {
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
deleted file mode 100644
index 4ac20dc..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionHandlerReflector.java
+++ /dev/null
@@ -1,71 +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.runtime.runner.opts;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionBuilder;
-import org.apache.commons.cli.Options;
-
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
-import org.apache.isis.core.runtime.installerregistry.InstallerRepository;
-import org.apache.isis.core.runtime.optionhandler.BootPrinter;
-import org.apache.isis.core.runtime.optionhandler.OptionHandlerAbstract;
-import org.apache.isis.core.runtime.runner.Constants;
-import org.apache.isis.core.runtime.system.SystemConstants;
-
-import static org.apache.isis.core.runtime.runner.Constants.REFLECTOR_LONG_OPT;
-import static org.apache.isis.core.runtime.runner.Constants.REFLECTOR_OPT;
-
-/**
- * @deprecated - far better to use `isis.reflector.facets.include` and `isis.reflector.facets.exclude`; no longer registered in IsisRunner/IsisWebServer
- */
-@Deprecated
-public class OptionHandlerReflector extends OptionHandlerAbstract {
-
- private final InstallerRepository installerRepository;
- private String reflector;
-
- public OptionHandlerReflector(final InstallerRepository installerRepository) {
- this.installerRepository = installerRepository;
- }
-
- @Override
- @SuppressWarnings("static-access")
- public void addOption(final Options options) {
- final Object[] reflectors = installerRepository.getInstallers(SpecificationLoaderInstaller.class);
- final Option option = OptionBuilder.withArgName("name|class name").hasArg().withLongOpt(REFLECTOR_LONG_OPT).withDescription("reflector to use (ignored if type is prototype or client): " + availableInstallers(reflectors) + "; or class name").create(REFLECTOR_OPT);
- options.addOption(option);
-
- }
-
- @Override
- public boolean handle(final CommandLine commandLine, final BootPrinter bootPrinter, final Options options) {
- reflector = commandLine.getOptionValue(Constants.REFLECTOR_OPT);
- return true;
- }
-
- @Override
- public void prime(final IsisConfigurationBuilder isisConfigurationBuilder) {
- isisConfigurationBuilder.add(SystemConstants.REFLECTOR_KEY, reflector);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
index 3f82837..caf7bdd 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystem.java
@@ -156,9 +156,9 @@ public class IsisSystem implements ApplicationScopedComponent {
// authentication, authorization
final AuthenticationManager authenticationManager =
- isisComponentProvider.provideAuthenticationManager(deploymentType);
+ isisComponentProvider.provideAuthenticationManager();
final AuthorizationManager authorizationManager =
- isisComponentProvider.provideAuthorizationManager(deploymentType);
+ isisComponentProvider.provideAuthorizationManager();
// specificationLoader
final Collection<MetaModelRefiner> metaModelRefiners =
@@ -170,7 +170,7 @@ public class IsisSystem implements ApplicationScopedComponent {
// persistenceSessionFactory
final PersistenceSessionFactory persistenceSessionFactory =
isisComponentProvider.providePersistenceSessionFactory(
- deploymentType, servicesInjector, specificationLoader);
+ deploymentType, servicesInjector);
// runtimeContext
final RuntimeContextFromSession runtimeContext =
@@ -274,9 +274,6 @@ public class IsisSystem implements ApplicationScopedComponent {
private void installFixturesIfRequired() throws IsisSystemException {
fixtureInstaller = isisComponentProvider.provideFixturesInstaller();
- if (isNoop(fixtureInstaller)) {
- return;
- }
IsisContext.openSession(new InitialisationSession());
fixtureInstaller.installFixtures();
@@ -291,10 +288,6 @@ public class IsisSystem implements ApplicationScopedComponent {
}
}
- private boolean isNoop(final FixturesInstaller candidate) {
- return candidate == null || (fixtureInstaller instanceof Noop);
- }
-
/**
* The act of invoking titleOf(...) will cause translations to be requested.
*/
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
index c8aa4e5..ca446f1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
@@ -22,15 +22,11 @@ package org.apache.isis.core.runtime.system;
import org.apache.isis.applib.AppManifest;
import org.apache.isis.core.commons.config.ConfigurationConstants;
import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
import org.apache.isis.core.runtime.authentication.AuthenticationManager;
import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
import org.apache.isis.core.runtime.authorization.AuthorizationManager;
import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
-import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
-import org.apache.isis.core.runtime.services.ServicesInstaller;
public final class SystemConstants {
@@ -44,24 +40,6 @@ public final class SystemConstants {
public static final String DEPLOYMENT_TYPE_KEY = ConfigurationConstants.ROOT + "deploymentType";
- /**
- * Key used to lookup {@link SpecificationLoader specification Loader} in
- * {@link IsisConfiguration}, and root for any
- * {@link SpecificationLoaderInstaller reflector}-specific configuration keys.
- *
- * @deprecated
- */
- @Deprecated
- public final static String REFLECTOR_KEY = ConfigurationConstants.ROOT + SpecificationLoaderInstaller.TYPE;
-
- /**
- * Default for {@link #REFLECTOR_KEY}
- *
- * @deprecated
- */
- @Deprecated
- public static final String REFLECTOR_DEFAULT = "java";
-
/**
* Key used to lookup {@link org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory persistor} in
@@ -74,20 +52,6 @@ public final class SystemConstants {
@Deprecated
public final static String OBJECT_PERSISTOR_INSTALLER_KEY = ConfigurationConstants.ROOT + PersistenceMechanismInstaller.TYPE;
- /**
- *
- * @deprecated
- */
- @Deprecated
- public static final String OBJECT_PERSISTOR_KEY = OBJECT_PERSISTOR_INSTALLER_KEY;
-
- /**
- *
- * @deprecated
- */
- @Deprecated
- public static final String OBJECT_PERSISTOR_DEFAULT = "datanucleus";
-
/**
* Key used to lookup {@link AppManifest} (if any) from the {@link IsisConfiguration}.
@@ -118,27 +82,7 @@ public final class SystemConstants {
*/
public static final String AUTHORIZATION_DEFAULT = "shiro";
- /**
- * Key used to lookup {@link ServicesInstaller services installer} in
- * {@link IsisConfiguration}, and root for any {@link ServicesInstaller
- * services installer}-specific configuration keys.
- */
- public static final String SERVICES_INSTALLER_KEY = ConfigurationConstants.ROOT + ServicesInstaller.TYPE;
- /**
- * Default for {@link #SERVICES_INSTALLER_KEY}
- */
- public static final String SERVICES_INSTALLER_DEFAULT = "configuration-and-annotation";
- /**
- * Key used to lookup {@link FixturesInstaller fixtures installer} in
- * {@link IsisConfiguration}, and root for any {@link FixturesInstaller
- * fixtures installer}-specific configuration keys.
- */
- public static final String FIXTURES_INSTALLER_KEY = ConfigurationConstants.ROOT + FixturesInstaller.TYPE;
- /**
- * Default for {@link #FIXTURES_INSTALLER_KEY}
- */
- public static final String FIXTURES_INSTALLER_DEFAULT = "configuration";
/**
* Key by which requested fixture (eg via command line) is made available in
@@ -146,6 +90,8 @@ public final class SystemConstants {
*/
public final static String FIXTURE_KEY = ConfigurationConstants.ROOT + "fixtures";
+
+
/**
* Key by which requested user (eg via command line) is made available in
* {@link IsisConfiguration} .
@@ -164,6 +110,7 @@ public final class SystemConstants {
@Deprecated
public final static String PASSWORD_KEY = ConfigurationConstants.ROOT + "password";
+
/**
* Key as to whether to show splash (eg via command line) is made available
* in {@link IsisConfiguration}.
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java
new file mode 100644
index 0000000..7703ab7
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/AuthenticatorBypass.java
@@ -0,0 +1,40 @@
+/*
+ * 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.systemusinginstallers;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
+import org.apache.isis.core.runtime.authentication.standard.AuthenticatorAbstract;
+
+class AuthenticatorBypass extends AuthenticatorAbstract {
+
+ public AuthenticatorBypass(final IsisConfiguration configuration) {
+ super(configuration);
+ }
+
+ @Override
+ public boolean isValid(final AuthenticationRequest request) {
+ return true;
+ }
+
+ @Override
+ public boolean canAuthenticate(Class<? extends AuthenticationRequest> authenticationRequestClass) {
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 20d9337..96698fb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -20,45 +20,281 @@
package org.apache.isis.core.runtime.systemusinginstallers;
import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nullable;
+import javax.jdo.annotations.PersistenceCapable;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import org.reflections.Reflections;
+import org.reflections.vfs.Vfs;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.core.commons.lang.ClassUtil;
import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
import org.apache.isis.core.runtime.authentication.AuthenticationManager;
import org.apache.isis.core.runtime.authorization.AuthorizationManager;
import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
+import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
+import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
+import org.apache.isis.core.runtime.services.ServicesInstallerFromAnnotation;
+import org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystemException;
+import org.apache.isis.core.runtime.system.SystemConstants;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
+import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller;
+import org.apache.isis.objectstore.jdo.service.RegisterEntities;
+import org.apache.isis.progmodels.dflt.JavaReflectorInstaller;
+
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
/**
*
*/
-public interface IsisComponentProvider {
+public abstract class IsisComponentProvider {
+
+ //region > constructor, fields
+
+ private final DeploymentType deploymentType;
+ private final AppManifest appManifestIfAny;
+ private final IsisConfigurationDefault configuration;
+
+ public IsisComponentProvider(
+ final DeploymentType deploymentType,
+ final AppManifest appManifestIfAny,
+ final IsisConfigurationDefault configuration) {
+
+ this.deploymentType = deploymentType;
+ this.appManifestIfAny = appManifestIfAny;
+ this.configuration = configuration;
+
+ if(appManifestIfAny != null) {
+
+ putAppManifestKey(appManifestIfAny);
+ findAndRegisterTypes(appManifestIfAny);
+ specifyServicesAndRegisteredEntitiesUsing(appManifestIfAny);
+
+ overrideConfigurationUsing(appManifestIfAny);
+ }
+
+ }
+
+ public DeploymentType getDeploymentType() {
+ return deploymentType;
+ }
+
+ public AppManifest getAppManifestIfAny() {
+ return appManifestIfAny;
+ }
+
+ public IsisConfigurationDefault getConfiguration() {
+ return configuration;
+ }
+
+ //endregion
+
+
+ //region > helpers (appManifest)
+
+ private void putAppManifestKey(final AppManifest appManifest) {
+ // required to prevent RegisterEntities validation from complaining
+ // if it can't find any @PersistenceCapable entities in a module
+ // that contains only services.
+ putConfigurationProperty(
+ SystemConstants.APP_MANIFEST_KEY, appManifest.getClass().getName()
+ );
+ }
+
+ private void findAndRegisterTypes(final AppManifest appManifest) {
+ final Iterable<String> packageNameList = modulePackageNamesFrom(appManifest);
+ final AppManifest.Registry registry = AppManifest.Registry.instance();
+
+ final List<String> packages = Lists.newArrayList();
+ packages.addAll(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICES);
+ Iterables.addAll(packages, packageNameList);
+
+ Vfs.setDefaultURLTypes(ClassDiscoveryServiceUsingReflections.getUrlTypes());
- DeploymentType getDeploymentType();
+ final Reflections reflections = new Reflections(packages);
+ final Set<Class<?>> domainServiceTypes = reflections.getTypesAnnotatedWith(DomainService.class);
+ final Set<Class<?>> persistenceCapableTypes = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
+ final Set<Class<? extends FixtureScript>> fixtureScriptTypes = reflections.getSubTypesOf(FixtureScript.class);
- IsisConfigurationDefault getConfiguration();
+ final Set<Class<?>> mixinTypes = Sets.newHashSet();
+ mixinTypes.addAll(reflections.getTypesAnnotatedWith(Mixin.class));
+ final Set<Class<?>> domainObjectTypes = reflections.getTypesAnnotatedWith(DomainObject.class);
+ mixinTypes.addAll(
+ Lists.newArrayList(Iterables.filter(domainObjectTypes, new Predicate<Class<?>>() {
+ @Override
+ public boolean apply(@Nullable final Class<?> input) {
+ if(input == null) { return false; }
+ final DomainObject annotation = input.getAnnotation(DomainObject.class);
+ return annotation.nature() == Nature.MIXIN;
+ }
+ }))
+ );
- AuthenticationManager provideAuthenticationManager(DeploymentType deploymentType);
- AuthorizationManager provideAuthorizationManager(final DeploymentType deploymentType);
+ registry.setDomainServiceTypes(domainServiceTypes);
+ registry.setPersistenceCapableTypes(persistenceCapableTypes);
+ registry.setFixtureScriptTypes(fixtureScriptTypes);
+ registry.setMixinTypes(mixinTypes);
+ }
- ServicesInjectorDefault provideServiceInjector();
+ private void specifyServicesAndRegisteredEntitiesUsing(final AppManifest appManifest) {
+ final Iterable<String> packageNames = modulePackageNamesFrom(appManifest);
+ final String packageNamesCsv = Joiner.on(',').join(packageNames);
- FixturesInstaller provideFixturesInstaller();
+ putConfigurationProperty(ServicesInstallerFromAnnotation.PACKAGE_PREFIX_KEY, packageNamesCsv);
+ putConfigurationProperty(RegisterEntities.PACKAGE_PREFIX_KEY, packageNamesCsv);
- SpecificationLoader provideSpecificationLoader(
+ final List<Class<?>> additionalServices = appManifest.getAdditionalServices();
+ if(additionalServices != null) {
+ putConfigurationProperty(
+ ServicesInstallerFromConfiguration.SERVICES_KEY, classNamesFrom(additionalServices));
+ }
+ }
+
+ private Iterable<String> modulePackageNamesFrom(final AppManifest appManifest) {
+ List<Class<?>> modules = appManifest.getModules();
+ if (modules == null || modules.isEmpty()) {
+ throw new IllegalArgumentException(
+ "If an appManifest is provided then it must return a non-empty set of modules");
+ }
+
+ return Iterables.transform(modules, ClassUtil.Functions.packageNameOf());
+ }
+
+ protected String classNamesFrom(final List<?> objectsOrClasses) {
+ if (objectsOrClasses == null) {
+ return null;
+ }
+ final Iterable<String> fixtureClassNames = Iterables.transform(objectsOrClasses, classNameOf());
+ return Joiner.on(',').join(fixtureClassNames);
+ }
+
+ private static Function<Object, String> classNameOf() {
+ return new Function<Object, String>() {
+ @Nullable @Override
+ public String apply(final Object input) {
+ Class<?> aClass = input instanceof Class ? (Class<?>) input : input.getClass();
+ return aClass.getName();
+ }
+ };
+ }
+
+ private void overrideConfigurationUsing(final AppManifest appManifest) {
+ final Map<String, String> configurationProperties = appManifest.getConfigurationProperties();
+ if (configurationProperties != null) {
+ for (Map.Entry<String, String> configProp : configurationProperties.entrySet()) {
+ putConfigurationProperty(configProp.getKey(), configProp.getValue());
+ }
+ }
+ }
+
+ /**
+ * TODO: hacky, {@link IsisConfiguration} is meant to be immutable...
+ */
+ void putConfigurationProperty(final String key, final String value) {
+ if(value == null) {
+ return;
+ }
+ this.configuration.put(key, value);
+ }
+
+ //endregion
+
+
+ //region > services, configuration, authenticationManager, authorizationManager (populated by subclass)
+
+ /**
+ * populated by subclass, in its constructor.
+ */
+ protected List<Object> services;
+ /**
+ * populated by subclass, in its constructor.
+ */
+ protected AuthenticationManager authenticationManager;
+ /**
+ * populated by subclass, in its constructor.
+ */
+ protected AuthorizationManager authorizationManager;
+
+
+ /**
+ * Provided for subclasses to call to ensure that they have correctly populated all fields.
+ */
+ protected void ensureInitialized() {
+ ensureThatState(authenticationManager, is(not(nullValue())));
+ ensureThatState(authorizationManager, is(not(nullValue())));
+ ensureThatState(services, is(not(nullValue())));
+ ensureThatState(configuration, is(not(nullValue())));
+ }
+ //endregion
+
+ //region > provide*
+
+ public AuthenticationManager provideAuthenticationManager() {
+ return authenticationManager;
+ }
+
+ public AuthorizationManager provideAuthorizationManager() {
+ return authorizationManager;
+ }
+
+ public ServicesInjectorDefault provideServiceInjector() {
+ return new ServicesInjectorDefault(services);
+ }
+
+ public FixturesInstaller provideFixturesInstaller() {
+ return new FixturesInstallerFromConfiguration(getConfiguration());
+ }
+
+ public SpecificationLoader provideSpecificationLoader(
final DeploymentType deploymentType,
final ServicesInjectorSpi servicesInjector,
- final Collection<MetaModelRefiner> metaModelRefiners)
- throws IsisSystemException;
+ final Collection<MetaModelRefiner> metaModelRefiners) throws IsisSystemException {
- PersistenceSessionFactory providePersistenceSessionFactory(
+ final SpecificationLoaderInstaller reflectorInstaller = new JavaReflectorInstaller(getConfiguration());
+
+ return reflectorInstaller.createReflector(
+ deploymentType.getDeploymentCategory(), metaModelRefiners, servicesInjector);
+ }
+
+ public PersistenceSessionFactory providePersistenceSessionFactory(
final DeploymentType deploymentType,
- final ServicesInjectorSpi servicesInjector,
- final SpecificationLoader specificationLoader);
+ final ServicesInjectorSpi servicesInjector) {
+ final PersistenceMechanismInstaller persistenceMechanismInstaller =
+ new DataNucleusPersistenceMechanismInstaller(getConfiguration());
+
+ return persistenceMechanismInstaller.createPersistenceSessionFactory(
+ deploymentType, servicesInjector);
+ }
+
+ //endregion
}
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
deleted file mode 100644
index 3a40061..0000000
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
+++ /dev/null
@@ -1,269 +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.runtime.systemusinginstallers;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.jdo.annotations.PersistenceCapable;
-
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
-import org.reflections.Reflections;
-import org.reflections.vfs.Vfs;
-
-import org.apache.isis.applib.AppManifest;
-import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.applib.annotation.Nature;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
-import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.commons.lang.ClassUtil;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
-import org.apache.isis.core.runtime.authentication.AuthenticationManager;
-import org.apache.isis.core.runtime.authorization.AuthorizationManager;
-import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
-import org.apache.isis.core.runtime.services.ServicesInstallerFromAnnotation;
-import org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration;
-import org.apache.isis.core.runtime.system.DeploymentType;
-import org.apache.isis.core.runtime.system.SystemConstants;
-import org.apache.isis.objectstore.jdo.service.RegisterEntities;
-
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-
-public abstract class IsisComponentProviderAbstract implements IsisComponentProvider {
-
- protected final DeploymentType deploymentType;
- /**
- * may be null.
- */
- protected final AppManifest appManifest;
-
- /**
- * populated by subclass, in its constructor.
- */
- protected IsisConfigurationDefault configuration;
- /**
- * populated by subclass, in its constructor.
- */
- protected List<Object> services;
- /**
- * populated by subclass, in its constructor.
- */
- protected FixturesInstaller fixturesInstaller;
- /**
- * populated by subclass, in its constructor.
- */
- protected AuthenticationManager authenticationManager;
- /**
- * populated by subclass, in its constructor.
- */
- protected AuthorizationManager authorizationManager;
-
- public IsisComponentProviderAbstract(
- final DeploymentType deploymentType,
- final AppManifest appManifest) {
-
- this.deploymentType = deploymentType;
- this.appManifest = appManifest;
-
- }
-
- protected void putAppManifestKey(final AppManifest appManifest) {
- // required to prevent RegisterEntities validation from complaining
- // if it can't find any @PersistenceCapable entities in a module
- // that contains only services.
- putConfigurationProperty(
- SystemConstants.APP_MANIFEST_KEY, appManifest.getClass().getName()
- );
- }
-
- /**
- * Provided for subclasses to call to ensure that they have correctly populated all fields.
- */
- protected void ensureInitialized() {
- ensureThatState(authenticationManager, is(not(nullValue())));
- ensureThatState(authorizationManager, is(not(nullValue())));
- ensureThatState(services, is(not(nullValue())));
- ensureThatState(fixturesInstaller, is(not(nullValue())));
- ensureThatState(configuration, is(not(nullValue())), "fixtureInstaller could not be looked up");
- }
-
-
- //region > appManifest helpers
- protected void specifyServicesAndRegisteredEntitiesUsing(final AppManifest appManifest) {
- final Iterable<String> packageNames = modulePackageNamesFrom(appManifest);
- final String packageNamesCsv = Joiner.on(',').join(packageNames);
-
- putConfigurationProperty(ServicesInstallerFromAnnotation.PACKAGE_PREFIX_KEY, packageNamesCsv);
- putConfigurationProperty(RegisterEntities.PACKAGE_PREFIX_KEY, packageNamesCsv);
-
- final List<Class<?>> additionalServices = appManifest.getAdditionalServices();
- if(additionalServices != null) {
- putConfigurationProperty(ServicesInstallerFromConfiguration.SERVICES_KEY, classNamesFrom(additionalServices));
- }
- }
-
- /**
- * @deprecated - unused, renamed to {@link #findAndRegisterTypes(AppManifest)}.
- */
- @Deprecated
- protected void registerPackageNames(final AppManifest appManifest) {
- findAndRegisterTypes(appManifest);
- }
- protected void findAndRegisterTypes(final AppManifest appManifest) {
- final Iterable<String> packageNameList = modulePackageNamesFrom(appManifest);
- final AppManifest.Registry registry = AppManifest.Registry.instance();
-
- final List<String> packages = Lists.newArrayList();
- packages.addAll(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICES);
- Iterables.addAll(packages, packageNameList);
-
- Vfs.setDefaultURLTypes(ClassDiscoveryServiceUsingReflections.getUrlTypes());
-
- final Reflections reflections = new Reflections(packages);
- final Set<Class<?>> domainServiceTypes = reflections.getTypesAnnotatedWith(DomainService.class);
- final Set<Class<?>> persistenceCapableTypes = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
- final Set<Class<? extends FixtureScript>> fixtureScriptTypes = reflections.getSubTypesOf(FixtureScript.class);
-
- final Set<Class<?>> mixinTypes = Sets.newHashSet();
- mixinTypes.addAll(reflections.getTypesAnnotatedWith(Mixin.class));
- final Set<Class<?>> domainObjectTypes = reflections.getTypesAnnotatedWith(DomainObject.class);
- mixinTypes.addAll(
- Lists.newArrayList(Iterables.filter(domainObjectTypes, new Predicate<Class<?>>() {
- @Override
- public boolean apply(@Nullable final Class<?> input) {
- if(input == null) { return false; }
- final DomainObject annotation = input.getAnnotation(DomainObject.class);
- return annotation.nature() == Nature.MIXIN;
- }
- }))
- );
-
- registry.setDomainServiceTypes(domainServiceTypes);
- registry.setPersistenceCapableTypes(persistenceCapableTypes);
- registry.setFixtureScriptTypes(fixtureScriptTypes);
- registry.setMixinTypes(mixinTypes);
- }
-
- private Iterable<String> modulePackageNamesFrom(final AppManifest appManifest) {
- List<Class<?>> modules = appManifest.getModules();
- if (modules == null || modules.isEmpty()) {
- throw new IllegalArgumentException(
- "If an appManifest is provided then it must return a non-empty set of modules");
- }
-
- return Iterables.transform(modules, ClassUtil.Functions.packageNameOf());
- }
-
- protected String classNamesFrom(final List<?> objectsOrClasses) {
- if (objectsOrClasses == null) {
- return null;
- }
- final Iterable<String> fixtureClassNames = Iterables.transform(objectsOrClasses, classNameOf());
- return Joiner.on(',').join(fixtureClassNames);
- }
-
- private static Function<Object, String> classNameOf() {
- return new Function<Object, String>() {
- @Nullable @Override
- public String apply(final Object input) {
- Class<?> aClass =
- input instanceof Class
- ? (Class<?>)input
- : input.getClass();
- return aClass.getName();
- }
- };
- }
-
- protected void overrideConfigurationUsing(final AppManifest appManifest) {
- final Map<String, String> configurationProperties = appManifest.getConfigurationProperties();
- if (configurationProperties != null) {
- for (Map.Entry<String, String> configProp : configurationProperties.entrySet()) {
- putConfigurationProperty(configProp.getKey(), configProp.getValue());
- }
- }
- }
-
- protected final void putConfigurationProperty(final String key, final String value) {
- if(value == null) {
- return;
- }
- doPutConfigurationProperty(key, value);
- }
-
-
- /**
- * For subclasses to implement, to update their implementation of {@link IsisConfiguration}.
- */
- protected abstract void doPutConfigurationProperty(final String key, final String value);
-
- //endregion
-
- //region > API impl.
-
- @Override
- public DeploymentType getDeploymentType() {
- return deploymentType;
- }
-
- @Override
- public IsisConfigurationDefault getConfiguration() {
- return configuration;
- }
-
- @Override
- public AuthenticationManager provideAuthenticationManager(final DeploymentType deploymentType) {
- return authenticationManager;
- }
-
- @Override
- public AuthorizationManager provideAuthorizationManager(final DeploymentType deploymentType) {
- return authorizationManager;
- }
-
- @Override
- public FixturesInstaller provideFixturesInstaller() {
- return fixturesInstaller;
- }
-
- @Override
- public ServicesInjectorDefault provideServiceInjector() {
- return new ServicesInjectorDefault(services);
- }
-
- //endregion
-
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
index 2af84d9..ef7d119 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
@@ -26,7 +26,6 @@ import com.google.common.collect.Lists;
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.fixtures.InstallableFixture;
-import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
@@ -40,24 +39,18 @@ import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
import org.apache.isis.core.runtime.authentication.AuthenticationManager;
-import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
import org.apache.isis.core.runtime.authentication.standard.AuthenticationManagerStandard;
-import org.apache.isis.core.runtime.authentication.standard.Authenticator;
-import org.apache.isis.core.runtime.authentication.standard.AuthenticatorAbstract;
import org.apache.isis.core.runtime.authorization.AuthorizationManager;
import org.apache.isis.core.runtime.authorization.standard.AuthorizationManagerStandard;
-import org.apache.isis.core.runtime.fixtures.FixturesInstaller;
import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
import org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration;
import org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.IsisSystemException;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
-import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller;
import org.apache.isis.progmodels.dflt.JavaReflectorHelper;
import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
-public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract {
+public class IsisComponentProviderDefault2 extends IsisComponentProvider {
private final ProgrammingModel programmingModel;
private final MetaModelValidator metaModelValidator;
@@ -70,62 +63,28 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
final IsisConfiguration configurationOverride,
final ProgrammingModel programmingModelOverride,
final MetaModelValidator metaModelValidatorOverride) {
- super(deploymentType, appManifestIfAny);
+ super(deploymentType, appManifestIfAny, elseDefault(configurationOverride));
- this.configuration = elseDefault(configurationOverride);
+ this.services = appManifestIfAny != null
+ ? new ServicesInstallerFromConfigurationAndAnnotation(getConfiguration()).getServices()
+ : servicesOverride != null
+ ? servicesOverride
+ : new ServicesInstallerFromConfiguration(getConfiguration()).getServices();
- final String fixtureClassNamesCsv;
- if(appManifest != null) {
-
- putAppManifestKey(appManifest);
- findAndRegisterTypes(appManifest);
- specifyServicesAndRegisteredEntitiesUsing(appManifest);
-
- List<Class<? extends FixtureScript>> fixtureClasses = appManifest.getFixtures();
- fixtureClassNamesCsv = classNamesFrom(fixtureClasses);
-
- overrideConfigurationUsing(appManifest);
-
- this.services = createServices(configuration);
-
- } else {
- fixtureClassNamesCsv = classNamesFrom(fixturesOverride);
-
- this.services = elseDefault(servicesOverride, configuration);
- }
+ final String fixtureClassNamesCsv = classNamesFrom(
+ appManifestIfAny != null ? appManifestIfAny.getFixtures() : fixturesOverride);
putConfigurationProperty(FixturesInstallerFromConfiguration.FIXTURES, fixtureClassNamesCsv);
- this.fixturesInstaller = new FixturesInstallerFromConfiguration(configuration);
// integration tests ignore appManifest for authentication and authorization.
- this.authenticationManager = createAuthenticationManager(configuration);
- this.authorizationManager = createAuthorizationManager(configuration);
+ this.authenticationManager = createAuthenticationManager();
+ this.authorizationManager = createAuthorizationManager();
- this.programmingModel = elseDefault(programmingModelOverride, configuration);
+ this.programmingModel = elseDefault(programmingModelOverride);
this.metaModelValidator = elseDefault(metaModelValidatorOverride);
}
-
-
- //region > appManifest
-
- private List<Object> createServices(final IsisConfigurationDefault configuration) {
- final ServicesInstallerFromConfigurationAndAnnotation servicesInstaller =
- new ServicesInstallerFromConfigurationAndAnnotation(configuration);
- return servicesInstaller.getServices();
- }
-
-
- @Override
- protected void doPutConfigurationProperty(final String key, final String value) {
- // bit hacky :-(
- IsisConfigurationDefault configurationDefault = this.configuration;
- configurationDefault.put(key, value);
- }
-
- //endregion
-
/**
* Default will read <tt>isis.properties</tt> (and other optional property files) from the "config"
* package on the current classpath.
@@ -136,33 +95,19 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
: new IsisConfigurationDefault(ResourceStreamSourceContextLoaderClassPath.create("config"));
}
- private static List<Object> elseDefault(
- final List<Object> servicesOverride,
- final IsisConfigurationDefault configuration) {
- return servicesOverride != null
- ? servicesOverride
- : createDefaultServices(configuration);
- }
-
- private static List<Object> createDefaultServices(
- final IsisConfigurationDefault configuration) {
- final ServicesInstallerFromConfiguration servicesInstaller = new ServicesInstallerFromConfiguration( configuration);
- return servicesInstaller.getServices();
+ private ProgrammingModel elseDefault(final ProgrammingModel programmingModel) {
+ return programmingModel != null ? programmingModel : createDefaultProgrammingModel();
}
+ // TODO: this is duplicating logic in JavaReflectorInstaller; need to unify.
+ private ProgrammingModel createDefaultProgrammingModel() {
- private static ProgrammingModel elseDefault(final ProgrammingModel programmingModel, final IsisConfiguration configuration) {
- return programmingModel != null
- ? programmingModel
- : createDefaultProgrammingModel(configuration);
- }
-
- // TODO: this is duplicating logic in JavaReflectorInstallerNoDecorators; need to unify.
- private static ProgrammingModel createDefaultProgrammingModel(final IsisConfiguration configuration) {
final ProgrammingModelFacetsJava5 programmingModel = new ProgrammingModelFacetsJava5();
+ final IsisConfigurationDefault configuration = getConfiguration();
ProgrammingModel.Util.includeFacetFactories(configuration, programmingModel);
ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
+
return programmingModel;
}
@@ -173,58 +118,21 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
}
/**
- * The standard authentication manager, configured with the default authenticator (allows all requests through).
+ * The standard authentication manager, configured with the 'bypass' authenticator (allows all requests through).
*/
- private static AuthenticationManager createAuthenticationManager(final IsisConfiguration configuration) {
- final AuthenticationManagerStandard authenticationManager = new AuthenticationManagerStandard(configuration);
- Authenticator authenticator = new AuthenticatorBypass(configuration);
- authenticationManager.addAuthenticator(authenticator);
+ private AuthenticationManager createAuthenticationManager() {
+ final AuthenticationManagerStandard authenticationManager =
+ new AuthenticationManagerStandard(getConfiguration());
+ authenticationManager.addAuthenticator(new AuthenticatorBypass(getConfiguration()));
return authenticationManager;
}
- private static class AuthenticatorBypass extends AuthenticatorAbstract {
-
- public AuthenticatorBypass(final IsisConfiguration configuration) {
- super(configuration);
- }
-
- @Override
- public boolean isValid(final AuthenticationRequest request) {
- return true;
- }
-
- @Override
- public boolean canAuthenticate(final Class<? extends AuthenticationRequest> authenticationRequestClass) {
- return true;
- }
-
- }
-
-
- /**
- * The standard authorization manager, allowing all access.
- */
- private static AuthorizationManager createAuthorizationManager(final IsisConfiguration configuration) {
- return new AuthorizationManagerStandard(configuration);
+ private AuthorizationManager createAuthorizationManager() {
+ return new AuthorizationManagerStandard(getConfiguration());
}
@Override
- public DeploymentType getDeploymentType() {
- return deploymentType;
- }
-
- @Override
- public IsisConfigurationDefault getConfiguration() {
- return configuration;
- }
-
- @Override
- public FixturesInstaller provideFixturesInstaller() {
- return fixturesInstaller;
- }
-
- @Override
public SpecificationLoader provideSpecificationLoader(
final DeploymentType deploymentType,
final ServicesInjectorSpi servicesInjector,
@@ -244,26 +152,4 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
servicesInjector);
}
- @Override
- public AuthenticationManager provideAuthenticationManager(DeploymentType deploymentType) {
- return authenticationManager;
- }
-
- @Override
- public AuthorizationManager provideAuthorizationManager(DeploymentType deploymentType) {
- return authorizationManager;
- }
-
- @Override
- public PersistenceSessionFactory providePersistenceSessionFactory(
- DeploymentType deploymentType,
- final ServicesInjectorSpi servicesInjector,
- final SpecificationLoader specificationLoader) {
- DataNucleusPersistenceMechanismInstaller installer =
- new DataNucleusPersistenceMechanismInstaller(configuration);
- return installer.createPersistenceSessionFactory(
- deploymentType, servicesInjector
- );
- }
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
index dd8bb72..192750c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
@@ -19,112 +19,68 @@
package org.apache.isis.core.runtime.systemusinginstallers;
-import java.util.Collection;
import java.util.List;
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.commons.factory.InstanceUtil;
-import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoaderInstaller;
import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
-import org.apache.isis.core.runtime.installerregistry.installerapi.PersistenceMechanismInstaller;
import org.apache.isis.core.runtime.services.ServicesInstaller;
import org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.SystemConstants;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
-public class IsisComponentProviderUsingInstallers extends IsisComponentProviderAbstract {
+public class IsisComponentProviderUsingInstallers extends IsisComponentProvider {
- private final InstallerLookup installerLookup;
-
- private SpecificationLoaderInstaller reflectorInstaller;
- private PersistenceMechanismInstaller persistenceMechanismInstaller;
public IsisComponentProviderUsingInstallers(
final DeploymentType deploymentType,
final AppManifest appManifestIfAny,
final InstallerLookup installerLookup) {
- super(deploymentType, appManifestIfAny(appManifestIfAny, installerLookup));
-
- ensureThatArg(deploymentType, is(not(nullValue())));
- ensureThatArg(installerLookup, is(not(nullValue())));
-
- this.installerLookup = installerLookup;
-
- if(appManifest != null) {
+ super(deploymentType,
+ appManifestIfAny(appManifestIfAny, installerLookup),
+ configurationFrom(installerLookup));
- putAppManifestKey(appManifest);
- findAndRegisterTypes(appManifest);
- specifyServicesAndRegisteredEntitiesUsing(appManifest);
+ if(getAppManifestIfAny() != null) {
- putConfigurationProperty(SystemConstants.SERVICES_INSTALLER_KEY, ServicesInstallerFromConfigurationAndAnnotation.NAME);
-
- final String authenticationMechanism = appManifest.getAuthenticationMechanism();
+ final String authenticationMechanism = getAppManifestIfAny().getAuthenticationMechanism();
putConfigurationProperty(SystemConstants.AUTHENTICATION_INSTALLER_KEY, authenticationMechanism);
- final String authorizationMechanism = appManifest.getAuthorizationMechanism();
+ final String authorizationMechanism = getAppManifestIfAny().getAuthorizationMechanism();
putConfigurationProperty(SystemConstants.AUTHORIZATION_INSTALLER_KEY, authorizationMechanism);
+ }
- List<Class<? extends FixtureScript>> fixtureClasses = appManifest.getFixtures();
+ if(getAppManifestIfAny() != null) {
+ List<Class<? extends FixtureScript>> fixtureClasses = getAppManifestIfAny().getFixtures();
final String fixtureClassNamesCsv = classNamesFrom(fixtureClasses);
putConfigurationProperty(FixturesInstallerFromConfiguration.FIXTURES, fixtureClassNamesCsv);
-
- overrideConfigurationUsing(appManifest);
}
// loading installers causes the configuration to be appended to successively
- AuthenticationManagerInstaller authenticationInstaller = this.installerLookup.authenticationManagerInstaller(
- configProperty(SystemConstants.AUTHENTICATION_INSTALLER_KEY));
+ final String requestedAuthencn = getConfiguration().getString(SystemConstants.AUTHENTICATION_INSTALLER_KEY);
+ AuthenticationManagerInstaller authenticationInstaller =
+ installerLookup.authenticationManagerInstaller(requestedAuthencn);
- AuthorizationManagerInstaller authorizationInstaller = this.installerLookup.authorizationManagerInstaller(
- configProperty(SystemConstants.AUTHORIZATION_INSTALLER_KEY));
+ final String requestedAuthorzn = getConfiguration().getString(SystemConstants.AUTHORIZATION_INSTALLER_KEY);
+ AuthorizationManagerInstaller authorizationInstaller =
+ installerLookup.authorizationManagerInstaller(requestedAuthorzn);
- this.fixturesInstaller = this.installerLookup.fixturesInstaller(
- configProperty(SystemConstants.FIXTURES_INSTALLER_KEY));
-
- ServicesInstaller servicesInstaller = this.installerLookup.servicesInstaller(null);
-
- // although there is only one implementation of PersistenceMechanismInstaller, we still do the lookup
- // because this will add the persistor_datanucleus.properties and persistor.properties to the set of
- // config files from which we read configuration properties.
- persistenceMechanismInstaller = this.installerLookup.persistenceMechanismInstaller(
- configProperty(SystemConstants.OBJECT_PERSISTOR_INSTALLER_KEY)
- );
-
- reflectorInstaller = this.installerLookup.reflectorInstaller(
- configProperty(SystemConstants.REFLECTOR_KEY));
+ ServicesInstaller servicesInstaller = new ServicesInstallerFromConfigurationAndAnnotation(getConfiguration());
// ensure we were able to load all components via InstallerLookup (fail fast)
ensureThatState(authenticationInstaller, is(not(nullValue())),
"authenticationInstaller could not be looked up");
ensureThatState(authorizationInstaller, is(not(nullValue())),
"authorizationInstaller could not be looked up");
- ensureThatState(servicesInstaller, is(not(nullValue())),
- "servicesInstaller could not be looked up");
- ensureThatState(fixturesInstaller, is(not(nullValue())),
- "fixtureInstaller could not be looked up");
- ensureThatState(persistenceMechanismInstaller, is(not(nullValue())),
- "persistenceMechanismInstaller could not be looked up");
- ensureThatState(reflectorInstaller, is(not(nullValue())),
- "reflectorInstaller could not be looked up");
-
-
- // capture the final configuration once all components have been loaded
- configuration = this.installerLookup.getConfiguration();
// eagerly calculate
authenticationManager = authenticationInstaller.createAuthenticationManager();
@@ -146,48 +102,23 @@ public class IsisComponentProviderUsingInstallers extends IsisComponentProviderA
if(appManifestFromConstructor != null) {
return appManifestFromConstructor;
}
- final String appManifestFromConfiguration = installerLookup.getConfiguration().getString(SystemConstants.APP_MANIFEST_KEY);
- return appManifestFromConfiguration != null? InstanceUtil.createInstance(appManifestFromConfiguration, AppManifest.class): null;
+ final IsisConfigurationDefault configuration = configurationFrom(installerLookup);
+ final String appManifestFromConfiguration = configuration.getString(SystemConstants.APP_MANIFEST_KEY);
+ return appManifestFromConfiguration != null
+ ? InstanceUtil.createInstance(appManifestFromConfiguration, AppManifest.class)
+ : null;
}
- protected void doPutConfigurationProperty(final String key, final String value) {
- IsisConfigurationDefault configuration = (IsisConfigurationDefault) this.installerLookup.getConfiguration();
- configuration.put(key, value);
- }
- //endregion
-
-
-
- @Override
- public SpecificationLoader provideSpecificationLoader(
- final DeploymentType deploymentType,
- final ServicesInjectorSpi servicesInjector,
- final Collection<MetaModelRefiner> metaModelRefiners) {
- return reflectorInstaller.createReflector(deploymentType.getDeploymentCategory(), metaModelRefiners,
- servicesInjector);
- }
+ //endregion
- @Override
- public PersistenceSessionFactory providePersistenceSessionFactory(
- final DeploymentType deploymentType,
- final ServicesInjectorSpi servicesInjector,
- final SpecificationLoader specificationLoader) {
- return persistenceMechanismInstaller.createPersistenceSessionFactory(
- deploymentType,
- servicesInjector);
- }
//region > helpers
- /**
- * Returns the current value of the configuration property.
- *
- * Note that this may change over time as new installers are loaded (= new config property files).
- */
- private String configProperty(final String key) {
- return this.installerLookup.getConfiguration().getString(key);
+ private static IsisConfigurationDefault configurationFrom(final InstallerLookup installerLookup) {
+ return installerLookup.getConfiguration();
}
+
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/b6dc190b/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties b/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
index 7ee6aef..7f9efeb 100644
--- a/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
+++ b/core/runtime/src/main/resources/org/apache/isis/core/runtime/installer-registry.properties
@@ -16,8 +16,6 @@
# under the License.
-# ObjectReflectorInstaller
-org.apache.isis.progmodels.dflt.JavaReflectorInstaller # "java"
# AuthenticationManagerInstaller
org.apache.isis.core.security.authentication.BypassAuthenticationManagerInstaller # "bypass"
@@ -27,14 +25,4 @@ org.apache.isis.security.shiro.authentication.ShiroAuthenticationManagerInstalle
org.apache.isis.core.security.authorization.BypassAuthorizationManagerInstaller # "bypass"
org.apache.isis.security.shiro.authorization.ShiroAuthorizationManagerInstaller # "shiro"
-# FixturesInstaller
-org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration # "configuration"
-
-# ServicesInstaller
-org.apache.isis.core.runtime.services.ServicesInstallerFromConfiguration # "configuration"
-org.apache.isis.core.runtime.services.ServicesInstallerFromAnnotation # "annotation"
-org.apache.isis.core.runtime.services.ServicesInstallerFromConfigurationAndAnnotation # "configuration-and-annotation"
-
-# PersistenceMechanismInstaller
-org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller # datanucleus