You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/07/31 04:47:31 UTC
[12/51] [abbrv] [partial] zest-java git commit: Revert "First round
of changes to move to org.apache.zest namespace."
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/SynchronizedCompositeMethodInstancePool.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SynchronizedCompositeMethodInstancePool.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/SynchronizedCompositeMethodInstancePool.java
deleted file mode 100644
index 2efa326..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SynchronizedCompositeMethodInstancePool.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-/**
- * Method instance pool that keeps a linked list. Uses synchronization
- * to ensure that instances are acquired and returned in a thread-safe
- * manner.
- */
-public final class SynchronizedCompositeMethodInstancePool
- implements InstancePool<CompositeMethodInstance>
-{
- private CompositeMethodInstance first = null;
-
- @Override
- public synchronized CompositeMethodInstance obtainInstance()
- {
- CompositeMethodInstance instance = first;
- if( instance != null )
- {
- first = instance.getNext();
- }
- return instance;
- }
-
- @Override
- public synchronized void releaseInstance( CompositeMethodInstance instance )
- {
- instance.setNext( first );
- first = instance;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java
deleted file mode 100644
index e834262..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import org.apache.zest.api.common.ConstructionException;
-import org.apache.zest.api.composite.CompositeInstance;
-import org.apache.zest.api.composite.TransientBuilder;
-import org.apache.zest.api.property.PropertyDescriptor;
-import org.apache.zest.runtime.property.PropertyInfo;
-import org.apache.zest.runtime.property.PropertyInstance;
-import org.apache.zest.spi.module.ModelModule;
-
-/**
- * JAVADOC
- */
-public final class TransientBuilderInstance<T>
- implements TransientBuilder<T>
-{
- private ModelModule<TransientModel> model;
-
- // lazy initialized in accessor
- private UsesInstance uses = UsesInstance.EMPTY_USES;
-
- // lazy initialized in accessor
- private CompositeInstance prototypeInstance;
-
- private TransientStateInstance state;
-
- public TransientBuilderInstance( ModelModule<TransientModel> model,
- TransientStateInstance state,
- UsesInstance uses
- )
- {
- this.model = model;
- this.state = state;
- this.uses = uses;
- }
-
- @Override
- public TransientBuilder<T> use( Object... usedObjects )
- {
- uses = uses.use( usedObjects );
- return this;
- }
-
- @Override
- public T prototype()
- {
- // Instantiate given value type
- if( prototypeInstance == null )
- {
- prototypeInstance = model.model().newInstance( model.module(), uses, state );
- }
-
- return prototypeInstance.<T>proxy();
- }
-
- @Override
- public <K> K prototypeFor( Class<K> mixinType )
- {
- // Instantiate given value type
- if( prototypeInstance == null )
- {
- prototypeInstance = model.model().newInstance( model.module(), uses, state );
- }
-
- return prototypeInstance.newProxy( mixinType );
- }
-
- @Override
- public T newInstance()
- throws ConstructionException
- {
- // Set correct info's (immutable) on the state
- for( PropertyDescriptor propertyDescriptor : model.model().state().properties() )
- {
- ( (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() ) ).setPropertyInfo( (PropertyInfo) propertyDescriptor );
- }
-
- model.model().checkConstraints( state );
-
- CompositeInstance compositeInstance =
- model.model().newInstance( model.module(), uses, state );
- return compositeInstance.<T>proxy();
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java
deleted file mode 100644
index fc38920..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
- * Copyright (c) 2010, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.List;
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.apache.zest.api.entity.Lifecycle;
-import org.apache.zest.api.mixin.Initializable;
-import org.apache.zest.api.util.Classes;
-import org.apache.zest.api.util.Methods;
-import org.apache.zest.functional.Iterables;
-
-import static org.objectweb.asm.Opcodes.AASTORE;
-import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
-import static org.objectweb.asm.Opcodes.ACC_STATIC;
-import static org.objectweb.asm.Opcodes.ACC_SUPER;
-import static org.objectweb.asm.Opcodes.ACONST_NULL;
-import static org.objectweb.asm.Opcodes.ALOAD;
-import static org.objectweb.asm.Opcodes.ANEWARRAY;
-import static org.objectweb.asm.Opcodes.ARETURN;
-import static org.objectweb.asm.Opcodes.ASTORE;
-import static org.objectweb.asm.Opcodes.ATHROW;
-import static org.objectweb.asm.Opcodes.BIPUSH;
-import static org.objectweb.asm.Opcodes.CHECKCAST;
-import static org.objectweb.asm.Opcodes.DLOAD;
-import static org.objectweb.asm.Opcodes.DRETURN;
-import static org.objectweb.asm.Opcodes.DUP;
-import static org.objectweb.asm.Opcodes.FLOAD;
-import static org.objectweb.asm.Opcodes.FRETURN;
-import static org.objectweb.asm.Opcodes.GETFIELD;
-import static org.objectweb.asm.Opcodes.GETSTATIC;
-import static org.objectweb.asm.Opcodes.GOTO;
-import static org.objectweb.asm.Opcodes.ICONST_0;
-import static org.objectweb.asm.Opcodes.ICONST_1;
-import static org.objectweb.asm.Opcodes.ICONST_2;
-import static org.objectweb.asm.Opcodes.ICONST_3;
-import static org.objectweb.asm.Opcodes.ICONST_4;
-import static org.objectweb.asm.Opcodes.ICONST_5;
-import static org.objectweb.asm.Opcodes.ILOAD;
-import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;
-import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
-import static org.objectweb.asm.Opcodes.INVOKESTATIC;
-import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
-import static org.objectweb.asm.Opcodes.IRETURN;
-import static org.objectweb.asm.Opcodes.LLOAD;
-import static org.objectweb.asm.Opcodes.LRETURN;
-import static org.objectweb.asm.Opcodes.POP;
-import static org.objectweb.asm.Opcodes.PUTSTATIC;
-import static org.objectweb.asm.Opcodes.RETURN;
-import static org.objectweb.asm.Type.getInternalName;
-import static org.apache.zest.api.util.Classes.interfacesOf;
-
-/**
- * Generate subclasses of classes used for transients. All methods delegate to CompositeInvoker.
- */
-@SuppressWarnings( "raw" )
-/* package */ final class TransientClassLoader
- extends ClassLoader
-{
- private static final int JDK_VERSION;
- public static final String GENERATED_POSTFIX = "_Proxy";
-
- static
- {
- String jdkString = System.getProperty( "java.specification.version" );
- switch( jdkString )
- {
- case "1.8":
- JDK_VERSION = Opcodes.V1_8;
- break;
- case "1.7":
- default:
- JDK_VERSION = Opcodes.V1_7;
- break;
- }
- }
-
- /* package */ TransientClassLoader( ClassLoader parent )
- {
- super( parent );
- }
-
- @Override
- protected Class findClass( String name )
- throws ClassNotFoundException
- {
- if( name.endsWith( GENERATED_POSTFIX ) )
- {
- Class baseClass;
- String baseName = name.substring( 0, name.length() - 6 );
- try
- {
- baseClass = loadClass( baseName );
- }
- catch( ClassNotFoundException e )
- {
- // Try replacing the last _ with $
- while( true )
- {
- int idx = baseName.lastIndexOf( "_" );
- if( idx != -1 )
- {
- baseName = baseName.substring( 0, idx ) + "$" + baseName.substring( idx + 1 );
- try
- {
- baseClass = loadClass( baseName );
- break;
- }
- catch( ClassNotFoundException e1 )
- {
- // Try again
- }
- }
- else
- {
- throw e;
- }
- }
- }
-
- byte[] b = generateClass( name, baseClass );
- return defineClass( name, b, 0, b.length, baseClass.getProtectionDomain() );
- }
-
- // Try the classloader of this classloader -> get classes in Zest such as CompositeInvoker
- return getClass().getClassLoader().loadClass( name );
- }
-
- public static byte[] generateClass( String name, Class baseClass )
- throws ClassNotFoundException
- {
- String classSlash = name.replace( '.', '/' );
- String baseClassSlash = getInternalName( baseClass );
-
- ClassWriter cw = new ClassWriter( ClassWriter.COMPUTE_MAXS );
- FieldVisitor fv;
- MethodVisitor mv;
- AnnotationVisitor av0;
-
- // Class definition start
- cw.visit( JDK_VERSION, ACC_PUBLIC + ACC_SUPER, classSlash, null, baseClassSlash, null );
-
- // Composite reference
- {
- fv = cw.visitField( ACC_PUBLIC, "_instance", "Lorg/qi4j/api/composite/CompositeInvoker;", null, null );
- fv.visitEnd();
- }
-
- // Static Method references
- {
- int idx = 1;
- for( Method method : baseClass.getMethods() )
- {
- if( isOverloaded( method, baseClass ) )
- {
- fv = cw.visitField( ACC_PRIVATE + ACC_STATIC, "m" + idx++, "Ljava/lang/reflect/Method;", null,
- null );
- fv.visitEnd();
- }
- }
- }
-
- // Constructors
- for( Constructor constructor : baseClass.getDeclaredConstructors() )
- {
- if( Modifier.isPublic( constructor.getModifiers() ) || Modifier.isProtected( constructor.getModifiers() ) )
- {
- String desc = org.objectweb.asm.commons.Method.getMethod( constructor ).getDescriptor();
- mv = cw.visitMethod( ACC_PUBLIC, "<init>", desc, null, null );
- mv.visitCode();
- mv.visitVarInsn( ALOAD, 0 );
-
- int idx = 1;
- for( Class aClass : constructor.getParameterTypes() )
- {
- // TODO Handle other types than objects (?)
- mv.visitVarInsn( ALOAD, idx++ );
- }
-
- mv.visitMethodInsn( INVOKESPECIAL, baseClassSlash, "<init>", desc, false );
- mv.visitInsn( RETURN );
- mv.visitMaxs( idx, idx );
- mv.visitEnd();
- }
- }
-
- // Overloaded and unimplemented methods
- Method[] methods = baseClass.getMethods();
- int idx = 0;
- List<Label> exceptionLabels = new ArrayList<>();
- for( Method method : methods )
- {
- if( isOverloaded( method, baseClass ) )
- {
- idx++;
- String methodName = method.getName();
- String desc = org.objectweb.asm.commons.Method.getMethod( method ).getDescriptor();
-
- String[] exceptions = null;
- {
- mv = cw.visitMethod( ACC_PUBLIC, methodName, desc, null, exceptions );
- if( isInternalQi4jMethod( method, baseClass ) )
- {
- // generate a NoOp method...
- mv.visitInsn( RETURN );
- }
- else
- {
- Label endLabel = null; // Use this if return type is void
- if( method.getExceptionTypes().length > 0 )
- {
- exceptions = new String[ method.getExceptionTypes().length ];
- for( int i = 0; i < method.getExceptionTypes().length; i++ )
- {
- Class<?> aClass = method.getExceptionTypes()[ i ];
- exceptions[ i ] = getInternalName( aClass );
- }
- }
- mv.visitCode();
- Label l0 = new Label();
- Label l1 = new Label();
-
- exceptionLabels.clear();
- for( Class<?> declaredException : method.getExceptionTypes() )
- {
- Label ld = new Label();
- mv.visitTryCatchBlock( l0, l1, ld, getInternalName( declaredException ) );
- exceptionLabels.add( ld ); // Reuse this further down for the catch
- }
-
- Label lruntime = new Label();
- mv.visitTryCatchBlock( l0, l1, lruntime, "java/lang/RuntimeException" );
- Label lerror = new Label();
- mv.visitTryCatchBlock( l0, l1, lerror, "java/lang/Throwable" );
-
- mv.visitLabel( l0 );
- mv.visitVarInsn( ALOAD, 0 );
- mv.visitFieldInsn( GETFIELD, classSlash, "_instance",
- "Lorg/qi4j/api/composite/CompositeInvoker;" );
- mv.visitFieldInsn( GETSTATIC, classSlash, "m" + idx, "Ljava/lang/reflect/Method;" );
-
- int paramCount = method.getParameterTypes().length;
- int stackIdx = 0;
- if( paramCount == 0 )
- {
- // Send in null as parameter
- mv.visitInsn( ACONST_NULL );
- }
- else
- {
- insn( mv, paramCount );
- mv.visitTypeInsn( ANEWARRAY, "java/lang/Object" );
- int pidx = 0;
- for( Class<?> aClass : method.getParameterTypes() )
- {
- mv.visitInsn( DUP );
- insn( mv, pidx++ );
- stackIdx = wrapParameter( mv, aClass, stackIdx + 1 );
- mv.visitInsn( AASTORE );
- }
- }
-
- // Call method
- mv.visitMethodInsn( INVOKEINTERFACE, "org/qi4j/api/composite/CompositeInvoker",
- "invokeComposite",
- "(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;", true );
-
- // Return value
- if( !method.getReturnType().equals( Void.TYPE ) )
- {
- unwrapResult( mv, method.getReturnType(), l1 );
- }
- else
- {
- mv.visitInsn( POP );
- mv.visitLabel( l1 );
- endLabel = new Label();
- mv.visitJumpInsn( GOTO, endLabel );
- }
-
- // Increase stack to beyond method args
- stackIdx++;
-
- // Declared exceptions
- int exceptionIdx = 0;
- for( Class<?> aClass : method.getExceptionTypes() )
- {
- mv.visitLabel( exceptionLabels.get( exceptionIdx++ ) );
- mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ getInternalName( aClass ) } );
- mv.visitVarInsn( ASTORE, stackIdx );
- mv.visitVarInsn( ALOAD, stackIdx );
- mv.visitInsn( ATHROW );
- }
-
- // RuntimeException and Error catch-all
- mv.visitLabel( lruntime );
- mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ "java/lang/RuntimeException" } );
- mv.visitVarInsn( ASTORE, stackIdx );
- mv.visitVarInsn( ALOAD, stackIdx );
- mv.visitInsn( ATHROW );
-
- mv.visitLabel( lerror );
- mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ "java/lang/Throwable" } );
- mv.visitVarInsn( ASTORE, stackIdx );
- mv.visitVarInsn( ALOAD, stackIdx );
- mv.visitTypeInsn( CHECKCAST, "java/lang/Error" );
- mv.visitInsn( ATHROW );
-
- // Return type = void
- if( endLabel != null )
- {
- mv.visitLabel( endLabel );
- mv.visitFrame( Opcodes.F_SAME, 0, null, 0, null );
- mv.visitInsn( RETURN );
- }
-
- mv.visitMaxs( 0, 0 );
- mv.visitEnd();
- }
- }
-
- if( !Modifier.isAbstract( method.getModifiers() ) )
- {
- // Add method with _ as prefix
- mv = cw.visitMethod( ACC_PUBLIC, "_" + method.getName(), desc, null, exceptions );
- mv.visitCode();
- mv.visitVarInsn( ALOAD, 0 );
-
- // Parameters
- int stackIdx = 1;
- for( Class<?> aClass : method.getParameterTypes() )
- {
- stackIdx = loadParameter( mv, aClass, stackIdx ) + 1;
- }
-
- // Call method
- mv.visitMethodInsn( INVOKESPECIAL, baseClassSlash, method.getName(), desc, false );
-
- // Return value
- if( !method.getReturnType().equals( Void.TYPE ) )
- {
- returnResult( mv, method.getReturnType() );
- }
- else
- {
- mv.visitInsn( RETURN );
- }
-
- mv.visitMaxs( 1, 1 );
- mv.visitEnd();
- }
- }
- }
-
- // Class initializer
- {
- mv = cw.visitMethod( ACC_STATIC, "<clinit>", "()V", null, null );
- mv.visitCode();
- Label l0 = new Label();
- Label l1 = new Label();
- Label l2 = new Label();
- mv.visitTryCatchBlock( l0, l1, l2, "java/lang/NoSuchMethodException" );
- mv.visitLabel( l0 );
-
- // Lookup methods and store in static variables
- int midx = 0;
- for( Method method : methods )
- {
- if( isOverloaded( method, baseClass ) )
- {
- method.setAccessible( true );
- Class methodClass;
- methodClass = method.getDeclaringClass();
-
- midx++;
-
- mv.visitLdcInsn( Type.getType( methodClass ) );
- mv.visitLdcInsn( method.getName() );
- insn( mv, method.getParameterTypes().length );
- mv.visitTypeInsn( ANEWARRAY, "java/lang/Class" );
-
- int pidx = 0;
- for( Class<?> aClass : method.getParameterTypes() )
- {
- mv.visitInsn( DUP );
- insn( mv, pidx++ );
- type( mv, aClass );
- mv.visitInsn( AASTORE );
- }
-
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Class", "getMethod",
- "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;", false );
- mv.visitFieldInsn( PUTSTATIC, classSlash, "m" + midx, "Ljava/lang/reflect/Method;" );
- }
- }
-
- mv.visitLabel( l1 );
- Label l3 = new Label();
- mv.visitJumpInsn( GOTO, l3 );
- mv.visitLabel( l2 );
- mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ "java/lang/NoSuchMethodException" } );
- mv.visitVarInsn( ASTORE, 0 );
- mv.visitVarInsn( ALOAD, 0 );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/NoSuchMethodException", "printStackTrace", "()V", false );
- mv.visitLabel( l3 );
- mv.visitFrame( Opcodes.F_SAME, 0, null, 0, null );
- mv.visitInsn( RETURN );
- mv.visitMaxs( 6, 1 );
- mv.visitEnd();
- }
-
- cw.visitEnd();
-
- return cw.toByteArray();
- }
-
- private static boolean isOverloaded( Method method, Class baseClass )
- {
- if( Modifier.isFinal( method.getModifiers() ) )
- {
- return false; // Cannot override final methods
- }
- else
- {
- return true;
- }
- }
-
- private static boolean isInternalQi4jMethod( Method method, Class baseClass )
- {
- return isDeclaredIn( method, Initializable.class, baseClass )
- || isDeclaredIn( method, Lifecycle.class, baseClass );
- }
-
- private static boolean isDeclaredIn( Method method, Class<?> clazz, Class<?> baseClass )
- {
- if( !clazz.isAssignableFrom( baseClass ) )
- {
- return false;
- }
-
- try
- {
- clazz.getMethod( method.getName(), method.getParameterTypes() );
- return true;
- }
- catch( NoSuchMethodException e )
- {
- return false;
- }
- }
-
- private static Class getInterfaceMethodDeclaration( Method method, Class clazz )
- throws NoSuchMethodException
- {
- Iterable<Class<?>> interfaces = Iterables.map( Classes.RAW_CLASS, interfacesOf( clazz ) );
- for( Class<?> anInterface : interfaces )
- {
- try
- {
- anInterface.getMethod( method.getName(), method.getParameterTypes() );
- return anInterface;
- }
- catch( NoSuchMethodException e )
- {
- // Try next
- }
- }
-
- throw new NoSuchMethodException( method.getName() );
- }
-
- private static boolean isInterfaceMethod( Method method, Class<?> baseClass )
- {
- for( Class<?> aClass : Iterables.filter( Methods.HAS_METHODS, Iterables.map( Classes.RAW_CLASS, interfacesOf( baseClass ) ) ) )
- {
- try
- {
- Method m = aClass.getMethod( method.getName(), method.getParameterTypes() );
- m.setAccessible( true );
- return true;
- }
- catch( NoSuchMethodException e )
- {
- // Ignore
- }
- }
- return false;
- }
-
- private static void type( MethodVisitor mv, Class<?> aClass )
- {
- if( aClass.equals( Integer.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Integer", "TYPE", "Ljava/lang/Class;" );
- }
- else if( aClass.equals( Long.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Long", "TYPE", "Ljava/lang/Class;" );
- }
- else if( aClass.equals( Short.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Short", "TYPE", "Ljava/lang/Class;" );
- }
- else if( aClass.equals( Byte.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Byte", "TYPE", "Ljava/lang/Class;" );
- }
- else if( aClass.equals( Double.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Double", "TYPE", "Ljava/lang/Class;" );
- }
- else if( aClass.equals( Float.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Float", "TYPE", "Ljava/lang/Class;" );
- }
- else if( aClass.equals( Boolean.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Boolean", "TYPE", "Ljava/lang/Class;" );
- }
- else if( aClass.equals( Character.TYPE ) )
- {
- mv.visitFieldInsn( GETSTATIC, "java/lang/Character", "TYPE", "Ljava/lang/Class;" );
- }
- else
- {
- mv.visitLdcInsn( Type.getType( aClass ) );
- }
- }
-
- private static int wrapParameter( MethodVisitor mv, Class<?> aClass, int idx )
- {
- if( aClass.equals( Integer.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false );
- }
- else if( aClass.equals( Long.TYPE ) )
- {
- mv.visitVarInsn( LLOAD, idx );
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false );
- idx++; // Extra jump
- }
- else if( aClass.equals( Short.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;", false );
- }
- else if( aClass.equals( Byte.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;", false );
- }
- else if( aClass.equals( Double.TYPE ) )
- {
- mv.visitVarInsn( DLOAD, idx );
- idx++; // Extra jump
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false );
- }
- else if( aClass.equals( Float.TYPE ) )
- {
- mv.visitVarInsn( FLOAD, idx );
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;", false );
- }
- else if( aClass.equals( Boolean.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;", false );
- }
- else if( aClass.equals( Character.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- mv.visitMethodInsn( INVOKESTATIC, "java/lang/Character", "valueOf", "(C)Ljava/lang/Character;", false );
- }
- else
- {
- mv.visitVarInsn( ALOAD, idx );
- }
-
- return idx;
- }
-
- private static void unwrapResult( MethodVisitor mv, Class<?> aClass, Label label )
- {
- if( aClass.equals( Integer.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Integer" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false );
- mv.visitLabel( label );
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Long.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Long" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false );
- mv.visitLabel( label );
- mv.visitInsn( LRETURN );
- }
- else if( aClass.equals( Short.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Short" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Short", "shortValue", "()S", false );
- mv.visitLabel( label );
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Byte.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Byte" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Byte", "byteValue", "()B", false );
- mv.visitLabel( label );
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Double.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Double" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false );
- mv.visitLabel( label );
- mv.visitInsn( DRETURN );
- }
- else if( aClass.equals( Float.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Float" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Float", "floatValue", "()F", false );
- mv.visitLabel( label );
- mv.visitInsn( FRETURN );
- }
- else if( aClass.equals( Boolean.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Boolean" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false );
- mv.visitLabel( label );
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Character.TYPE ) )
- {
- mv.visitTypeInsn( CHECKCAST, "java/lang/Character" );
- mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Character", "charValue", "()C", false );
- mv.visitLabel( label );
- mv.visitInsn( IRETURN );
- }
- else
- {
- mv.visitTypeInsn( CHECKCAST, getInternalName( aClass ) );
- mv.visitLabel( label );
- mv.visitInsn( ARETURN );
- }
- }
-
- private static int loadParameter( MethodVisitor mv, Class<?> aClass, int idx )
- {
- if( aClass.equals( Integer.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- }
- else if( aClass.equals( Long.TYPE ) )
- {
- mv.visitVarInsn( LLOAD, idx );
- idx++; // Extra jump
- }
- else if( aClass.equals( Short.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- }
- else if( aClass.equals( Byte.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- }
- else if( aClass.equals( Double.TYPE ) )
- {
- mv.visitVarInsn( DLOAD, idx );
- idx++; // Extra jump
- }
- else if( aClass.equals( Float.TYPE ) )
- {
- mv.visitVarInsn( FLOAD, idx );
- }
- else if( aClass.equals( Boolean.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- }
- else if( aClass.equals( Character.TYPE ) )
- {
- mv.visitVarInsn( ILOAD, idx );
- }
- else
- {
- mv.visitVarInsn( ALOAD, idx );
- }
-
- return idx;
- }
-
- private static void returnResult( MethodVisitor mv, Class<?> aClass )
- {
- if( aClass.equals( Integer.TYPE ) )
- {
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Long.TYPE ) )
- {
- mv.visitInsn( LRETURN );
- }
- else if( aClass.equals( Short.TYPE ) )
- {
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Byte.TYPE ) )
- {
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Double.TYPE ) )
- {
- mv.visitInsn( DRETURN );
- }
- else if( aClass.equals( Float.TYPE ) )
- {
- mv.visitInsn( FRETURN );
- }
- else if( aClass.equals( Boolean.TYPE ) )
- {
- mv.visitInsn( IRETURN );
- }
- else if( aClass.equals( Character.TYPE ) )
- {
- mv.visitInsn( IRETURN );
- }
- else
- {
- mv.visitTypeInsn( CHECKCAST, getInternalName( aClass ) );
- mv.visitInsn( ARETURN );
- }
- }
-
- private static void insn( MethodVisitor mv, int length )
- {
- switch( length )
- {
- case 0:
- mv.visitInsn( ICONST_0 );
- return;
- case 1:
- mv.visitInsn( ICONST_1 );
- return;
- case 2:
- mv.visitInsn( ICONST_2 );
- return;
- case 3:
- mv.visitInsn( ICONST_3 );
- return;
- case 4:
- mv.visitInsn( ICONST_4 );
- return;
- case 5:
- mv.visitInsn( ICONST_5 );
- return;
- default:
- mv.visitIntInsn( BIPUSH, length );
- }
- }
-
- public static boolean isGenerated( Class clazz )
- {
- return clazz.getName().endsWith( GENERATED_POSTFIX );
- }
-
- public static boolean isGenerated( Object object )
- {
- return object.getClass().getName().endsWith( GENERATED_POSTFIX );
- }
-
- public Class loadFragmentClass( Class fragmentClass )
- throws ClassNotFoundException
- {
- return loadClass( fragmentClass.getName().replace( '$', '_' ) + GENERATED_POSTFIX );
- }
-
- public static Class getSourceClass( Class fragmentClass )
- {
- return fragmentClass.getName().endsWith( GENERATED_POSTFIX ) ? fragmentClass.getSuperclass() : fragmentClass;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java
deleted file mode 100644
index 9d70a62..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2007, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2007, Niclas Hedhman. All Rights Reserved.
- * Copyright (c) 2007, Alin Dreghiciu. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.Arrays;
-import org.apache.zest.api.Qi4j;
-import org.apache.zest.api.composite.Composite;
-import org.apache.zest.api.composite.CompositeInstance;
-import org.apache.zest.api.property.StateHolder;
-import org.apache.zest.api.structure.Layer;
-import org.apache.zest.api.structure.Module;
-import org.apache.zest.runtime.structure.ModuleInstance;
-import org.apache.zest.spi.module.ModuleSpi;
-
-/**
- * InvocationHandler for proxy objects.
- */
-public class TransientInstance
- implements CompositeInstance, MixinsInstance
-{
- public static TransientInstance compositeInstanceOf( Composite composite )
- {
- InvocationHandler handler = Proxy.getInvocationHandler( composite );
- return (TransientInstance) handler;
- }
-
- private final Composite proxy;
- protected final Object[] mixins;
- protected StateHolder state;
- protected final CompositeModel compositeModel;
- private final ModuleSpi moduleInstance;
-
- public TransientInstance( CompositeModel compositeModel,
- ModuleSpi moduleInstance,
- Object[] mixins,
- StateHolder state
- )
- {
- this.compositeModel = compositeModel;
- this.moduleInstance = moduleInstance;
- this.mixins = mixins;
- this.state = state;
-
- proxy = compositeModel.newProxy( this );
- }
-
- @Override
- public Object invoke( Object proxy, Method method, Object[] args )
- throws Throwable
- {
- return compositeModel.invoke( this, proxy, method, args, moduleInstance );
- }
-
- @Override
- @SuppressWarnings( "unchecked" )
- public <T> T proxy()
- {
- return (T) proxy;
- }
-
- @Override
- public <T> T newProxy( Class<T> mixinType )
- throws IllegalArgumentException
- {
- return compositeModel.newProxy( this, mixinType );
- }
-
- @Override
- public Object invokeComposite( Method method, Object[] args )
- throws Throwable
- {
- return compositeModel.invoke( this, proxy, method, args, moduleInstance );
- }
-
- @Override
- public CompositeModel descriptor()
- {
- return compositeModel;
- }
-
- @Override
- public <T> T metaInfo( Class<T> infoType )
- {
- return compositeModel.metaInfo( infoType );
- }
-
- @Override
- public Iterable<Class<?>> types()
- {
- return compositeModel.types();
- }
-
- @Override
- public Module module()
- {
- return moduleInstance;
- }
-
- public Layer layer()
- {
- return ( (ModuleInstance) moduleInstance ).layerInstance();
- }
-
- @Override
- public StateHolder state()
- {
- return state;
- }
-
- @Override
- public Object invoke( Object composite, Object[] params, CompositeMethodInstance methodInstance )
- throws Throwable
- {
- Object mixin = methodInstance.getMixinFrom( mixins );
- return methodInstance.invoke( proxy, params, mixin );
- }
-
- @Override
- public Object invokeObject( Object proxy, Object[] args, Method method )
- throws Throwable
- {
- return method.invoke( this, args );
- }
-
- @Override
- public boolean equals( Object o )
- {
- if( o == null )
- {
- return false;
- }
- if( !Proxy.isProxyClass( o.getClass() ) )
- {
- return false;
- }
- TransientInstance other = (TransientInstance) Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.map( (Composite) o );
- if( other.mixins.length != mixins.length )
- {
- return false;
- }
-
- for( int i = 0; i < mixins.length; i++ )
- {
- if( !mixins[ i ].equals( other.mixins[ i ] ) )
- {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public int hashCode()
- {
- int hashCode = 0;
- for( Object mixin : mixins )
- {
- hashCode = hashCode * 31 + mixin.hashCode();
- }
- return hashCode;
- }
-
- @Override
- public String toString()
- {
- StringBuilder buffer = new StringBuilder();
- boolean first = true;
- for( Object mixin : mixins )
- {
- try
- {
- if( mixin != null ) // Can happen during construction of incorrect composites, during exception creation.
- {
- Class<?> type = mixin.getClass();
- Method toStringMethod = type.getMethod( "toString" );
- Class<?> declaringClass = toStringMethod.getDeclaringClass();
- if( !declaringClass.equals( Object.class ) )
- {
- if( !first )
- {
- buffer.append( ", " );
- }
- first = false;
- buffer.append( mixin.toString() );
- }
- }
- }
- catch( NoSuchMethodException e )
- {
- // Can not happen??
- e.printStackTrace();
- }
- }
- if( first )
- {
- String modelTypeName = compositeModel.getClass().getSimpleName();
- String metaTypeModel = modelTypeName.substring( 0, modelTypeName.length() - 5 );
- return metaTypeModel + "Instance{" +
- "mixins=" + ( mixins == null ? null : Arrays.asList( mixins ) ) +
- ", state=" + state +
- ", compositeModel=" + compositeModel +
- ", module=" + moduleInstance +
- '}';
- }
- return buffer.toString();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java
deleted file mode 100644
index 0d0ecac..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import org.apache.zest.api.common.MetaInfo;
-import org.apache.zest.api.common.Visibility;
-import org.apache.zest.api.composite.TransientDescriptor;
-import org.apache.zest.api.constraint.ConstraintViolationException;
-import org.apache.zest.runtime.injection.InjectionContext;
-import org.apache.zest.runtime.property.PropertyModel;
-import org.apache.zest.spi.module.ModuleSpi;
-
-/**
- * Model for Transient Composites
- */
-public class TransientModel
- extends CompositeModel
- implements TransientDescriptor
-{
- public TransientModel( Iterable<Class<?>> types, final Visibility visibility,
- final MetaInfo metaInfo,
- final MixinsModel mixinsModel,
- final StateModel stateModel,
- final CompositeMethodsModel compositeMethodsModel
- )
- {
- super( types, visibility, metaInfo, mixinsModel, stateModel, compositeMethodsModel );
- }
-
- public TransientInstance newInstance( ModuleSpi moduleInstance,
- UsesInstance uses,
- TransientStateInstance state
- )
- {
- Object[] mixins = mixinsModel.newMixinHolder();
- TransientInstance compositeInstance = new TransientInstance( this, moduleInstance, mixins, state );
-
- // Instantiate all mixins
- int i = 0;
- InjectionContext injectionContext = new InjectionContext( compositeInstance, uses, state );
- for( MixinModel mixinModel : mixinsModel.mixinModels() )
- {
- mixins[ i++ ] = mixinModel.newInstance( injectionContext );
- }
-
- // Return
- return compositeInstance;
- }
-
- public void checkConstraints( TransientStateInstance instanceState )
- throws ConstraintViolationException
- {
- for( PropertyModel propertyModel : stateModel.properties() )
- {
- propertyModel.checkConstraints( instanceState.<Object>propertyFor( propertyModel.accessor() ).get() );
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java
deleted file mode 100644
index 14d0901..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java
+++ /dev/null
@@ -1,60 +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.zest.runtime.composite;
-
-import java.lang.reflect.AccessibleObject;
-import java.util.Map;
-import org.apache.zest.api.property.Property;
-import org.apache.zest.api.property.StateHolder;
-
-/**
- * TODO
- */
-public final class TransientStateInstance
- implements StateHolder
-{
- private final Map<AccessibleObject, Property<?>> properties;
-
- public TransientStateInstance( Map<AccessibleObject, Property<?>> properties
- )
- {
- this.properties = properties;
- }
-
- @Override
- @SuppressWarnings( "unchecked" )
- public <T> Property<T> propertyFor( AccessibleObject accessor )
- throws IllegalArgumentException
- {
- Property<T> property = (Property<T>) properties.get( accessor );
-
- if( property == null )
- {
- throw new IllegalArgumentException( "No such property:" + accessor );
- }
-
- return property;
- }
-
- @Override
- public Iterable<Property<?>> properties()
- {
- return properties.values();
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java
deleted file mode 100644
index 102719e..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import java.util.List;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.VisitableHierarchy;
-
-/**
- * JAVADOC
- */
-public class TransientsModel
- implements VisitableHierarchy<Object, Object>
-{
- private final List<TransientModel> transientModels;
-
- public TransientsModel( List<TransientModel> transientModels )
- {
- this.transientModels = transientModels;
- }
-
- public Iterable<TransientModel> models()
- {
- return transientModels;
- }
-
- @Override
- public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
- throws ThrowableType
- {
- if( modelVisitor.visitEnter( this ) )
- {
- for( TransientModel transientModel : transientModels )
- {
- if( !transientModel.accept( modelVisitor ) )
- {
- break;
- }
- }
- }
- return modelVisitor.visitLeave( this );
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/TypedModifierInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TypedModifierInvocationHandler.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TypedModifierInvocationHandler.java
deleted file mode 100644
index 3c5366d..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TypedModifierInvocationHandler.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg
- * Licensed 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.zest.runtime.composite;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import org.apache.zest.api.composite.InvalidCompositeException;
-
-/**
- * JAVADOC
- */
-public final class TypedModifierInvocationHandler
- extends FragmentInvocationHandler
-{
- @Override
- public Object invoke( Object proxy, Method method, Object[] args )
- throws Throwable
- {
- try
- {
- return this.method.invoke( fragment, args );
- }
- catch( InvocationTargetException e )
- {
- throw cleanStackTrace( e.getTargetException(), proxy, method );
- }
- catch( Throwable e )
- {
- if( fragment == null )
- {
- throw new InvalidCompositeException( "No fragment available for method " + method.getName() );
- }
- throw cleanStackTrace( e, proxy, method );
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/UnsynchronizedCompositeMethodInstancePool.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/UnsynchronizedCompositeMethodInstancePool.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/UnsynchronizedCompositeMethodInstancePool.java
deleted file mode 100644
index 5aa0e74..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/UnsynchronizedCompositeMethodInstancePool.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-/**
- * Method instance pool that keeps a linked list. Uses synchronization
- * to ensure that instances are acquired and returned in a thread-safe
- * manner.
- */
-public final class UnsynchronizedCompositeMethodInstancePool
- implements InstancePool<CompositeMethodInstance>
-{
- private CompositeMethodInstance first = null;
-
- @Override
- public CompositeMethodInstance obtainInstance()
- {
- CompositeMethodInstance instance = first;
- if( instance != null )
- {
- first = instance.getNext();
- }
- return instance;
- }
-
- @Override
- public void releaseInstance( CompositeMethodInstance instance )
- {
- instance.setNext( first );
- first = instance;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsageGraph.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsageGraph.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsageGraph.java
deleted file mode 100644
index 540a886..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsageGraph.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2008 Niclas Hedhman. All rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import org.apache.zest.bootstrap.BindingException;
-
-/**
- * This class is NOT thread-safe.
- * //TODO: Algorithm need to be optimized.
- */
-public final class UsageGraph<K>
-{
- private final Collection<K> data;
- private final Use<K> use;
- private final boolean allowCyclic;
- private List<K> resolved;
- private HashMap<K, List<K>> transitive;
-
- public UsageGraph( Collection<K> data, Use<K> use, boolean allowCyclic )
- {
- this.data = data;
- this.use = use;
- this.allowCyclic = allowCyclic;
- }
-
- public boolean transitiveUse( K source, K other )
- throws BindingException
- {
- if( transitive == null )
- {
- buildUsageGraph();
- }
- return transitive.containsKey( source ) && transitive.get( source ).contains( other );
- }
-
- private void checkCyclic( List<K> visited, K sourceItem, K used )
- throws BindingException
- {
- Collection<K> nextLevel = use.uses( used );
- for( K next : nextLevel )
- {
- if( next == sourceItem )
- {
- if( !allowCyclic )
- {
- visited.add( next );
- throw new BindingException( "Cyclic usage detected: " + sourceItem + " -> " + visited );
- }
- }
- if( !visited.contains( next ) )
- {
- visited.add( next );
- checkCyclic( visited, sourceItem, next );
- }
- }
- }
-
- /**
- * Must be called if the data set has been modified.
- */
- public void invalidate()
- {
- resolved = null;
- transitive = null;
- }
-
- public List<K> resolveOrder()
- throws BindingException
- {
- if( resolved == null )
- {
- buildUsageGraph();
- resolved = new LinkedList<K>();
- for( K item : data )
- {
- int pos = resolved.size();
- for( K entry : resolved )
- {
- if( transitiveUse( entry, item ) )
- {
- pos = resolved.indexOf( entry );
- break;
- }
- }
- resolved.add( pos, item );
- }
- }
- return resolved;
- }
-
- private void buildUsageGraph()
- throws BindingException
- {
- transitive = new HashMap<K, List<K>>();
- for( K sourceItem : data )
- {
- LinkedList<K> visited = new LinkedList<K>();
- checkCyclic( visited, sourceItem, sourceItem );
- transitive.put( sourceItem, visited );
- }
- }
-
- public interface Use<K>
- {
-
- /**
- * @param source The item to be queried.
- *
- * @return A list of items it uses.
- */
- Collection<K> uses( K source );
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsesInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsesInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsesInstance.java
deleted file mode 100644
index 14cdf32..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/UsesInstance.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import org.apache.zest.functional.Iterables;
-
-/**
- * JAVADOC
- */
-public final class UsesInstance
-{
- public static final UsesInstance EMPTY_USES;
- private final Set<Object> uses;
-
- static
- {
- EMPTY_USES = new UsesInstance( new HashSet<>() );
- }
-
- private UsesInstance( HashSet<Object> uses )
- {
- this.uses = Collections.unmodifiableSet( uses );
- }
-
- public UsesInstance use( Object... objects )
- {
- HashSet<Object> useObjects = new HashSet<>();
- if( !uses.isEmpty() )
- {
- useObjects.addAll( uses );
- for( Object object : objects )
- {
- Object oldUseForType = useForType( object.getClass() );
- if( oldUseForType != null )
- {
- useObjects.remove( oldUseForType );
- }
- }
- }
- useObjects.addAll( Arrays.asList( objects ) );
- return new UsesInstance( useObjects );
- }
-
- public Object useForType( Class<?> type )
- {
- // Check instances first
- for( Object use : uses )
- {
- if( type.isInstance( use ) )
- {
- return use;
- }
- }
-
- return null;
- }
-
- public Object[] toArray()
- {
- return Iterables.toArray( uses );
- }
-
- @Override
- public boolean equals( Object o )
- {
- if( this == o )
- {
- return true;
- }
- if( o == null || getClass() != o.getClass() )
- {
- return false;
- }
- UsesInstance that = (UsesInstance) o;
- return uses.equals( that.uses );
- }
-
- @Override
- public int hashCode()
- {
- return uses.hashCode();
- }
-
- @Override
- public String toString()
- {
- return "UsesInstance{" +
- "uses=" + uses +
- '}';
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsInstance.java
deleted file mode 100644
index 25dddca..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsInstance.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.apache.zest.api.common.Optional;
-import org.apache.zest.api.constraint.ConstraintViolation;
-
-/**
- * JAVADOC
- */
-public final class ValueConstraintsInstance
-{
- private static final Optional OPTIONAL;
-
- static
- {
- OPTIONAL = new OptionalDummy();
- }
-
- @SuppressWarnings( "raw" )
- private final List<ConstraintInstance> constraints;
- private String name;
- private boolean optional;
-
- public ValueConstraintsInstance( List<AbstractConstraintModel> constraintModels, String name, boolean optional )
- {
- this.name = name;
- this.optional = optional;
- constraints = new ArrayList<>();
- for( AbstractConstraintModel constraintModel : constraintModels )
- {
- constraints.add( constraintModel.newInstance() );
- }
- }
-
- @SuppressWarnings( {"raw", "unchecked"} )
- public List<ConstraintViolation> checkConstraints( Object value )
- {
- List<ConstraintViolation> violations = null;
-
- // Check optional first - this avoids NPE's in constraints
- if( optional )
- {
- if( value == null )
- {
- violations = Collections.emptyList();
- }
- }
- else
- {
- if( value == null )
- {
- violations = new ArrayList<>();
- violations.add( new ConstraintViolation( name, OPTIONAL, null ) );
- }
- }
-
- if( violations == null && value != null )
- {
- for( ConstraintInstance constraint : constraints )
- {
- boolean valid;
- try
- {
- valid = constraint.isValid( value );
- }
- catch( NullPointerException e )
- {
- // A NPE is the same as a failing constraint
- valid = false;
- }
-
- if( !valid )
- {
- if( violations == null )
- {
- violations = new ArrayList<>();
- }
- ConstraintViolation violation = new ConstraintViolation( name, constraint.annotation(), value );
- violations.add( violation );
- }
- }
- }
-
- if( violations == null )
- {
- violations = Collections.emptyList();
- }
-
- return violations;
- }
-
- @SuppressWarnings( "AnnotationAsSuperInterface" )
- private static class OptionalDummy
- implements Optional
- {
- @Override
- public Class<? extends Annotation> annotationType()
- {
- return Optional.class;
- }
-
- @Override
- public String toString()
- {
- return "not optional";
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsModel.java
deleted file mode 100644
index 4eb6007..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ValueConstraintsModel.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.composite;
-
-import java.util.List;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.VisitableHierarchy;
-
-/**
- * JAVADOC
- */
-public final class ValueConstraintsModel
- implements VisitableHierarchy<Object, Object>
-{
- private final List<AbstractConstraintModel> constraintModels;
- private String name;
- private boolean optional;
-
- public ValueConstraintsModel( List<AbstractConstraintModel> constraintModels, String name, boolean optional )
- {
- this.constraintModels = constraintModels;
- this.name = name;
- this.optional = optional;
- }
-
- public ValueConstraintsInstance newInstance()
- {
- return new ValueConstraintsInstance( constraintModels, name, optional );
- }
-
- public boolean isConstrained()
- {
- if( !constraintModels.isEmpty() )
- {
- return true;
- }
-
- return !optional;
- }
-
- @Override
- public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
- throws ThrowableType
- {
- for( AbstractConstraintModel constraintModel : constraintModels )
- {
- if( constraintModel.accept( modelVisitor ) )
- {
- return false;
- }
- }
- return true;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java
deleted file mode 100644
index 56deeb7..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.entity;
-
-import java.util.List;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.VisitableHierarchy;
-
-/**
- * Model of entities in a particular Module.
- */
-public class EntitiesModel
- implements VisitableHierarchy<Object, Object>
-{
- private final List<EntityModel> entityModels;
-
- public EntitiesModel( List<EntityModel> entityModels )
- {
- this.entityModels = entityModels;
- }
-
- public Iterable<EntityModel> models()
- {
- return entityModels;
- }
-
- @Override
- public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
- throws ThrowableType
- {
- if( modelVisitor.visitEnter( this ) )
- {
- for( EntityModel entityModel : entityModels )
- {
- if( !entityModel.accept( modelVisitor ) )
- {
- break;
- }
- }
- }
- return modelVisitor.visitLeave( this );
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java
deleted file mode 100644
index 8512a87..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright (c) 2008-2009, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2009-2013, Niclas Hedhman. All Rights Reserved.
- * Copyright (c) 2014, Paul Merlin. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.entity;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.HashSet;
-import java.util.Set;
-import org.apache.zest.api.association.Association;
-import org.apache.zest.api.association.AssociationDescriptor;
-import org.apache.zest.api.association.AssociationStateDescriptor;
-import org.apache.zest.api.association.ManyAssociation;
-import org.apache.zest.api.association.NamedAssociation;
-import org.apache.zest.api.composite.CompositeDescriptor;
-import org.apache.zest.api.composite.CompositeInstance;
-import org.apache.zest.api.constraint.ConstraintViolationException;
-import org.apache.zest.api.entity.EntityComposite;
-import org.apache.zest.api.entity.EntityReference;
-import org.apache.zest.api.entity.Identity;
-import org.apache.zest.api.entity.LifecycleException;
-import org.apache.zest.api.unitofwork.NoSuchEntityException;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.api.unitofwork.UnitOfWorkException;
-import org.apache.zest.runtime.composite.CompositeMethodInstance;
-import org.apache.zest.runtime.composite.MixinsInstance;
-import org.apache.zest.runtime.structure.ModuleUnitOfWork;
-import org.apache.zest.spi.entity.EntityState;
-import org.apache.zest.spi.entity.EntityStatus;
-import org.apache.zest.spi.module.ModuleSpi;
-
-/**
- * Entity instance
- */
-public final class EntityInstance
- implements CompositeInstance, MixinsInstance
-{
- public static EntityInstance entityInstanceOf( EntityComposite composite )
- {
- return (EntityInstance) Proxy.getInvocationHandler( composite );
- }
-
- private final EntityComposite proxy;
- private final ModuleUnitOfWork uow;
- private final ModuleSpi moduleInstance;
- private final EntityModel entityModel;
- private final EntityReference identity;
- private final EntityState entityState;
-
- private Object[] mixins;
- private EntityStateInstance state;
-
- public EntityInstance( ModuleUnitOfWork uow,
- ModuleSpi moduleInstance,
- EntityModel entityModel,
- EntityState entityState
- )
- {
- this.uow = uow;
- this.moduleInstance = moduleInstance;
- this.entityModel = entityModel;
- this.identity = entityState.identity();
- this.entityState = entityState;
-
- proxy = (EntityComposite) entityModel.newProxy( this );
- }
-
- @Override
- public Object invoke( Object proxy, Method method, Object[] args )
- throws Throwable
- {
- return entityModel.invoke( this, this.proxy, method, args, moduleInstance );
- }
-
- public EntityReference identity()
- {
- return identity;
- }
-
- @Override
- @SuppressWarnings( "unchecked" )
- public <T> T proxy()
- {
- return (T) proxy;
- }
-
- @Override
- public CompositeDescriptor descriptor()
- {
- return entityModel;
- }
-
- @Override
- public <T> T newProxy( Class<T> mixinType )
- throws IllegalArgumentException
- {
- return entityModel.newProxy( this, mixinType );
- }
-
- @Override
- public Object invokeComposite( Method method, Object[] args )
- throws Throwable
- {
- return entityModel.invoke( this, proxy, method, args, moduleInstance );
- }
-
- @Override
- public <T> T metaInfo( Class<T> infoType )
- {
- return entityModel.metaInfo( infoType );
- }
-
- public EntityModel entityModel()
- {
- return entityModel;
- }
-
- @Override
- public Iterable<Class<?>> types()
- {
- return entityModel.types();
- }
-
- @Override
- public ModuleSpi module()
- {
- return moduleInstance;
- }
-
- public UnitOfWork unitOfWork()
- {
- return uow;
- }
-
- public EntityState entityState()
- {
- return entityState;
- }
-
- @Override
- public EntityStateInstance state()
- {
- if( state == null )
- {
- initState();
- }
-
- return state;
- }
-
- public EntityStatus status()
- {
- return entityState.status();
- }
-
- @Override
- public Object invoke( Object composite, Object[] params, CompositeMethodInstance methodInstance )
- throws Throwable
- {
- if( mixins == null )
- {
- initState();
- }
-
- Object mixin = methodInstance.getMixinFrom( mixins );
-
- if( mixin == null )
- {
- mixin = entityModel.newMixin( mixins, state, this, methodInstance.method() );
- }
-
- return methodInstance.invoke( proxy, params, mixin );
- }
-
- @Override
- public Object invokeObject( Object proxy, Object[] args, Method method )
- throws Throwable
- {
- return method.invoke( this, args );
- }
-
- private void initState()
- {
- if( !uow.isOpen() )
- {
- throw new UnitOfWorkException( "Unit of work has been closed" );
- }
-
- if( status() == EntityStatus.REMOVED )
- {
- throw new NoSuchEntityException( identity, entityModel.types(), unitOfWork().usecase() );
- }
-
- mixins = entityModel.newMixinHolder();
- state = new EntityStateInstance( entityModel.state(), uow, entityState );
- }
-
- @Override
- public int hashCode()
- {
- return identity.hashCode();
- }
-
- @Override
- public boolean equals( Object o )
- {
- try
- {
- Identity other = ( (Identity) o );
- return other != null && other.identity().get().equals( identity.identity() );
- }
- catch( ClassCastException e )
- {
- return false;
- }
- }
-
- @Override
- public String toString()
- {
- return identity.toString();
- }
-
- public void remove( UnitOfWork unitOfWork )
- throws LifecycleException
- {
- invokeRemove();
-
- removeAggregatedEntities( unitOfWork );
-
- entityState.remove();
- mixins = null;
- }
-
- public void invokeCreate()
- {
- lifecyleInvoke( true );
- }
-
- private void invokeRemove()
- {
- lifecyleInvoke( false );
- }
-
- private void lifecyleInvoke( boolean create )
- {
- if( mixins == null )
- {
- initState();
- }
-
- entityModel.invokeLifecycle( create, mixins, this, state );
- }
-
- private void removeAggregatedEntities( UnitOfWork unitOfWork )
- {
- // Calculate aggregated Entities
- AssociationStateDescriptor stateDescriptor = entityModel.state();
- Set<Object> aggregatedEntities = new HashSet<>();
- Iterable<? extends AssociationDescriptor> associations = stateDescriptor.associations();
- for( AssociationDescriptor association : associations )
- {
- if( association.isAggregated() )
- {
- Association<?> assoc = state.associationFor( association.accessor() );
- Object aggregatedEntity = assoc.get();
- if( aggregatedEntity != null )
- {
- aggregatedEntities.add( aggregatedEntity );
- }
- }
- }
- Iterable<? extends AssociationDescriptor> manyAssociations = stateDescriptor.manyAssociations();
- for( AssociationDescriptor association : manyAssociations )
- {
- if( association.isAggregated() )
- {
- ManyAssociation<?> manyAssoc = state.manyAssociationFor( association.accessor() );
- for( Object entity : manyAssoc )
- {
- aggregatedEntities.add( entity );
- }
- }
- }
- Iterable<? extends AssociationDescriptor> namedAssociations = stateDescriptor.namedAssociations();
- for( AssociationDescriptor association : namedAssociations )
- {
- if( association.isAggregated() )
- {
- NamedAssociation<?> namedAssoc = state.namedAssociationFor( association.accessor() );
- for( String name : namedAssoc )
- {
- aggregatedEntities.add( namedAssoc.get( name ) );
- }
- }
- }
-
- // Remove aggregated Entities
- for( Object aggregatedEntity : aggregatedEntities )
- {
- unitOfWork.remove( aggregatedEntity );
- }
- }
-
- public void checkConstraints()
- {
- try
- {
- state.checkConstraints();
- }
- catch( ConstraintViolationException e )
- {
- throw new ConstraintViolationException( identity.identity(), entityModel.types(), e.mixinTypeName(), e.methodName(), e
- .constraintViolations() );
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityMixinsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityMixinsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityMixinsModel.java
deleted file mode 100644
index 2ad5b05..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityMixinsModel.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.zest.runtime.entity;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.zest.api.composite.CompositeInstance;
-import org.apache.zest.api.entity.Lifecycle;
-import org.apache.zest.api.property.StateHolder;
-import org.apache.zest.bootstrap.BindingException;
-import org.apache.zest.runtime.composite.MixinModel;
-import org.apache.zest.runtime.composite.MixinsModel;
-import org.apache.zest.runtime.composite.UsesInstance;
-import org.apache.zest.runtime.injection.InjectionContext;
-import org.apache.zest.runtime.model.Resolution;
-
-/**
- * JAVADOC
- */
-public final class EntityMixinsModel
- extends MixinsModel
-{
- List<Integer> lifecycleMixins;
-
- @Override
- public void bind( Resolution resolution )
- throws BindingException
- {
- super.bind( resolution );
-
- // Find what mixins implement Lifecycle
- for( int i = 0; i < mixinModels.size(); i++ )
- {
- MixinModel mixinModel = mixinModels.get( i );
- if( Lifecycle.class.isAssignableFrom( mixinModel.mixinClass() ) )
- {
- if( lifecycleMixins == null )
- {
- lifecycleMixins = new ArrayList<Integer>();
- }
-
- lifecycleMixins.add( i );
- }
- }
- }
-
- public Object newMixin( EntityInstance entityInstance, StateHolder state, Object[] mixins, Method method )
- {
- MixinModel model = methodImplementation.get( method );
- InjectionContext injectionContext = new InjectionContext( entityInstance, UsesInstance.EMPTY_USES, state );
- Object mixin = model.newInstance( injectionContext );
- mixins[ methodIndex.get( method ) ] = mixin;
- return mixin;
- }
-
- public void invokeLifecycle( boolean create, Object[] mixins, CompositeInstance instance, StateHolder state )
- {
- if( lifecycleMixins != null )
- {
- InjectionContext injectionContext = new InjectionContext( instance, UsesInstance.EMPTY_USES, state );
- for( Integer lifecycleMixin : lifecycleMixins )
- {
- Lifecycle lifecycle = (Lifecycle) mixins[ lifecycleMixin ];
-
- if( lifecycle == null )
- {
- lifecycle = (Lifecycle) mixinModels.get( lifecycleMixin ).newInstance( injectionContext );
- }
-
- if( create )
- {
- lifecycle.create();
- }
- else
- {
- lifecycle.remove();
- }
- }
- }
- }
-}