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 2013/03/07 21:46:30 UTC
[1/3] git commit: ISIS-356: injectXxx for injecting services.
ISIS-356: injectXxx for injecting services.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/1c11f87f
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/1c11f87f
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/1c11f87f
Branch: refs/heads/master
Commit: 1c11f87fb7dd800bdb79500c5ab620156ab1a970
Parents: db62664
Author: Dan Haywood <da...@apache.org>
Authored: Thu Mar 7 17:33:04 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Thu Mar 7 17:33:04 2013 +0000
----------------------------------------------------------------------
component/viewer/restfulobjects/pom.xml | 1 -
.../runtimecontext/RuntimeContextAbstract.java | 5 ++
.../metamodel/runtimecontext/ServicesInjector.java | 8 +++
.../noruntime/RuntimeContextNoRuntime.java | 5 ++
.../services/ServicesInjectorDefault.java | 33 ++++++----
.../metamodel/services/ServicesInjectorSpi.java | 7 --
.../core/metamodel/spec/SpecificationLoader.java | 1 +
.../spec/SpecificationLoaderDelegator.java | 10 +++
.../javalang/RemoveInjectMethodsFacetFactory.java | 47 +++++++++++++++
.../dflt/ProgrammingModelFacetsJava5.java | 2 +
.../progmodel/facets/ProgrammableReflector.java | 5 ++
.../internal/RuntimeContextFromSession.java | 5 ++
.../dom/src/main/java/dom/todo/ToDoItem.java | 2 +-
13 files changed, 109 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/component/viewer/restfulobjects/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/pom.xml b/component/viewer/restfulobjects/pom.xml
index 93d7744..ca63a9c 100644
--- a/component/viewer/restfulobjects/pom.xml
+++ b/component/viewer/restfulobjects/pom.xml
@@ -159,7 +159,6 @@
<modules>
<module>applib</module>
- <module>jaxrs</module>
<module>rendering</module>
<module>server</module>
<module>tck</module>
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
index a5f31a2..0b9958a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
@@ -137,6 +137,11 @@ public abstract class RuntimeContextAbstract implements RuntimeContext, Specific
public ObjectSpecification introspectIfRequired(ObjectSpecification spec) {
return specificationLoader.introspectIfRequired(spec);
}
+
+ @Override
+ public List<Class<?>> getServiceClasses() {
+ return specificationLoader.getServiceClasses();
+ }
});
}
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
index bd17f9e..9af283f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
@@ -25,6 +25,14 @@ import org.apache.isis.core.commons.components.Injectable;
public interface ServicesInjector extends Injectable {
/**
+ * All registered services, as an immutable {@link List}.
+ *
+ * <p>
+ * Does not include the {@link #getContainer() container}.
+ */
+ List<Object> getRegisteredServices();
+
+ /**
* Provided by the <tt>ServicesInjectorDefault</tt> when used by framework.
*
* <p>
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index da87335..e979460 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -98,6 +98,11 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
public <T> List<T> lookupServices(Class<T> serviceClass) {
return null;
}
+
+ @Override
+ public List<Object> getRegisteredServices() {
+ return null;
+ }
};
authenticationSessionProvider = new AuthenticationSessionProviderAbstract() {
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
index eb28818..706c5fb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
@@ -27,6 +27,7 @@ import static org.hamcrest.CoreMatchers.nullValue;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -169,23 +170,29 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi {
private static void injectServices(final Object object, final List<Object> services) {
final Class<?> cls = object.getClass();
- for (final Object service : services) {
- final Class<?> serviceClass = service.getClass();
- final Method[] methods = cls.getMethods();
- for (int j = 0; j < methods.length; j++) {
- if (!methods[j].getName().startsWith("set")) {
- continue;
- }
- final Class<?>[] parameterTypes = methods[j].getParameterTypes();
- if (parameterTypes.length != 1 || parameterTypes[0] == Object.class || !parameterTypes[0].isAssignableFrom(serviceClass)) {
- continue;
+ final Method[] methods = cls.getMethods();
+
+ for (int j = 0; j < methods.length; j++) {
+ for (final Object service : services) {
+ final Class<?> serviceClass = service.getClass();
+ boolean isInjectorMethod = isInjectorMethodFor(methods[j], serviceClass);
+ if(isInjectorMethod) {
+ methods[j].setAccessible(true);
+ invokeSetMethod(methods[j], object, service);
}
+ }
+ }
+ }
- methods[j].setAccessible(true);
-
- invokeSetMethod(methods[j], object, service);
+ public static boolean isInjectorMethodFor(Method method, final Class<?> serviceClass) {
+ final String methodName = method.getName();
+ if (methodName.startsWith("set") || methodName.startsWith("inject")) {
+ final Class<?>[] parameterTypes = method.getParameterTypes();
+ if (parameterTypes.length == 1 && parameterTypes[0] != Object.class && parameterTypes[0].isAssignableFrom(serviceClass)) {
+ return true;
}
}
+ return false;
}
private static void invokeMethod(final Method method, final Object target, final Object[] parameters) {
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
index e598a2d..1dbfde9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
@@ -69,13 +69,6 @@ public interface ServicesInjectorSpi extends ApplicationScopedComponent, Injecta
*/
void setServices(List<Object> services);
- /**
- * All registered services, as an immutable {@link List}.
- *
- * <p>
- * Does not include the {@link #getContainer() container}.
- */
- List<Object> getRegisteredServices();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoader.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoader.java
index 3e164c7..737b1c0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoader.java
@@ -66,6 +66,7 @@ public interface SpecificationLoader extends Injectable {
Collection<ObjectSpecification> allSpecifications();
+ List<Class<?>> getServiceClasses();
/**
* Whether this class has been loaded.
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderDelegator.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderDelegator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderDelegator.java
index 49f336f..89b89c8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderDelegator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderDelegator.java
@@ -81,6 +81,13 @@ public class SpecificationLoaderDelegator extends SpecificationLoaderAbstract {
return specificationLoaderDelegate.introspectIfRequired(spec);
}
+
+ @Override
+ public List<Class<?>> getServiceClasses() {
+ return specificationLoaderDelegate.getServiceClasses();
+ }
+
+
@Override
public void injectInto(Object candidate) {
super.injectInto(candidate);
@@ -92,4 +99,7 @@ public class SpecificationLoaderDelegator extends SpecificationLoaderAbstract {
+
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java
new file mode 100644
index 0000000..d91f9f5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java
@@ -0,0 +1,47 @@
+/*
+ * 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.progmodel.facets.object.ignore.javalang;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
+
+public class RemoveInjectMethodsFacetFactory extends FacetFactoryAbstract {
+
+ public RemoveInjectMethodsFacetFactory() {
+ super(FeatureType.OBJECTS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessClassContext processClassContext) {
+ for (Class<? extends Object> serviceClass : getSpecificationLoader().getServiceClasses()) {
+ Method[] methods = processClassContext.getCls().getMethods();
+ for (Method method : methods) {
+ if(ServicesInjectorDefault.isInjectorMethodFor(method, serviceClass)) {
+ processClassContext.removeMethod(method);
+ }
+ }
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 71af1c1..cded2ec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -87,6 +87,7 @@ import org.apache.isis.core.progmodel.facets.object.ignore.isis.RemoveStaticGett
import org.apache.isis.core.progmodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory;
import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveGetClassMethodFacetFactory;
import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveInitMethodFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveInjectMethodsFacetFactory;
import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveJavaLangComparableMethodsFacetFactory;
import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveJavaLangObjectMethodsFacetFactory;
import org.apache.isis.core.progmodel.facets.object.ignore.javalang.RemoveSuperclassMethodsFacetFactory;
@@ -213,6 +214,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(RemoveJavaLangComparableMethodsFacetFactory.class);
addFactory(RemoveSetDomainObjectContainerMethodFacetFactory.class);
addFactory(RemoveInitMethodFacetFactory.class);
+ addFactory(RemoveInjectMethodsFacetFactory.class);
addFactory(RemoveStaticGettersAndSettersFacetFactory.class);
addFactory(RemoveGetClassMethodFacetFactory.class);
addFactory(RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java
index 549b7f8..db35953 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ProgrammableReflector.java
@@ -141,4 +141,9 @@ public class ProgrammableReflector implements SpecificationLoaderSpi, Applicatio
throw new NotYetImplementedException();
}
+ @Override
+ public List<Class<?>> getServiceClasses() {
+ throw new NotYetImplementedException();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index b05085d..2f58181 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -292,6 +292,11 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
}
}
+ @Override
+ public List<Object> getRegisteredServices() {
+ return getPersistenceSession().getServicesInjector().getRegisteredServices();
+ }
+
};
this.localizationProvider = new LocalizationProviderAbstract() {
http://git-wip-us.apache.org/repos/asf/isis/blob/1c11f87f/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
index 069dc1a..6a26ea9 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
@@ -476,7 +476,7 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
// {{ injected: ToDoItems
private ToDoItems toDoItems;
- public void setToDoItems(final ToDoItems toDoItems) {
+ public void injectToDoItems(final ToDoItems toDoItems) {
this.toDoItems = toDoItems;
}
// }}