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/30 21:48:31 UTC
[32/80] [partial] zest-java git commit: First round of changes to
move to org.apache.zest namespace.
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/Base64Encoder.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/Base64Encoder.java b/core/api/src/main/java/org/qi4j/api/util/Base64Encoder.java
deleted file mode 100644
index 9246b13..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/Base64Encoder.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 2009 Alin Dreghiciu.
- *
- * 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.qi4j.api.util;
-
-/**
- * Base64Encoder.
- */
-public final class Base64Encoder
-{
-
- /**
- * Utility class. ment to be used via static methods.
- */
- private Base64Encoder()
- {
- // utility class
- }
-
- /**
- * Encodes a String into a base 64 String. The resulting encoding is chunked at 76 bytes.
- *
- * @param s String to encode.
- *
- * @return encoded string.
- */
- public static String encode( String s, boolean includePadding )
- {
- byte[] sBytes = s.getBytes();
- sBytes = encode( sBytes, includePadding );
- s = new String( sBytes );
- return s;
- }
-
- /**
- * Decodes a base 64 String into a String.
- *
- * @param s String to decode.
- *
- * @return encoded string.
- *
- * @throws java.lang.IllegalArgumentException
- * _ If the given byte array was not valid base64 encoding.
- */
- public static String decode( String s )
- throws IllegalArgumentException
- {
- s = s.replaceAll( "\n", "" );
- s = s.replaceAll( "\r", "" );
- byte[] sBytes = s.getBytes();
- sBytes = decode( sBytes );
- s = new String( sBytes );
- return s;
- }
-
- private static final byte[] ALPHASET =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".getBytes();
-
- private static final int I6O2 = 255 - 3;
- private static final int O6I2 = 3;
- private static final int I4O4 = 255 - 15;
- private static final int O4I4 = 15;
- private static final int I2O6 = 255 - 63;
- private static final int O2I6 = 63;
-
- /**
- * Encodes a byte array into a base 64 byte array.
- *
- * @param dData byte array to encode.
- *
- * @return encoded byte array.
- */
- public static byte[] encode( byte[] dData, boolean includePadding )
- {
- if( dData == null )
- {
- throw new IllegalArgumentException( "Cannot encode null" );
- }
- byte[] eData = new byte[ ( ( dData.length + 2 ) / 3 ) * 4 ];
-
- int eIndex = 0;
- for( int i = 0; i < dData.length; i += 3 )
- {
- int d1;
- int d2 = 0;
- int d3 = 0;
- int e1;
- int e2;
- int e3;
- int e4;
- int pad = 0;
-
- d1 = dData[ i ];
- if( ( i + 1 ) < dData.length )
- {
- d2 = dData[ i + 1 ];
- if( ( i + 2 ) < dData.length )
- {
- d3 = dData[ i + 2 ];
- }
- else
- {
- pad = 1;
- }
- }
- else
- {
- pad = 2;
- }
-
- e1 = ALPHASET[ ( d1 & I6O2 ) >> 2 ];
- e2 = ALPHASET[ ( d1 & O6I2 ) << 4 | ( d2 & I4O4 ) >> 4 ];
- e3 = ALPHASET[ ( d2 & O4I4 ) << 2 | ( d3 & I2O6 ) >> 6 ];
- e4 = ALPHASET[ ( d3 & O2I6 ) ];
-
- eData[ eIndex++ ] = (byte) e1;
- eData[ eIndex++ ] = (byte) e2;
- eData[ eIndex++ ] = ( pad < 2 ) ? (byte) e3 : (byte) '=';
- eData[ eIndex++ ] = ( pad < 1 ) ? (byte) e4 : (byte) '=';
-
- if( pad > 0 && !includePadding )
- {
- byte[] neweData = new byte[ eData.length - pad ];
- System.arraycopy( eData, 0, neweData, 0, eIndex - pad );
- eData = neweData;
- }
- }
-
- return eData;
- }
-
- private final static int[] CODES = new int[ 256 ];
-
- static
- {
- for( int i = 0; i < CODES.length; i++ )
- {
- CODES[ i ] = 64;
- }
- for( int i = 0; i < ALPHASET.length; i++ )
- {
- CODES[ ALPHASET[ i ] ] = i;
- }
- }
-
- /**
- * Decodes a base64 byte array into a byte array.
- * <p>
- *
- * @param eData byte array to decode.
- *
- * @return decoded byte array.
- *
- * @throws java.lang.IllegalArgumentException
- * thrown if the given byte array was not valid com.sun.syndication.io.impl.Base64 encoding.
- */
- public static byte[] decode( byte[] eData )
- {
- if( eData == null )
- {
- throw new IllegalArgumentException( "Cannot decode null" );
- }
- byte[] cleanEData = eData.clone();
- int cleanELength = 0;
- for( byte anEData : eData )
- {
- if( anEData < 256 && CODES[ anEData ] < 64 )
- {
- cleanEData[ cleanELength++ ] = anEData;
- }
- }
-
- int dLength = ( cleanELength / 4 ) * 3;
- switch( cleanELength % 4 )
- {
- case 3:
- dLength += 2;
- break;
- case 2:
- dLength++;
- break;
- }
-
- byte[] dData = new byte[ dLength ];
- int dIndex = 0;
- for( int i = 0; i < eData.length; i += 4 )
- {
- if( ( i + 3 ) > eData.length )
- {
- throw new IllegalArgumentException(
- "byte array is not a valid base64 encoding"
- );
- }
- int e1 = CODES[ cleanEData[ i ] ];
- int e2 = CODES[ cleanEData[ i + 1 ] ];
- int e3 = CODES[ cleanEData[ i + 2 ] ];
- int e4 = CODES[ cleanEData[ i + 3 ] ];
- dData[ dIndex++ ] = (byte) ( ( e1 << 2 ) | ( e2 >> 4 ) );
- if( dIndex < dData.length )
- {
- dData[ dIndex++ ] = (byte) ( ( e2 << 4 ) | ( e3 >> 2 ) );
- }
- if( dIndex < dData.length )
- {
- dData[ dIndex++ ] = (byte) ( ( e3 << 6 ) | ( e4 ) );
- }
- }
- return dData;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/Classes.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/Classes.java b/core/api/src/main/java/org/qi4j/api/util/Classes.java
deleted file mode 100644
index 34f4b05..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/Classes.java
+++ /dev/null
@@ -1,699 +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.qi4j.api.util;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.qi4j.api.composite.ModelDescriptor;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
-
-import static org.qi4j.functional.Iterables.cast;
-import static org.qi4j.functional.Iterables.empty;
-import static org.qi4j.functional.Iterables.flatten;
-import static org.qi4j.functional.Iterables.flattenIterables;
-import static org.qi4j.functional.Iterables.iterable;
-import static org.qi4j.functional.Iterables.map;
-import static org.qi4j.functional.Iterables.matchesAny;
-import static org.qi4j.functional.Iterables.prepend;
-
-/**
- * Useful methods for handling Classes.
- */
-public final class Classes
-{
- private final static Map<Type, Type> wrapperClasses = new HashMap<>();
-
- static
- {
- wrapperClasses.put( boolean.class, Boolean.class );
- wrapperClasses.put( byte.class, Byte.class );
- wrapperClasses.put( short.class, Short.class );
- wrapperClasses.put( char.class, Character.class );
- wrapperClasses.put( int.class, Integer.class );
- wrapperClasses.put( long.class, Long.class );
- wrapperClasses.put( float.class, Float.class );
- wrapperClasses.put( double.class, Double.class );
- }
-
- private final static Map<Type, Type> primitiveClasses = new HashMap<>();
-
- static
- {
- primitiveClasses.put( boolean.class, Boolean.class );
- primitiveClasses.put( byte.class, Byte.class );
- primitiveClasses.put( short.class, Short.class );
- primitiveClasses.put( char.class, Character.class );
- primitiveClasses.put( int.class, Integer.class );
- primitiveClasses.put( long.class, Long.class );
- primitiveClasses.put( float.class, Float.class );
- primitiveClasses.put( double.class, Double.class );
- }
-
- /**
- * Convert from primitive class (int, short, double, etc.) to wrapper class (Integer, Short, Double, etc.).
- * Return the same class if it's not a primitive class. This can therefore safely be used on all types
- * to ensure that they are not primitives.
- */
- private static final Function<Type, Type> WRAPPER_CLASS = new Function<Type, Type>()
- {
- @Override
- public Type map( Type aClass )
- {
- Type wrapperClass = wrapperClasses.get( aClass );
- return wrapperClass == null ? aClass : wrapperClass;
- }
- };
-
- /**
- * Convert from wrapper class (Integer, Short, Double, etc.) to primitive class (int, short, double, etc.).
- * Return the same class if it's not a wrapper class. This can therefore safely be used on all types
- * to ensure that they are primitives if possible.
- */
- @SuppressWarnings( "UnusedDeclaration" )
- private static final Function<Type, Type> PRIMITIVE_CLASS = new Function<Type, Type>()
- {
- @Override
- public Type map( Type aClass )
- {
- Type primitiveClass = primitiveClasses.get( aClass );
- return primitiveClass == null ? aClass : primitiveClass;
- }
- };
-
- /**
- * Function that extract the raw class of a type.
- */
- public static final Function<Type, Class<?>> RAW_CLASS = new Function<Type, Class<?>>()
- {
- @Override
- public Class<?> map( Type genericType )
- {
- // Calculate raw type
- if( genericType instanceof Class )
- {
- return (Class<?>) genericType;
- }
- else if( genericType instanceof ParameterizedType )
- {
- return (Class<?>) ( (ParameterizedType) genericType ).getRawType();
- }
- else if( genericType instanceof TypeVariable )
- {
- return (Class<?>) ( (TypeVariable) genericType ).getGenericDeclaration();
- }
- else if( genericType instanceof WildcardType )
- {
- return (Class<?>) ( (WildcardType) genericType ).getUpperBounds()[ 0];
- }
- else if( genericType instanceof GenericArrayType )
- {
- Object temp = Array.newInstance( (Class<?>) ( (GenericArrayType) genericType ).getGenericComponentType(), 0 );
- return temp.getClass();
- }
- throw new IllegalArgumentException( "Could not extract the raw class of " + genericType );
- }
- };
-
- private static final Function<AccessibleObject, Type> TYPE_OF = new Function<AccessibleObject, Type>()
- {
- @Override
- public Type map( AccessibleObject accessor )
- {
- return accessor instanceof Method ? ( (Method) accessor ).getGenericReturnType() : ( (Field) accessor ).getGenericType();
- }
- };
-
- private static final Function<Type, Iterable<Class<?>>> CLASS_HIERARCHY = new Function<Type, Iterable<Class<?>>>()
- {
- @Override
- @SuppressWarnings( {"raw", "unchecked"} )
- public Iterable<Class<?>> map( Type type )
- {
- if( type == null )
- {
- return empty();
- }
- if( type.equals( Object.class ) )
- {
- Class<?> aClass = (Class<?>) type;
- return cast( iterable( aClass ) );
- }
- else
- {
- type = RAW_CLASS.map( type );
- Class superclass = ( (Class) type ).getSuperclass();
- return prepend( (Class<?>) type, map( superclass ) );
- }
- }
- };
-
- @SuppressWarnings( "raw" )
- private static final Function<Type, Iterable<Type>> INTERFACES_OF = new Function<Type, Iterable<Type>>()
- {
- @Override
- public Iterable<Type> map( Type type )
- {
- Class clazz = RAW_CLASS.map( type );
-
- if( clazz.isInterface() )
- {
- Iterable<Type> genericInterfaces = iterable( clazz.getGenericInterfaces() );
- Iterable<Type> flattenIterables = flattenIterables( Iterables.map( INTERFACES_OF, genericInterfaces ) );
- return prepend( type, flattenIterables );
- }
- else
- {
- if( type.equals( Object.class ) )
- {
- return iterable( clazz.getGenericInterfaces() );
- }
- else
- {
- return flatten( flattenIterables( Iterables.map( INTERFACES_OF,
- iterable( clazz.getGenericInterfaces() ) ) ),
- INTERFACES_OF.map( RAW_CLASS.map( type ).getSuperclass() ) );
- }
- }
- }
- };
-
- @SuppressWarnings( "raw" )
- private static final Function<Type, Iterable<Type>> TYPES_OF = new Function<Type, Iterable<Type>>()
- {
- @Override
- public Iterable<Type> map( Type type )
- {
- Class clazz = RAW_CLASS.map( type );
-
- if( clazz.isInterface() )
- {
- Iterable<Type> genericInterfaces = iterable( clazz.getGenericInterfaces() );
- Iterable<Type> flattenIterables = flattenIterables( Iterables.map( INTERFACES_OF, genericInterfaces ) );
- return prepend( clazz, flattenIterables );
- }
- else
- {
- return flatten( CLASS_HIERARCHY.map( type ),
- flattenIterables( Iterables.map( INTERFACES_OF, CLASS_HIERARCHY.map( type ) ) ) );
- }
- }
- };
-
- public static Type typeOf( AccessibleObject from )
- {
- return TYPE_OF.map( from );
- }
-
- public static Iterable<Type> typesOf( Iterable<Type> types )
- {
- Iterable<Type> result = empty();
- for( Type type : types )
- {
- result = flatten( result, typesOf( type ) );
- }
- return result;
- }
-
- public static Iterable<Type> typesOf( Type type )
- {
- return TYPES_OF.map( type );
- }
-
- public static Iterable<? extends Type> interfacesOf( Iterable<? extends Type> types )
- {
- Iterable<Type> result = empty();
- for( Type type : types )
- {
- result = flatten( result, interfacesOf( type ) );
- }
- return result;
- }
-
- public static Iterable<Type> interfacesOf( Type type )
- {
- return INTERFACES_OF.map( type );
- }
-
- public static Iterable<Class<?>> classHierarchy( Class<?> type )
- {
- return CLASS_HIERARCHY.map( type );
- }
-
- public static Type wrapperClass( Type type )
- {
- return WRAPPER_CLASS.map( type );
- }
-
- public static Specification<Class<?>> isAssignableFrom( final Class clazz )
- {
- return new Specification<Class<?>>()
- {
- @Override
- @SuppressWarnings( "unchecked" )
- public boolean satisfiedBy( Class<?> item )
- {
- return clazz.isAssignableFrom( item );
- }
- };
- }
-
- @SuppressWarnings( "raw" )
- public static Specification<Object> instanceOf( final Class clazz )
- {
- return new Specification<Object>()
- {
- @Override
- public boolean satisfiedBy( Object item )
- {
- return clazz.isInstance( item );
- }
- };
- }
-
- public static Specification<Class<?>> hasModifier( final int classModifier )
- {
- return new Specification<Class<?>>()
- {
- @Override
- public boolean satisfiedBy( Class<?> item )
- {
- return ( item.getModifiers() & classModifier ) != 0;
- }
- };
- }
-
- public static <T> Function<Type, Iterable<T>> forClassHierarchy( final Function<Class<?>, Iterable<T>> function )
- {
- return new Function<Type, Iterable<T>>()
- {
- @Override
- public Iterable<T> map( Type type )
- {
- return flattenIterables( Iterables.map( function, CLASS_HIERARCHY.map( type ) ) );
- }
- };
- }
-
- public static <T> Function<Type, Iterable<T>> forTypes( final Function<Type, Iterable<T>> function )
- {
- return new Function<Type, Iterable<T>>()
- {
- @Override
- public Iterable<T> map( Type type )
- {
- return flattenIterables( Iterables.map( function, TYPES_OF.map( type ) ) );
- }
- };
- }
-
- @SuppressWarnings( "raw" )
- public static Set<Class<?>> interfacesWithMethods( Set<Class<?>> interfaces )
- {
- Set<Class<?>> newSet = new LinkedHashSet<>();
- for( Class type : interfaces )
- {
- if( type.isInterface() && type.getDeclaredMethods().length > 0 )
- {
- newSet.add( type );
- }
- }
-
- return newSet;
- }
-
- public static String simpleGenericNameOf( Type type )
- {
- StringBuilder sb = new StringBuilder();
- simpleGenericNameOf( sb, type );
- return sb.toString();
- }
-
- @SuppressWarnings( "raw" )
- private static void simpleGenericNameOf( StringBuilder sb, Type type )
- {
- if( type instanceof Class )
- {
- sb.append( ( (Class) type ).getSimpleName() );
- }
- else if( type instanceof ParameterizedType )
- {
- ParameterizedType pt = (ParameterizedType) type;
- simpleGenericNameOf( sb, pt.getRawType() );
- sb.append( "<" );
- boolean atLeastOne = false;
- for( Type typeArgument : pt.getActualTypeArguments() )
- {
- if( atLeastOne )
- {
- sb.append( ", " );
- }
- simpleGenericNameOf( sb, typeArgument );
- atLeastOne = true;
- }
- sb.append( ">" );
- }
- else if( type instanceof GenericArrayType )
- {
- GenericArrayType gat = (GenericArrayType) type;
- simpleGenericNameOf( sb, gat.getGenericComponentType() );
- sb.append( "[]" );
- }
- else if( type instanceof TypeVariable )
- {
- TypeVariable tv = (TypeVariable) type;
- sb.append( tv.getName() );
- }
- else if( type instanceof WildcardType )
- {
- WildcardType wt = (WildcardType) type;
- sb.append( "? extends " );
- boolean atLeastOne = false;
- for( Type typeArgument : wt.getUpperBounds() )
- {
- if( atLeastOne )
- {
- sb.append( ", " );
- }
- simpleGenericNameOf( sb, typeArgument );
- atLeastOne = true;
- }
- }
- else
- {
- throw new IllegalArgumentException( "Don't know how to deal with type:" + type );
- }
- }
-
- @SuppressWarnings( "UnusedDeclaration" )
- public static <AnnotationType extends Annotation>
- AnnotationType findAnnotationOfTypeOrAnyOfSuperTypes( Class<?> type, Class<AnnotationType> annotationClass )
- {
- AnnotationType result = null;
- for( Type clazz : Classes.TYPES_OF.map( type ) )
- {
- result = Classes.RAW_CLASS.map( clazz ).getAnnotation( annotationClass );
- if( result != null )
- {
- break;
- }
- }
-
- return result;
- }
-
- public static Specification<Member> memberNamed( final String name )
- {
- return new Specification<Member>()
- {
- @Override
- public boolean satisfiedBy( Member item )
- {
- return item.getName().equals( name );
- }
- };
- }
-
- /**
- * Given a type variable, find what it resolves to given the declaring class where type
- * variable was found and a top class that extends the declaring class.
- *
- * @param name The TypeVariable name.
- * @param declaringClass The class where the TypeVariable is declared.
- * @param topClass The top class that extends the declaringClass
- *
- * @return The Type instance of the given TypeVariable
- */
- @SuppressWarnings( "raw" )
- public static Type resolveTypeVariable( TypeVariable name, Class declaringClass, Class topClass )
- {
- Type type = resolveTypeVariable( name, declaringClass, new HashMap<TypeVariable, Type>(), topClass );
- if( type == null )
- {
- type = Object.class;
- }
- return type;
- }
-
- @SuppressWarnings( "raw" )
- private static Type resolveTypeVariable( TypeVariable name,
- Class declaringClass,
- Map<TypeVariable, Type> mappings,
- Class current
- )
- {
- if( current.equals( declaringClass ) )
- {
- Type resolvedType = name;
- while( resolvedType instanceof TypeVariable )
- {
- resolvedType = mappings.get( resolvedType );
- }
- return resolvedType;
- }
-
- List<Type> types = new ArrayList<>();
- for( Type type : current.getGenericInterfaces() )
- {
- Iterable<Type> interfaces = Classes.INTERFACES_OF.map( type );
- for( Type anInterface : interfaces )
- {
- if( !types.contains( anInterface ) )
- {
- types.add( anInterface );
- }
- }
- types.add( type );
- }
-
- if( current.getGenericSuperclass() != null )
- {
- types.add( current.getGenericSuperclass() );
- }
-
- for( Type type : types )
- {
- Class subClass;
- if( type instanceof ParameterizedType )
- {
- ParameterizedType pt = (ParameterizedType) type;
- Type[] args = pt.getActualTypeArguments();
- Class clazz = (Class) pt.getRawType();
- TypeVariable[] vars = clazz.getTypeParameters();
- for( int i = 0; i < vars.length; i++ )
- {
- TypeVariable var = vars[ i];
- Type mappedType = args[ i];
- mappings.put( var, mappedType );
- }
- subClass = (Class) pt.getRawType();
- }
- else
- {
- subClass = (Class) type;
- }
-
- Type resolvedType = resolveTypeVariable( name, declaringClass, mappings, subClass );
- if( resolvedType != null )
- {
- return resolvedType;
- }
- }
-
- return null;
- }
-
- /**
- * Get URI for a class.
- *
- * @param clazz class
- *
- * @return URI
- *
- * @throws NullPointerException if clazz is null
- */
- @SuppressWarnings( "raw" )
- public static String toURI( final Class clazz )
- throws NullPointerException
- {
- return toURI( clazz.getName() );
- }
-
- /**
- * Get URI for a class name.
- * <p>
- * Example:
- * </p>
- * <p>
- * Class name com.example.Foo$Bar is converted to URI urn:qi4j:com.example.Foo-Bar
- * </p>
- *
- * @param className class name
- *
- * @return URI
- *
- * @throws NullPointerException if className is null
- */
- public static String toURI( String className )
- throws NullPointerException
- {
- className = normalizeClassToURI( className );
- return "urn:qi4j:type:" + className;
- }
-
- /**
- * Get class name from a URI
- *
- * @param uri URI
- *
- * @return class name
- *
- * @throws NullPointerException if uri is null
- */
- public static String toClassName( String uri )
- throws NullPointerException
- {
- uri = uri.substring( "urn:qi4j:type:".length() );
- uri = denormalizeURIToClass( uri );
- return uri;
- }
-
- public static String normalizeClassToURI( String className )
- {
- return className.replace( '$', '-' );
- }
-
- public static String denormalizeURIToClass( String uriPart )
- {
- return uriPart.replace( '-', '$' );
- }
-
- public static Specification<ModelDescriptor> modelTypeSpecification( final String className )
- {
- return new Specification<ModelDescriptor>()
- {
- @Override
- public boolean satisfiedBy( ModelDescriptor item )
- {
- return matchesAny( new Specification<String>()
- {
- @Override
- public boolean satisfiedBy( String item )
- {
- return item.equals( className );
- }
- }, map( new Function<Class<?>, String>()
- {
- @Override
- public String map( Class<?> item )
- {
- return item.getName();
- }
- }, item.types() ) );
- }
- };
- }
-
- @SuppressWarnings( "raw" )
- public static Specification<ModelDescriptor> exactTypeSpecification( final Class type )
- {
- return new Specification<ModelDescriptor>()
- {
- @Override
- public boolean satisfiedBy( ModelDescriptor item )
- {
- return matchesAny( new Specification<Class<?>>()
- {
- @Override
- public boolean satisfiedBy( Class<?> item )
- {
- return item.equals( type );
- }
- }, item.types() );
- }
- };
- }
-
- @SuppressWarnings( "raw" )
- public static Specification<ModelDescriptor> assignableTypeSpecification( final Class type )
- {
- return new Specification<ModelDescriptor>()
- {
- @Override
- public boolean satisfiedBy( ModelDescriptor item )
- {
- return matchesAny( new Specification<Class<?>>()
- {
- @Override
- @SuppressWarnings( "unchecked" )
- public boolean satisfiedBy( Class<?> itemType )
- {
- return !type.equals( itemType ) && type.isAssignableFrom( itemType );
- }
- }, item.types() );
- }
- };
- }
-
- @SuppressWarnings( "raw" )
- public static String toString( Iterable<? extends Class> type )
- {
- StringBuilder builder = new StringBuilder();
- builder.append( "[" );
- boolean first = true;
- for( Class c : type )
- {
- if( !first )
- {
- builder.append( "," );
- }
- first = false;
- builder.append( c.getSimpleName() );
- }
- builder.append( "]" );
- return builder.toString();
- }
-
- public static Function<Type, String> toClassName()
- {
- return new Function<Type, String>()
- {
- @Override
- public String map( Type type )
- {
- return RAW_CLASS.map( type ).getName();
- }
- };
- }
-
- private Classes()
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/Constructors.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/Constructors.java b/core/api/src/main/java/org/qi4j/api/util/Constructors.java
deleted file mode 100644
index 17062ca..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/Constructors.java
+++ /dev/null
@@ -1,40 +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.qi4j.api.util;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Type;
-import org.qi4j.functional.Function;
-
-import static org.qi4j.functional.Iterables.iterable;
-
-/**
- * Useful methods for handling Constructors.
- */
-public final class Constructors
-{
- public static final Function<Type, Iterable<Constructor<?>>> CONSTRUCTORS_OF = Classes.forClassHierarchy( new Function<Class<?>, Iterable<Constructor<?>>>()
- {
- @Override
- public Iterable<Constructor<?>> map( Class<?> type )
- {
- return iterable( type.getDeclaredConstructors() );
- }
- } );
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/Dates.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/Dates.java b/core/api/src/main/java/org/qi4j/api/util/Dates.java
deleted file mode 100644
index 3324df2..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/Dates.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * 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.qi4j.api.util;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * Useful methods for handling Dates.
- */
-public final class Dates
-{
- // Formatters are not thread-safe. Create one per thread
- private static final ThreadLocal<DateFormat> ISO8601 = new ThreadLocal<DateFormat>()
- {
- @Override
- protected DateFormat initialValue()
- {
- return new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
- }
- };
-
- private static final ThreadLocal<DateFormat> ISO8601_UTC = new ThreadLocal<DateFormat>()
- {
- @Override
- protected DateFormat initialValue()
- {
- SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
- dateFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
- return dateFormat;
- }
- };
-
- /**
- * @param stringDate a string representing a date as either ISO8601, @millis@ or /Date() formats
- * @return a Date
- */
- public static Date fromString( String stringDate )
- {
- try
- {
- Date date = ISO8601_UTC.get().parse( stringDate );
- return date;
- }
- catch( ParseException e )
- {
- try
- {
- Date date = ISO8601.get().parse( stringDate );
- return date;
- }
- catch( ParseException e1 )
- {
- // @millis@ format
- if( stringDate.startsWith( "@" ) && stringDate.endsWith( "@" ) )
- {
- long time = Long.parseLong( stringDate.substring( 1, stringDate.length() - 1 ) );
- Date date = new Date( time );
- return date;
- }
- else if( stringDate.startsWith( "/Date(" ) && stringDate.endsWith( ")/" ) ) // Microsoft format
- {
- long time = Long.parseLong( stringDate.substring( 6, stringDate.length() - 2 ) );
- Date date = new Date( time );
- return date;
- }
- throw new IllegalStateException( "Illegal date:" + stringDate );
- }
- }
- }
-
- /**
- * @param date a Date
- * @return String representation in ISO8601 UTC
- */
- public static String toUtcString( Date date )
- {
- return ISO8601_UTC.get().format( date );
- }
-
- private Dates()
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/Fields.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/Fields.java b/core/api/src/main/java/org/qi4j/api/util/Fields.java
deleted file mode 100644
index c68d131..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/Fields.java
+++ /dev/null
@@ -1,51 +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.qi4j.api.util;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Type;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Function2;
-import org.qi4j.functional.Iterables;
-
-import static org.qi4j.functional.Iterables.iterable;
-
-/**
- * Useful methods for handling Fields.
- */
-public final class Fields
-{
- public static final Function2<Class<?>, String, Field> FIELD_NAMED = new Function2<Class<?>, String, Field>()
- {
- @Override
- public Field map( Class<?> aClass, String name )
- {
- return Iterables.first( Iterables.filter( Classes.memberNamed( name ), FIELDS_OF.map( aClass ) ) );
- }
- };
-
- public static final Function<Type, Iterable<Field>> FIELDS_OF = Classes.forClassHierarchy( new Function<Class<?>, Iterable<Field>>()
- {
- @Override
- public Iterable<Field> map( Class<?> type )
- {
- return iterable( type.getDeclaredFields() );
- }
- } );
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/ListMap.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/ListMap.java b/core/api/src/main/java/org/qi4j/api/util/ListMap.java
deleted file mode 100644
index 56778b8..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/ListMap.java
+++ /dev/null
@@ -1,42 +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.qi4j.api.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Map whose values are Lists of things. Create
- * one ArrayList for each key that is added. The list does not allow
- * duplicates.
- */
-public final class ListMap<K, V>
- extends HashMap<K, List<V>>
-{
- public void add( K key, V value )
- {
- List<V> list = get( key );
- if( list == null )
- {
- list = new ArrayList<V>();
- put( key, list );
- }
- if( !list.contains( value ) )
- {
- list.add( value );
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/Methods.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/Methods.java b/core/api/src/main/java/org/qi4j/api/util/Methods.java
deleted file mode 100644
index 93b78cf..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/Methods.java
+++ /dev/null
@@ -1,50 +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.qi4j.api.util;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Specification;
-
-import static org.qi4j.functional.Iterables.iterable;
-
-/**
- * Useful methods for handling Methods.
- */
-public class Methods
-{
- public static final Specification<Type> HAS_METHODS = new Specification<Type>()
- {
- @Override
- public boolean satisfiedBy( Type item )
- {
- return Classes.RAW_CLASS.map( item ).getDeclaredMethods().length > 0;
- }
- };
-
- public static final Function<Type, Iterable<Method>> METHODS_OF = Classes.forTypes( new Function<Type, Iterable<Method>>()
- {
- @Override
- public Iterable<Method> map( Type type )
- {
- return iterable( Classes.RAW_CLASS.map( type ).getDeclaredMethods() );
- }
- } );
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/NullArgumentException.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/NullArgumentException.java b/core/api/src/main/java/org/qi4j/api/util/NullArgumentException.java
deleted file mode 100644
index 58e514f..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/NullArgumentException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright 2007 Niclas Hedhman.
- *
- * 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.qi4j.api.util;
-
-/**
- * Thrown if an argument to a method was null, and the method required
- * it to be non-null.
- */
-public class NullArgumentException
- extends IllegalArgumentException
-{
- private static final long serialVersionUID = 4815431779868729780L;
-
- private NullArgumentException( String message )
- {
- super( message );
- }
-
- public static void validateNotNull( String parameterName, Object value )
- {
- if( value != null )
- {
- return;
- }
- String message = parameterName + " was null.";
- throw new NullArgumentException( message );
- }
-
- public static void validateNotEmpty( String parameterName, String value )
- {
- if( value == null )
- {
- String message = parameterName + " was null.";
- throw new NullArgumentException( message );
- }
- if( value.length() == 0 )
- {
- String message = parameterName + " was empty.";
- throw new NullArgumentException( message );
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/util/package.html
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/util/package.html b/core/api/src/main/java/org/qi4j/api/util/package.html
deleted file mode 100644
index ea75db3..0000000
--- a/core/api/src/main/java/org/qi4j/api/util/package.html
+++ /dev/null
@@ -1,21 +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.
--->
-<html>
- <body>
- <h2>API Utilities.</h2>
- </body>
-</html>
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/NoSuchValueException.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/NoSuchValueException.java b/core/api/src/main/java/org/qi4j/api/value/NoSuchValueException.java
deleted file mode 100644
index 256e9fc..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/NoSuchValueException.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 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.qi4j.api.value;
-
-import org.qi4j.api.composite.NoSuchCompositeException;
-
-/**
- * Thrown when no visible value of the requested type is found.
- */
-public class NoSuchValueException
- extends NoSuchCompositeException
-{
- public NoSuchValueException( String valueType, String moduleName )
- {
- super( "ValueComposite", valueType, moduleName );
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueBuilder.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueBuilder.java b/core/api/src/main/java/org/qi4j/api/value/ValueBuilder.java
deleted file mode 100644
index 1073a0d..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueBuilder.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2009, 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.qi4j.api.value;
-
-import org.qi4j.api.association.AssociationStateHolder;
-import org.qi4j.api.common.ConstructionException;
-
-/**
- * Builder for Values.
- */
-public interface ValueBuilder<T>
-{
- AssociationStateHolder state();
-
- /**
- * Get a representation of the state for the new Value.
- * It is possible to access and update properties and associations,
- * even immutable ones since the builder represents the initial state.
- *
- * @return a mutable instance of the Value type
- */
- T prototype();
-
- /**
- * Get a representation of the state of the given type for the new ValueComposite.
- * This is primarily used if you want to provide state for a private mixin type.
- *
- * @param mixinType the mixin which you want to provide state for
- *
- * @return a proxy implementing the given mixin type
- */
- <K> K prototypeFor( Class<K> mixinType );
-
- /**
- * Create a new Composite instance.
- *
- * @return a new Composite instance
- *
- * @throws org.qi4j.api.common.ConstructionException
- * thrown if it was not possible to instantiate the Composite
- */
- T newInstance()
- throws ConstructionException;
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueBuilderFactory.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueBuilderFactory.java b/core/api/src/main/java/org/qi4j/api/value/ValueBuilderFactory.java
deleted file mode 100644
index 57c4e29..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueBuilderFactory.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2009, 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.qi4j.api.value;
-
-import java.util.Map;
-import org.qi4j.api.association.AssociationDescriptor;
-import org.qi4j.api.common.ConstructionException;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.functional.Function;
-
-/**
- * Factory for Values and ValueBuilders.
- */
-public interface ValueBuilderFactory
-{
-
- /**
- * Instantiate a Value of the given type.
- *
- * @param valueType the Value type to instantiate
- *
- * @return a new Value instance
- *
- * @throws NoSuchValueException if no value extending the mixinType has been registered
- * @throws ConstructionException if the value could not be instantiated
- */
- <T> T newValue( Class<T> valueType )
- throws NoSuchValueException, ConstructionException;
-
- /**
- * Create a builder for creating new Values that implements the given Value type.
- * <p>The returned ValueBuilder can be reused to create several Values instances.</p>
- *
- * @param valueType an interface that describes the Composite to be instantiated
- *
- * @return a ValueBuilder for creation of ValueComposites implementing the interface
- *
- * @throws NoSuchValueException if no value extending the mixinType has been registered
- */
- <T> ValueBuilder<T> newValueBuilder( Class<T> valueType )
- throws NoSuchValueException;
-
- /**
- * Create a builder for creating a new Value starting with the given prototype.
- * <p>The returned ValueBuilder can only be used ONCE.</p>
- *
- * @param prototype a prototype the builder will use
- *
- * @return a ValueBuilder for creation of ValueComposites implementing the interface of the prototype
- *
- * @throws NoSuchValueException if no value extending the mixinType has been registered
- */
- <T> ValueBuilder<T> newValueBuilderWithPrototype( T prototype );
-
- /**
- * Create a builder for creating a new Value starting with the given state.
- * <p>The returned ValueBuilder can only be used ONCE.</p>
- *
- * @param mixinType an interface that describes the Composite to be instantiated
- * @param propertyFunction a function providing the state of properties
- * @param associationFunction a function providing the state of associations
- * @param manyAssociationFunction a function providing the state of many associations
- * @param namedAssociationFunction a function providing the state of named associations
- *
- * @return a ValueBuilder for creation of ValueComposites implementing the interface
- *
- * @throws NoSuchValueException if no value extending the mixinType has been registered
- */
- <T> ValueBuilder<T> newValueBuilderWithState( Class<T> mixinType,
- Function<PropertyDescriptor, Object> propertyFunction,
- Function<AssociationDescriptor, EntityReference> associationFunction,
- Function<AssociationDescriptor, Iterable<EntityReference>> manyAssociationFunction,
- Function<AssociationDescriptor, Map<String, EntityReference>> namedAssociationFunction );
-
- /**
- * Instantiate a Value of the given type using the serialized state given as String.
- *
- * @param valueType the Value type to instantiate
- * @param serializedState the state of the Value
- *
- * @return a new Value instance
- *
- * @throws NoSuchValueException if no value extending the mixinType has been registered
- * @throws ConstructionException if the value could not be instantiated
- */
- <T> T newValueFromSerializedState( Class<T> valueType, String serializedState );
-
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java b/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java
deleted file mode 100644
index 11cbddb..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java
+++ /dev/null
@@ -1,43 +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.qi4j.api.value;
-
-import org.qi4j.api.structure.Module;
-
-/**
- * Builder template for Values.
- */
-public abstract class ValueBuilderTemplate<T>
-{
- Class<T> type;
-
- protected ValueBuilderTemplate( Class<T> type )
- {
- this.type = type;
- }
-
- protected abstract void build( T prototype );
-
- public T newInstance( Module module )
- {
- ValueBuilder<T> builder = module.newValueBuilder( type );
- build( builder.prototype() );
- return builder.newInstance();
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueComposite.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueComposite.java b/core/api/src/main/java/org/qi4j/api/value/ValueComposite.java
deleted file mode 100644
index 7d5f48f..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueComposite.java
+++ /dev/null
@@ -1,43 +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.qi4j.api.value;
-
-import org.qi4j.api.association.AssociationMixin;
-import org.qi4j.api.association.ManyAssociationMixin;
-import org.qi4j.api.association.NamedAssociationMixin;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.property.Immutable;
-
-/**
- * ValueComposites are Composites that has state, and equality is defined from its values and not any identity nor
- * instance references.
- *
- * <ul>
- * <li>No Identity</li>
- * <li>No Lifecycle</li>
- * <li>Immutable</li>
- * <li>equals()/hashCode() operates on the Properties</li>
- * <li>Can have property and associations methods.</li>
- * <li>Can not reference Services</li>
- * <li>Can not have @Uses</li>
- * </ul>
- */
-@Immutable
-@Mixins( { AssociationMixin.class, ManyAssociationMixin.class, NamedAssociationMixin.class } )
-public interface ValueComposite
- extends Composite
-{
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueDescriptor.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueDescriptor.java b/core/api/src/main/java/org/qi4j/api/value/ValueDescriptor.java
deleted file mode 100644
index 710de89..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueDescriptor.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2009, 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.qi4j.api.value;
-
-import org.qi4j.api.association.AssociationStateDescriptor;
-import org.qi4j.api.composite.CompositeDescriptor;
-import org.qi4j.api.composite.StatefulCompositeDescriptor;
-import org.qi4j.api.type.ValueCompositeType;
-
-/**
- * Descriptor for ValueComposites.
- */
-public interface ValueDescriptor
- extends CompositeDescriptor, StatefulCompositeDescriptor
-{
- ValueCompositeType valueType();
-
- @Override
- AssociationStateDescriptor state();
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueDeserializer.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueDeserializer.java b/core/api/src/main/java/org/qi4j/api/value/ValueDeserializer.java
deleted file mode 100644
index 175b176..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueDeserializer.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2012, 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.qi4j.api.value;
-
-import java.io.InputStream;
-import org.qi4j.api.type.ValueType;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Function2;
-
-/**
- * Use a ValueDeserializer to create new values instances from serialized state.
- *
- * <p>
- * Serialized state must be one of:
- * </p>
- * <ul>
- * <li>a ValueComposite,</li>
- * <li>an EntityReference,</li>
- * <li>a Collection,</li>
- * <li>a Map,</li>
- * <li>a Plain Value.</li>
- * </ul>
- * <p>
- * Nested plain values, EntityReferences, Collections, Maps, ValueComposites are supported.
- * EntityReferences are deserialized as their identity string.
- * </p>
- * <p>
- * Plain values can be one of:
- * </p>
- * <ul>
- * <li>String,</li>
- * <li>Character or char,</li>
- * <li>Boolean or boolean,</li>
- * <li>Integer or int,</li>
- * <li>Long or long,</li>
- * <li>Short or short,</li>
- * <li>Byte or byte,</li>
- * <li>Float or float,</li>
- * <li>Double or double,</li>
- * <li>BigInteger,</li>
- * <li>BigDecimal,</li>
- * <li>Date,</li>
- * <li>DateTime (JodaTime),</li>
- * <li>LocalDateTime (JodaTime),</li>
- * <li>LocalDate (JodaTime).</li>
- * </ul>
- * <p>
- * Values of unknown types and all arrays are considered as {@link java.io.Serializable} and by so are deserialized
- * from base64 encoded bytes using pure Java serialization. If it happens that the input is invalid, a
- * ValueSerializationException is thrown.
- * </p>
- * <p>
- * Having type information in the serialized payload allows to keep actual ValueComposite types and by so
- * circumvent {@link org.qi4j.api.composite.AmbiguousTypeException} when deserializing.
- * </p>
- */
-public interface ValueDeserializer
-{
-
- /**
- * Factory method for a typed deserialize function.
- *
- * <p>The returned Function may throw {@link ValueSerializationException}.</p>
- *
- * @param type the value type
- * @param <T> the parametrized function return type
- * @return a deserialization function
- */
- <T> Function<String, T> deserialize( Class<T> type );
-
- /**
- * Factory method for a typed deserialize function.
- *
- * <p>The returned Function may throw {@link ValueSerializationException}.</p>
- *
- * @param valueType the value type
- * @param <T> the parametrized function return type
- * @return a deserialization function
- */
- <T> Function<String, T> deserialize( ValueType valueType );
-
- /**
- * Factory method for an untyped deserialize function.
- *
- * <p>The returned Function may throw {@link ValueSerializationException}.</p>
- *
- * @param <T> the parametrized function return type
- * @return a deserialization function
- */
- <T> Function2<ValueType, String, T> deserialize();
-
- /**
- * Deserialize a value from a state.
- *
- * @param <T> the parametrized returned type
- * @param type the value type
- * @param input the state
- * @return the value
- * @throws ValueSerializationException if the deserialization failed
- */
- <T> T deserialize( Class<?> type, String input )
- throws ValueSerializationException;
-
- /**
- * Deserialize a value from a state.
- *
- * @param <T> the parametrized returned type
- * @param valueType the value type
- * @param input the state
- * @return the value
- * @throws ValueSerializationException if the deserialization failed
- */
- <T> T deserialize( ValueType valueType, String input )
- throws ValueSerializationException;
-
- /**
- * Deserialize a value from a state.
- *
- * @param <T> the parametrized returned type
- * @param type the value type
- * @param input the state stream
- * @return the value
- * @throws ValueSerializationException if the deserialization failed
- */
- <T> T deserialize( Class<?> type, InputStream input )
- throws ValueSerializationException;
-
- /**
- * Deserialize a value from a state.
- *
- * @param <T> the parametrized returned type
- * @param valueType the value type
- * @param input the state stream
- * @return the value
- * @throws ValueSerializationException if the deserialization failed
- */
- <T> T deserialize( ValueType valueType, InputStream input )
- throws ValueSerializationException;
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java b/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java
deleted file mode 100644
index 31a4af0..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2012, 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.qi4j.api.value;
-
-/**
- * ValueSerialization API.
- *
- * See {@link ValueSerializer} and {@link ValueDeserializer}.
- */
-public interface ValueSerialization
- extends ValueSerializer, ValueDeserializer
-{
-
- /**
- * Serialization format @Service tags.
- *
- * <p>
- * ValueSerialization implementations should be tagged with theses at assembly time so that consumers can
- * specify which format they need.
- * </p>
- */
- interface Formats
- {
-
- /**
- * Tag a ValueSerialization service that support the JSON format.
- */
- String JSON = "json";
- /**
- * Tag a ValueSerialization service that support the XML format.
- */
- String XML = "xml";
- /**
- * Tag a ValueSerialization service that support the YAML format.
- */
- String YAML = "yaml";
- }
-
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueSerializationException.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueSerializationException.java b/core/api/src/main/java/org/qi4j/api/value/ValueSerializationException.java
deleted file mode 100644
index e1f3d44..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueSerializationException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2012, 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.qi4j.api.value;
-
-/**
- * Thrown when an error occur during value state (de)serialization.
- */
-public class ValueSerializationException
- extends RuntimeException
-{
-
- private static final long serialVersionUID = 1L;
-
- public ValueSerializationException()
- {
- super();
- }
-
- public ValueSerializationException( String message )
- {
- super( message );
- }
-
- public ValueSerializationException( String message, Throwable cause )
- {
- super( message, cause );
- }
-
- public ValueSerializationException( Throwable cause )
- {
- super( cause.getClass().getName() + ": " + cause.getMessage(), cause );
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java b/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java
deleted file mode 100644
index 337c37e..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Copyright (c) 2012-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.qi4j.api.value;
-
-import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.Map;
-import org.qi4j.api.composite.AmbiguousTypeException;
-import org.qi4j.functional.Function;
-
-/**
- * Use a ValueSerializer to serialize values state.
- *
- * <p>
- * Serialized object must be one of:
- * </p>
- * <ul>
- * <li>a ValueComposite,</li>
- * <li>an EntityComposite or EntityReference,</li>
- * <li>an Iterable,</li>
- * <li>a Map,</li>
- * <li>a Plain Value.</li>
- * </ul>
- * <p>
- * Nested plain values, EntityReferences, Iterables, Maps, ValueComposites and EntityComposites are supported.
- * EntityComposites and EntityReferences are serialized as their identity string.
- * </p>
- * <p>
- * Plain values can be one of:
- * </p>
- * <ul>
- * <li>String,</li>
- * <li>Character or char,</li>
- * <li>Boolean or boolean,</li>
- * <li>Integer or int,</li>
- * <li>Long or long,</li>
- * <li>Short or short,</li>
- * <li>Byte or byte,</li>
- * <li>Float or float,</li>
- * <li>Double or double,</li>
- * <li>BigInteger,</li>
- * <li>BigDecimal,</li>
- * <li>Date,</li>
- * <li>DateTime (JodaTime),</li>
- * <li>LocalDateTime (JodaTime),</li>
- * <li>LocalDate (JodaTime).</li>
- * </ul>
- * <p>
- * Values of unknown types and all arrays are considered as {@link java.io.Serializable} and by so are serialized to
- * base64 encoded bytes using pure Java serialization. If it happens that the value is not Serializable, a
- * ValueSerializationException is thrown.
- * </p>
- * <p>
- * Having type information in the serialized payload allows to keep actual ValueComposite types and by so
- * circumvent {@link AmbiguousTypeException} when deserializing.
- * </p>
- */
-public interface ValueSerializer
-{
-
- /**
- * Factory method for a serialize function.
- *
- * @param <T> the parametrized function input type
- * @return a serialization function.
- */
- <T> Function<T, String> serialize();
-
- /**
- * Factory method for a serialize function.
- *
- * @param <T> the parametrized function input type
- * @param options ValueSerializer Options
- * @return a serialization function.
- */
- <T> Function<T, String> serialize( Options options );
-
- /**
- * Factory method for a serialize function.
- *
- * @param <T> the parametrized function input type
- * @param includeTypeInfo if type information should be included in the output
- * @return a serialization function.
- */
- @Deprecated
- <T> Function<T, String> serialize( boolean includeTypeInfo );
-
- /**
- * Serialize the state of a value with type information.
- *
- * @param object an Object to serialize
- * @return the state
- * @throws ValueSerializationException if the Value serialization failed
- */
- String serialize( Object object )
- throws ValueSerializationException;
-
- /**
- * Serialize the state of a value.
- *
- * @param options ValueSerializer Options
- * @param object an Object to serialize
- * @return the state
- * @throws ValueSerializationException if the Value serialization failed
- */
- String serialize( Options options, Object object )
- throws ValueSerializationException;
-
- /**
- * Serialize the state of a value.
- *
- * @param object an Object to serialize
- * @param includeTypeInfo if type information should be included in the output
- * @return the state
- * @throws ValueSerializationException if the Value serialization failed
- */
- @Deprecated
- String serialize( Object object, boolean includeTypeInfo )
- throws ValueSerializationException;
-
- /**
- * Serialize the state of a value with type information.
- *
- * @param object an Object to serialize
- * @param output that will be used as output
- * @throws ValueSerializationException if the Value serialization failed
- */
- void serialize( Object object, OutputStream output )
- throws ValueSerializationException;
-
- /**
- * Serialize the state of a value.
- *
- * @param options ValueSerializer Options
- * @param object an Object to serialize
- * @param output that will be used as output
- * @throws ValueSerializationException if the Value serialization failed
- */
- void serialize( Options options, Object object, OutputStream output )
- throws ValueSerializationException;
-
- /**
- * Serialize the state of a value.
- *
- * @param object an Object to serialize
- * @param output that will be used as output
- * @param includeTypeInfo if type information should be included in the output
- * @throws ValueSerializationException if the Value serialization failed
- */
- @Deprecated
- void serialize( Object object, OutputStream output, boolean includeTypeInfo )
- throws ValueSerializationException;
-
- /**
- * Serialization options.
- */
- final class Options
- {
- /**
- * Boolean flag to include type information.
- * Default to TRUE.
- */
- public static final String INCLUDE_TYPE_INFO = "includeTypeInfo";
- public static final String MAP_ENTRIES_AS_OBJECTS = "mapentriesasobjects";
- private final Map<String, String> options = new HashMap<>();
-
- /**
- * Create new default ValueSerializer Options.
- */
- public Options()
- {
- this.options.put( INCLUDE_TYPE_INFO, "true" );
- this.options.put( MAP_ENTRIES_AS_OBJECTS, "false" );
- }
-
- /**
- * Set {@link #INCLUDE_TYPE_INFO} option to TRUE.
- * @return This
- */
- public Options withTypeInfo()
- {
- return put( INCLUDE_TYPE_INFO, true );
- }
-
- /**
- * Set {@link #INCLUDE_TYPE_INFO} option to FALSE.
- * @return This
- */
- public Options withoutTypeInfo()
- {
- return put( INCLUDE_TYPE_INFO, false );
- }
-
- public Options withMapEntriesAsObjects()
- {
- return put( MAP_ENTRIES_AS_OBJECTS, true );
- }
-
- public Options withMapEntriesAsKeyValuePairs()
- {
- return put( MAP_ENTRIES_AS_OBJECTS, false );
- }
-
- /**
- * Get Boolean option value.
- * @param option The option
- * @return The boolean value of the option, or null if absent
- */
- public Boolean getBoolean( String option )
- {
- if( !options.containsKey( option ) )
- {
- return null;
- }
- return Boolean.valueOf( options.get( option ) );
- }
-
- /**
- * Get Integer option value.
- * @param option The option
- * @return The integer value of the option, or null if absent
- */
- public Integer getInteger( String option )
- {
- if( !options.containsKey( option ) )
- {
- return null;
- }
- return Integer.valueOf( options.get( option ) );
- }
-
- /**
- * Get String option value.
- * @param option The option
- * @return The string value of the option, or null if absent
- */
- public String getString( String option )
- {
- return options.get( option );
- }
-
- /**
- * Put an option String value.
- * @param option The option
- * @param value The value
- * @return This Options instance
- */
- public Options put( String option, String value )
- {
- if( value == null )
- {
- return remove( option );
- }
- options.put( option, value );
- return this;
- }
-
- /**
- * Put an option boolean value.
- * @param option The option
- * @param value The value
- * @return This Options instance
- */
- public Options put( String option, Boolean value )
- {
- if( value == null )
- {
- return remove( option );
- }
- options.put( option, Boolean.toString( value ) );
- return this;
- }
-
- /**
- * Put an option Integer value.
- * @param option The option
- * @param value The value
- * @return This Options instance
- */
- public Options put( String option, Integer value )
- {
- if( value == null )
- {
- return remove( option );
- }
- options.put( option, value.toString() );
- return this;
- }
-
- /**
- * Remove an option value.
- * @param option The option
- * @return This Options instance
- */
- public Options remove( String option )
- {
- options.remove( option );
- return this;
- }
-
- /**
- * Get all defined options as a Map.
- * @return All defined options in a new Map
- */
- public Map<String, String> toMap()
- {
- return new HashMap<>( options );
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/main/java/org/qi4j/api/value/package.html
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/value/package.html b/core/api/src/main/java/org/qi4j/api/value/package.html
deleted file mode 100644
index 540b3f6..0000000
--- a/core/api/src/main/java/org/qi4j/api/value/package.html
+++ /dev/null
@@ -1,21 +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.
--->
-<html>
- <body>
- <h2>Value API.</h2>
- </body>
-</html>
http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/api/src/test/java/org/apache/zest/api/OperatorsTest.java
----------------------------------------------------------------------
diff --git a/core/api/src/test/java/org/apache/zest/api/OperatorsTest.java b/core/api/src/test/java/org/apache/zest/api/OperatorsTest.java
new file mode 100644
index 0000000..2f4301a
--- /dev/null
+++ b/core/api/src/test/java/org/apache/zest/api/OperatorsTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.api;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.apache.zest.api.activation.ActivationException;
+import org.apache.zest.api.composite.Composite;
+import org.apache.zest.api.entity.EntityBuilder;
+import org.apache.zest.api.entity.EntityComposite;
+import org.apache.zest.api.property.Property;
+import org.apache.zest.api.query.QueryBuilder;
+import org.apache.zest.api.query.QueryExpressions;
+import org.apache.zest.api.unitofwork.UnitOfWork;
+import org.apache.zest.api.unitofwork.UnitOfWorkCompletionException;
+import org.apache.zest.api.value.ValueComposite;
+import org.apache.zest.bootstrap.AssemblyException;
+import org.apache.zest.bootstrap.ModuleAssembly;
+import org.apache.zest.bootstrap.SingletonAssembler;
+import org.apache.zest.functional.Iterables;
+import org.apache.zest.functional.Specification;
+import org.apache.zest.test.EntityTestAssembler;
+
+/**
+ * TODO
+ */
+public class OperatorsTest
+{
+ @Test
+ public void testOperators()
+ throws UnitOfWorkCompletionException, ActivationException, AssemblyException
+ {
+ SingletonAssembler assembler = new SingletonAssembler()
+ {
+ @Override
+ public void assemble( ModuleAssembly module )
+ throws AssemblyException
+ {
+ new EntityTestAssembler().assemble( module );
+
+ module.entities( TestEntity.class );
+ module.values( TestValue.class );
+ module.forMixin( TestEntity.class ).declareDefaults().foo().set( "Bar" );
+ module.forMixin( TestValue.class ).declareDefaults().bar().set( "Xyz" );
+ }
+ };
+
+ UnitOfWork uow = assembler.module().newUnitOfWork();
+
+ try
+ {
+ EntityBuilder<TestEntity> entityBuilder = uow.newEntityBuilder( TestEntity.class, "123" );
+ entityBuilder.instance().value().set( assembler.module().newValue( TestValue.class ) );
+ TestEntity testEntity = entityBuilder.newInstance();
+
+ uow.complete();
+ uow = assembler.module().newUnitOfWork();
+
+ Iterable<TestEntity> entities = Iterables.iterable( testEntity = uow.get( testEntity ) );
+
+ QueryBuilder<TestEntity> builder = assembler.module().newQueryBuilder( TestEntity.class );
+
+ {
+ Specification<Composite> where = QueryExpressions.eq( QueryExpressions.templateFor( TestEntity.class )
+ .foo(), "Bar" );
+ Assert.assertTrue( where.satisfiedBy( testEntity ) );
+ System.out.println( where );
+ }
+ {
+ Specification<Composite> where = QueryExpressions.eq( QueryExpressions.templateFor( TestEntity.class )
+ .value()
+ .get()
+ .bar(), "Xyz" );
+ Assert.assertTrue( where.satisfiedBy( testEntity ) );
+ System.out.println( where );
+
+ Assert.assertTrue( builder.where( where ).newQuery( entities ).find().equals( testEntity ) );
+ }
+ }
+ finally
+ {
+ uow.discard();
+ }
+ }
+
+ public interface TestEntity
+ extends EntityComposite
+ {
+ Property<String> foo();
+
+ Property<TestValue> value();
+ }
+
+ public interface TestValue
+ extends ValueComposite
+ {
+ Property<String> bar();
+ }
+}