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/28 17:16:54 UTC

[51/56] [abbrv] ISIS-938: mothball isis-core-bytecode-cglib and isis-core-bytecode-javassist. Minor changes in PersistenceMechanismInstallerAbstract to remove vestigial dependency on same.

http://git-wip-us.apache.org/repos/asf/isis/blob/20d2d9bc/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java
----------------------------------------------------------------------
diff --git a/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java b/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java
new file mode 100644
index 0000000..b1103b0
--- /dev/null
+++ b/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java
@@ -0,0 +1,113 @@
+/*
+ *  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.bytecode.javassist;
+
+import java.lang.reflect.Method;
+
+import javassist.util.proxy.MethodFilter;
+import javassist.util.proxy.MethodHandler;
+import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyObject;
+
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.lang.ArrayExtensions;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacetUtils;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
+import org.apache.isis.core.runtime.bytecode.ObjectResolveAndObjectChangedEnhancerAbstract;
+import org.apache.isis.core.runtime.persistence.objectfactory.ObjectChanger;
+import org.apache.isis.core.runtime.persistence.objectfactory.ObjectResolver;
+
+public class ObjectResolveAndObjectChangedEnhancer extends ObjectResolveAndObjectChangedEnhancerAbstract {
+
+    private MethodHandler methodHandler;
+
+    public ObjectResolveAndObjectChangedEnhancer(final ObjectResolver objectResolver, final ObjectChanger objectChanger, final SpecificationLoaderSpi specificationLoader) {
+        super(objectResolver, objectChanger, specificationLoader);
+
+        createCallback();
+    }
+
+    @Override
+    protected void createCallback() {
+        this.methodHandler = new MethodHandler() {
+            @Override
+            public Object invoke(final Object proxied, final Method proxyMethod, final Method proxiedMethod, final Object[] args) throws Throwable {
+
+                final boolean ignore = proxyMethod.getDeclaringClass().equals(Object.class);
+                ImperativeFacet.Flags flags = null;
+
+                if (!ignore) {
+                    final ObjectSpecificationDefault targetObjSpec = getJavaSpecificationOfOwningClass(proxiedMethod);
+
+                    final ObjectMember member = targetObjSpec.getMember(proxiedMethod);
+                    flags = ImperativeFacetUtils.getImperativeFacetFlags(member, proxiedMethod);
+
+                    if (flags.impliesResolve()) {
+                        objectResolver.resolve(proxied, member.getName());
+                    }
+                }
+
+                final Object proxiedReturn = proxiedMethod.invoke(proxied, args); // execute
+                                                                                  // the
+                                                                                  // original
+                                                                                  // method.
+
+                if (!ignore && flags.impliesObjectChanged()) {
+                    objectChanger.objectChanged(proxied);
+                }
+
+                return proxiedReturn;
+            }
+        };
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T> T newInstance(final Class<T> cls) {
+
+        final ProxyFactory proxyFactory = new ProxyFactory();
+        proxyFactory.setSuperclass(cls);
+        proxyFactory.setInterfaces(ArrayExtensions.combine(cls.getInterfaces(), new Class<?>[] { JavassistEnhanced.class }));
+
+        proxyFactory.setFilter(new MethodFilter() {
+            @Override
+            public boolean isHandled(final Method m) {
+                // ignore finalize()
+                return !m.getName().equals("finalize");
+            }
+        });
+
+        final Class<T> proxySubclass = proxyFactory.createClass();
+        try {
+            final T newInstance = proxySubclass.newInstance();
+            final ProxyObject proxyObject = (ProxyObject) newInstance;
+            proxyObject.setHandler(methodHandler);
+
+            return newInstance;
+        } catch (final InstantiationException e) {
+            throw new IsisException(e);
+        } catch (final IllegalAccessException e) {
+            throw new IsisException(e);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/20d2d9bc/tck/tck-viewer-wicket/pom.xml
----------------------------------------------------------------------
diff --git a/tck/tck-viewer-wicket/pom.xml b/tck/tck-viewer-wicket/pom.xml
index 524f3ac..32125b5 100644
--- a/tck/tck-viewer-wicket/pom.xml
+++ b/tck/tck-viewer-wicket/pom.xml
@@ -65,33 +65,29 @@
       </plugins>
 	</build>
 
-	<dependencies>
-	
-		<!-- other modules in this project -->
-		<dependency>
+    <dependencies>
+
+        <!-- other modules in this project -->
+        <dependency>
             <groupId>org.apache.isis.tck</groupId>
-			<artifactId>isis-tck-dom</artifactId>
-		</dependency>
-        
+            <artifactId>isis-tck-dom</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.isis.tck</groupId>
             <artifactId>isis-tck-fixture</artifactId>
         </dependency>
 
         <!-- isis viewer -->
-		<dependency>
-			<groupId>org.apache.isis.viewer</groupId>
-			<artifactId>isis-viewer-wicket-impl</artifactId>
+        <dependency>
+            <groupId>org.apache.isis.viewer</groupId>
+            <artifactId>isis-viewer-wicket-impl</artifactId>
             <version>${isis-viewer-wicket.version}</version>
-		</dependency>
+        </dependency>
 
         <!-- isis runtime -->
         <dependency>
             <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-bytecode-cglib</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-objectstore</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/isis/blob/20d2d9bc/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties b/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
index b6f34f0..a6b56f5 100644
--- a/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
+++ b/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
@@ -34,9 +34,6 @@ isis.fixtures=\
     assocs.ParentAndChildEntityFixture
 
 
-isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor
-#isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.javassist.classsubstitutor.JavassistClassSubstitutor
-#isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.identity.classsubstitutor.ClassSubstitutorIdentity
 
 isis.persistor.object-factory=org.apache.isis.runtimes.dflt.bytecode.dflt.objectfactory.CglibObjectFactory
 #isis.persistor.object-factory=org.apache.isis.runtimes.dflt.bytecode.javassist.objectfactory.JavassistObjectFactory