http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/polygene/api/value/ValueDeserializer.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/polygene/api/value/ValueDeserializer.java b/core/api/src/main/java/org/apache/polygene/api/value/ValueDeserializer.java new file mode 100644 index 0000000..5f2628c --- /dev/null +++ b/core/api/src/main/java/org/apache/polygene/api/value/ValueDeserializer.java @@ -0,0 +1,166 @@ +/* + * 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.polygene.api.value; + +import java.io.InputStream; +import java.util.function.Function; +import org.apache.polygene.api.structure.ModuleDescriptor; +import org.apache.polygene.api.type.ValueType; + +/** + * 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 reference 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.apache.polygene.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( ModuleDescriptor module, 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( ModuleDescriptor module, 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> BiFunction<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( ModuleDescriptor module, 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( ModuleDescriptor module, 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( ModuleDescriptor module, 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( ModuleDescriptor module, ValueType valueType, InputStream input ) + throws ValueSerializationException; +}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/polygene/api/value/ValueSerialization.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/polygene/api/value/ValueSerialization.java b/core/api/src/main/java/org/apache/polygene/api/value/ValueSerialization.java new file mode 100644 index 0000000..91c1081 --- /dev/null +++ b/core/api/src/main/java/org/apache/polygene/api/value/ValueSerialization.java @@ -0,0 +1,56 @@ +/* + * 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.polygene.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/1c722f44/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializationException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializationException.java b/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializationException.java new file mode 100644 index 0000000..62faa75 --- /dev/null +++ b/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializationException.java @@ -0,0 +1,50 @@ +/* + * 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.polygene.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/1c722f44/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializer.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializer.java b/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializer.java new file mode 100644 index 0000000..f2c6138 --- /dev/null +++ b/core/api/src/main/java/org/apache/polygene/api/value/ValueSerializer.java @@ -0,0 +1,327 @@ +/* + * 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.polygene.api.value; + +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import org.apache.polygene.api.composite.AmbiguousTypeException; + +/** + * 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 reference 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/1c722f44/core/api/src/main/java/org/apache/polygene/api/value/package.html ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/polygene/api/value/package.html b/core/api/src/main/java/org/apache/polygene/api/value/package.html new file mode 100644 index 0000000..def90fa --- /dev/null +++ b/core/api/src/main/java/org/apache/polygene/api/value/package.html @@ -0,0 +1,24 @@ +<!-- + ~ 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/1c722f44/core/api/src/main/java/org/apache/zest/api/ZestAPI.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/ZestAPI.java b/core/api/src/main/java/org/apache/zest/api/ZestAPI.java deleted file mode 100644 index 953e4c5..0000000 --- a/core/api/src/main/java/org/apache/zest/api/ZestAPI.java +++ /dev/null @@ -1,188 +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.api; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Proxy; -import java.util.function.Function; -import org.apache.zest.api.association.AbstractAssociation; -import org.apache.zest.api.association.AssociationDescriptor; -import org.apache.zest.api.composite.Composite; -import org.apache.zest.api.composite.CompositeDescriptor; -import org.apache.zest.api.composite.CompositeInstance; -import org.apache.zest.api.composite.InvalidCompositeException; -import org.apache.zest.api.composite.ModelDescriptor; -import org.apache.zest.api.composite.TransientDescriptor; -import org.apache.zest.api.entity.EntityDescriptor; -import org.apache.zest.api.property.Property; -import org.apache.zest.api.property.PropertyDescriptor; -import org.apache.zest.api.service.ServiceDescriptor; -import org.apache.zest.api.structure.ModuleDescriptor; -import org.apache.zest.api.value.ValueDescriptor; - -/** - * Encapsulation of the Polygene API. - */ -public interface PolygeneAPI -{ - /** - * If a Modifier gets a reference to the Composite using @This, - * then that reference must be dereferenced using this method - * before handing it out for others to use. - * - * @param <T> Parameterized type of the Composite - * @param composite instance reference injected in Modified using @This - * - * @return the dereferenced Composite - */ - <T> T dereference( T composite ); - - /** - * Returns the Module or UnitOfWork where the Composite belongs. - * - * @param compositeOrUow The Composite (Service, Value, Entity or Transient) or UnitOfWork to lookup the Module it - * belongs to. - * - * @return The Module instance where the Composite or UnitOfWork belongs to. - */ - ModuleDescriptor moduleOf( Object compositeOrUow ); - - /** - * Returns the ModelDescriptor of the Composite. - * - * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the - * ModelDescriptor - * - * @return The ModelDescriptor of the Composite - */ - ModelDescriptor modelDescriptorFor( Object compositeOrServiceReference ); - - /** - * Returns the CompositeDescriptor of the Composite. - * - * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the - * CompositeDescriptor - * - * @return The CompositeDescriptor of the Composite - */ - CompositeDescriptor compositeDescriptorFor( Object compositeOrServiceReference ); - - /** - * Returns the TransientDescriptor of the TransientComposite. - * - * @param transsient The TransientComposite for which to lookup the TransientDescriptor - * - * @return The TransientDescriptor of the TransientComposite - */ - TransientDescriptor transientDescriptorFor( Object transsient ); - - /** - * Returns the EntityDescriptor of the EntityComposite. - * - * @param entity The EntityComposite for which to lookup the EntityDescriptor - * - * @return The EntityDescriptor of the EntityComposite - */ - EntityDescriptor entityDescriptorFor( Object entity ); - - /** - * Returns the ValueDescriptor of the ValueComposite. - * - * @param value The ValueComposite for which to lookup the ValueDescriptor - * - * @return The ValueDescriptor of the ValueComposite - */ - ValueDescriptor valueDescriptorFor( Object value ); - - /** - * Returns the ServiceDescriptor of the ServiceComposite. - * - * @param service The ServiceComposite for which to lookup the ServiceDescriptor - * - * @return The ServiceDescriptor of the ServiceComposite - */ - ServiceDescriptor serviceDescriptorFor( Object service ); - - /** - * Returns the PropertyDescriptor of the Property. - * - * @param property The Property for which to lookup the PropertyDescriptor - * - * @return The PropertyDescriptor of the Property - */ - PropertyDescriptor propertyDescriptorFor( Property<?> property ); - - /** - * Returns the AssociationDescriptor of the Association. - * - * @param association The Association for which to lookup the AssociationDescriptor - * - * @return The AssociationDescriptor of the Association - */ - AssociationDescriptor associationDescriptorFor( AbstractAssociation association ); - - /** - * Function that returns the CompositeDescriptor of a Composite. - */ - Function<Composite, CompositeDescriptor> FUNCTION_DESCRIPTOR_FOR = composite -> { - if( composite instanceof Proxy ) - { - InvocationHandler invocationHandler = Proxy.getInvocationHandler( composite ); - return ( (CompositeInstance) invocationHandler ).descriptor(); - } - try - { - Class<? extends Composite> compositeClass = composite.getClass(); - Field instanceField = compositeClass.getField( "_instance" ); - Object instance = instanceField.get( composite ); - return ( (CompositeInstance) instance ).descriptor(); - } - catch( Exception e ) - { - InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" ); - exception.initCause( e ); - throw exception; - } - }; - - /** - * Function that returns the CompositeInstance of a Composite. - */ - Function<Composite, CompositeInstance> FUNCTION_COMPOSITE_INSTANCE_OF = composite -> { - if( composite instanceof Proxy ) - { - return ( (CompositeInstance) Proxy.getInvocationHandler( composite ) ); - } - try - { - Class<? extends Composite> compositeClass = composite.getClass(); - Field instanceField = compositeClass.getField( "_instance" ); - Object instance = instanceField.get( composite ); - return (CompositeInstance) instance; - } - catch( Exception e ) - { - InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" ); - exception.initCause( e ); - throw exception; - } - }; -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/Activation.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/Activation.java b/core/api/src/main/java/org/apache/zest/api/activation/Activation.java deleted file mode 100644 index 3130421..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/Activation.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.api.activation; - -/** - * Interface used by Structure elements and Services that can be activated and passivated. - * <p>Application and Layer expose this interface so you can activate and passivate them.</p> - * <p>Module and ServiceComposite activation/passivation is handled by the Polygene runtime.</p> - */ -@SuppressWarnings("JavaDoc") -public interface Activation -{ - /** - * Activate. - * <p>Fail fast execution order is:</p> - * <ul> - * <li>Fire {@link ActivationEvent.EventType#ACTIVATING}</li> - * <li>Call {@link Activator#beforeActivation(java.lang.Object)} on each Activator</li> - * <li>Call {@link #activate()} children</li> - * <li>Call {@link Activator#afterActivation(java.lang.Object)} on each Activator</li> - * <li>Fire {@link ActivationEvent.EventType#ACTIVATED}</li> - * </ul> - * <p>If an Exception is thrown, already activated nodes are passivated.</p> - * @throws ActivationException with first Exception of activation plus the PassivationException if any - */ - void activate() - throws ActivationException; - - /** - * Passivate. - * <p>Fail safe execution order is:</p> - * <ul> - * <li>Fire {@link ActivationEvent.EventType#PASSIVATING}</li> - * <li>Call {@link Activator#beforePassivation(java.lang.Object)} on each Activator</li> - * <li>Call {@link #passivate()} children</li> - * <li>Call {@link Activator#afterPassivation(java.lang.Object)} on each Activator</li> - * <li>Fire {@link ActivationEvent.EventType#PASSIVATED}</li> - * </ul> - * @throws PassivationException after passivation with all Exceptions of passivation if any - */ - void passivate() - throws PassivationException; -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/ActivationEvent.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/ActivationEvent.java b/core/api/src/main/java/org/apache/zest/api/activation/ActivationEvent.java deleted file mode 100644 index 344f720..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/ActivationEvent.java +++ /dev/null @@ -1,99 +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.api.activation; - -import java.time.Instant; -import org.apache.zest.api.time.SystemTime; - -/** - * ActivationEvents are fired during activation and passivation of instances in Polygene. - */ -public final class ActivationEvent -{ - public enum EventType - { - ACTIVATING, ACTIVATED, PASSIVATING, PASSIVATED - } - - private final Instant timestamp; - private final Object source; - private final EventType type; - - public ActivationEvent( Object source, EventType type ) - { - this.timestamp = SystemTime.now(); - this.source = source; - this.type = type; - } - - /** - * @return the source of the Activation event - */ - public Object source() - { - return source; - } - - /** - * @return the type of the Activation event - */ - public EventType type() - { - return type; - } - - - /** - * - * @return The instant that this event was created. - */ - public Instant eventTime() - { - return timestamp; - } - - /** - * @return an informative message describing the event - */ - public String message() - { - switch( type ) - { - case ACTIVATING: - return "Activating " + source; - case ACTIVATED: - return "Activated " + source; - case PASSIVATING: - return "Passivating " + source; - case PASSIVATED: - return "Passivated " + source; - } - return ""; - } - - /** - * @see #message() - */ - @Override - public String toString() - { - return message() + "@" + timestamp; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListener.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListener.java b/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListener.java deleted file mode 100644 index 53febcc..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListener.java +++ /dev/null @@ -1,29 +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.api.activation; - -/** - * Listener for ActivationEvent events - */ -public interface ActivationEventListener -{ - void onEvent( ActivationEvent event ) - throws Exception; -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListenerRegistration.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListenerRegistration.java b/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListenerRegistration.java deleted file mode 100644 index 7a13520..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/ActivationEventListenerRegistration.java +++ /dev/null @@ -1,38 +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.api.activation; - -/** - * Use this to register listeners for ActivationEvents. - * - * This is implemented by Application, Layer, Module, for example. - */ -public interface ActivationEventListenerRegistration -{ - /** - * @param listener will be notified when Activation events occur - */ - void registerActivationEventListener( ActivationEventListener listener ); - - /** - * @param listener will not be notified when Activation events occur anymore - */ - void deregisterActivationEventListener( ActivationEventListener listener ); -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/ActivationException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/ActivationException.java b/core/api/src/main/java/org/apache/zest/api/activation/ActivationException.java deleted file mode 100644 index 293f3cb..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/ActivationException.java +++ /dev/null @@ -1,32 +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.api.activation; - -/** - * Thrown when unable to activate. - */ -public class ActivationException extends Exception -{ - private static final long serialVersionUID = 1L; - public ActivationException( String message, Throwable cause ) - { - super( message, cause ); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/Activator.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/Activator.java b/core/api/src/main/java/org/apache/zest/api/activation/Activator.java deleted file mode 100644 index c2da2f2..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/Activator.java +++ /dev/null @@ -1,72 +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.api.activation; - -/** - * Assemble Activators to hook Services Activation. - * - * @param <ActivateeType> Type of the activatee. - * - * @see ActivatorAdapter - * @see org.apache.zest.api.service.ServiceActivation - */ -public interface Activator<ActivateeType> -{ - - /** - * Called before activatee activation. - * - * @param activating The instance that is about to be activated. - * - * @throws Exception Allowed to throw Exception which will be wrapped in an ActivationException - */ - void beforeActivation( ActivateeType activating ) - throws Exception; - - /** - * Called after activatee activation. - * - * @param activated The instance that has just been activated. - * - * @throws Exception Allowed to throw Exception which will be wrapped in an ActivationException - */ - void afterActivation( ActivateeType activated ) - throws Exception; - - /** - * Called before activatee passivation. - * - * @param passivating The instance that is about to be passivated. - * - * @throws Exception Allowed to throw Exception which will be wrapped in an PassivationException - */ - void beforePassivation( ActivateeType passivating ) - throws Exception; - - /** - * Called after activatee passivation. - * - * @param passivated The instance that has just been passivated. - * - * @throws Exception Allowed to throw Exception which will be wrapped in an PassivationException - */ - void afterPassivation( ActivateeType passivated ) - throws Exception; -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/ActivatorAdapter.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/ActivatorAdapter.java b/core/api/src/main/java/org/apache/zest/api/activation/ActivatorAdapter.java deleted file mode 100644 index 68baab6..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/ActivatorAdapter.java +++ /dev/null @@ -1,70 +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.api.activation; - -/** - * Adapter for Activator. - * <p>If you are thinking about Service activation, see {@link org.apache.zest.api.service.ServiceActivatorAdapter}.</p> - * - * @param <ActivateeType> Type of the activatee. - */ -public class ActivatorAdapter<ActivateeType> - implements Activator<ActivateeType> -{ - /** - * Called before activatee activation. - * @param activating Activating activatee - */ - @Override - public void beforeActivation( ActivateeType activating ) - throws Exception - { - } - - /** - * Called after activatee activation. - * @param activated Activating activatee - */ - @Override - public void afterActivation( ActivateeType activated ) - throws Exception - { - } - - /** - * Called before activatee passivation. - * @param passivating Passivating activatee - */ - @Override - public void beforePassivation( ActivateeType passivating ) - throws Exception - { - } - - /** - * Called after activatee passivation. - * @param passivated Passivated activatee - */ - @Override - public void afterPassivation( ActivateeType passivated ) - throws Exception - { - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/ActivatorDescriptor.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/ActivatorDescriptor.java b/core/api/src/main/java/org/apache/zest/api/activation/ActivatorDescriptor.java deleted file mode 100644 index 7adcc30..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/ActivatorDescriptor.java +++ /dev/null @@ -1,27 +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.api.activation; - -/** - * Activator Descriptor. - */ -public interface ActivatorDescriptor -{ -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/Activators.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/Activators.java b/core/api/src/main/java/org/apache/zest/api/activation/Activators.java deleted file mode 100644 index 9b12f59..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/Activators.java +++ /dev/null @@ -1,41 +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.api.activation; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * This annotation is used in ServiceComposites to declare Activator implementation classes. - */ -@Retention( RetentionPolicy.RUNTIME ) -@Target( ElementType.TYPE ) -@Documented -public @interface Activators -{ - - /** - * @return Activator implementation classes. - */ - Class<? extends Activator<?>>[] value(); -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/ApplicationPassivationThread.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/ApplicationPassivationThread.java b/core/api/src/main/java/org/apache/zest/api/activation/ApplicationPassivationThread.java deleted file mode 100644 index 0923e67..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/ApplicationPassivationThread.java +++ /dev/null @@ -1,114 +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.api.activation; - -import java.io.PrintStream; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.apache.zest.api.structure.Application; - -/** - * Application Passivation Thread to use as a Shutdown Hook. - * <pre>Runtime.getRuntime().addShutdownHook( new ApplicationPassivationThread( application ) );</pre> - */ -public final class ApplicationPassivationThread - extends Thread -{ - /** - * Create a new Application Passivation Thread that output errors to STDERR. - * @param application The Application to passivate - */ - @SuppressWarnings("unused") - public ApplicationPassivationThread(final Application application ) - { - this( application, null, null ); - } - - /** - * Create a new Application Passivation Thread that output errors to a Logger. - * @param application The Application to passivate - * @param logger Logger for errors - */ - @SuppressWarnings("unused") - public ApplicationPassivationThread(Application application, Logger logger ) - { - this( application, null, logger ); - } - - /** - * Create a new Application Passivation Thread that output errors to a PrintStream. - * @param application The Application to passivate - * @param output PrintStream for errors - */ - public ApplicationPassivationThread( Application application, PrintStream output ) - { - this( application, output, null ); - } - - private ApplicationPassivationThread( Application application, PrintStream output, Logger logger ) - { - super( new ApplicationPassivation( application, output, logger ), - application.name() + " Passivation Thread" ); - } - - private static class ApplicationPassivation - implements Runnable - { - - private final Application application; - private final PrintStream output; - private final Logger logger; - - private ApplicationPassivation( Application application, PrintStream output, Logger logger ) - { - this.application = application; - this.output = output; - this.logger = logger; - } - - @Override - public void run() - { - try - { - application.passivate(); - } - catch( PassivationException ex ) - { - String message = application.name() + " " + ex.getMessage(); - if( logger != null ) - { - logger.log( Level.SEVERE, message, ex ); - } - else if( output != null ) - { - output.println( message ); - ex.printStackTrace( output ); - } - else - { - ex.printStackTrace(); - } - } - } - - } - -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/PassivationException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/PassivationException.java b/core/api/src/main/java/org/apache/zest/api/activation/PassivationException.java deleted file mode 100644 index fd212da..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/PassivationException.java +++ /dev/null @@ -1,57 +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.api.activation; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -/** - * Thrown when unable to passivate. - * - * Printed StackTrace contains all causes in order as suppressed exceptions. - */ -public final class PassivationException - extends Exception -{ - - private static final long serialVersionUID = 1L; - private final List<Exception> causes; - - /** - * Create new PassivationException. - * @param exceptions All exceptions encountered during passivation, in order - */ - public PassivationException( Collection<Exception> exceptions ) - { - super( "Passivation Exception - [has " + exceptions.size() + " cause(s)]" ); - exceptions.forEach( this::addSuppressed ); - this.causes = new ArrayList<>( exceptions ); - } - - /** - * @return All exceptions encountered during passivation, in order - */ - public List<Exception> causes() - { - return causes; - } - -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/activation/package.html ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/activation/package.html b/core/api/src/main/java/org/apache/zest/api/activation/package.html deleted file mode 100644 index c11d85f..0000000 --- a/core/api/src/main/java/org/apache/zest/api/activation/package.html +++ /dev/null @@ -1,29 +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>Activation API.</h2> - <p> - The Activation API package contains types used by client code to integrate with the Polygene⢠Runtime activation - mechanism. In assembly, client code can easily listen to Structure (Application, Layers and Modules) and - Services activation events, or, declare Structure and Service Activators. - </p> - </body> -</html> http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/AbstractAssociation.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AbstractAssociation.java b/core/api/src/main/java/org/apache/zest/api/association/AbstractAssociation.java deleted file mode 100644 index 59e4347..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/AbstractAssociation.java +++ /dev/null @@ -1,28 +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.api.association; - -/** - * Base interface for all associations. - */ -public interface AbstractAssociation -{ -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/Association.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/Association.java b/core/api/src/main/java/org/apache/zest/api/association/Association.java deleted file mode 100644 index 5b5a62a..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/Association.java +++ /dev/null @@ -1,52 +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.api.association; - -import org.apache.zest.api.entity.EntityReference; - -/** - * Association to a single EntityComposite. - */ -public interface Association<T> extends AbstractAssociation -{ - /** - * Get the associated entity. - * - * @return the associated entity - */ - T get(); - - /** - * Set the associated entity. - * - * @param associated the entity - * - * @throws IllegalArgumentException thrown if the entity is not a valid reference for this association - * @throws IllegalStateException thrown if association is immutable - */ - void set( T associated ) - throws IllegalArgumentException, IllegalStateException; - - /** - * @return the the reference of the associated entity. - */ - EntityReference reference(); -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/AssociationDescriptor.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AssociationDescriptor.java b/core/api/src/main/java/org/apache/zest/api/association/AssociationDescriptor.java deleted file mode 100644 index 7eeb241..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/AssociationDescriptor.java +++ /dev/null @@ -1,69 +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.api.association; - -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.Type; -import org.apache.zest.api.common.QualifiedName; -import org.apache.zest.api.structure.MetaInfoHolder; - -/** - * Association Descriptor. - */ -public interface AssociationDescriptor extends MetaInfoHolder -{ - /** - * Get the qualified name of the association. This is constructed by - * concatenating the name of the declaring interface with the name - * of the method, using ":" as separator. - * <p> - * Example: - * </p> - * <p> - * com.somecompany.MyInterface with association method - * </p> - * <pre><code> - * Association<String> someAssociation(); - * </code></pre> - * will have the qualified name: - * <pre><code> - * com.somecompany.MyInterface:someAssociation - * </code></pre> - * - * @return the qualified name of the association - */ - QualifiedName qualifiedName(); - - /** - * Get the type of the associated Entities - * - * @return the type of the associated Entities - */ - Type type(); - - boolean isImmutable(); - - boolean isAggregated(); - - AccessibleObject accessor(); - - boolean queryable(); -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/AssociationMixin.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AssociationMixin.java b/core/api/src/main/java/org/apache/zest/api/association/AssociationMixin.java deleted file mode 100644 index 0cbd3da..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/AssociationMixin.java +++ /dev/null @@ -1,58 +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.api.association; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import org.apache.zest.api.common.AppliesTo; -import org.apache.zest.api.common.AppliesToFilter; -import org.apache.zest.api.injection.scope.State; - -/** - * Generic mixin for associations. - */ -@AppliesTo( { AssociationMixin.AssociationFilter.class } ) -public final class AssociationMixin - implements InvocationHandler -{ - @State - private AssociationStateHolder associations; - - @Override - public Object invoke( Object proxy, Method method, Object[] args ) - throws Throwable - { - return associations.associationFor( method ); - } - - /** - * Associations generic mixin AppliesToFilter. - */ - static class AssociationFilter - implements AppliesToFilter - { - @Override - public boolean appliesTo( Method method, Class<?> mixin, Class<?> compositeType, Class<?> modifierClass ) - { - return Association.class.isAssignableFrom( method.getReturnType() ); - } - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java b/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java deleted file mode 100644 index 2e9c522..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java +++ /dev/null @@ -1,54 +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.api.association; - -import java.util.stream.Stream; -import org.apache.zest.api.common.QualifiedName; -import org.apache.zest.api.composite.StateDescriptor; - -/** - * Associations State Descriptor. - */ -public interface AssociationStateDescriptor extends StateDescriptor -{ - AssociationDescriptor getAssociationByName( String name ) - throws IllegalArgumentException; - - AssociationDescriptor getAssociationByQualifiedName( QualifiedName name ) - throws IllegalArgumentException; - - AssociationDescriptor getManyAssociationByName( String name ) - throws IllegalArgumentException; - - AssociationDescriptor getManyAssociationByQualifiedName( QualifiedName name ) - throws IllegalArgumentException; - - AssociationDescriptor getNamedAssociationByName( String name ) - throws IllegalArgumentException; - - AssociationDescriptor getNamedAssociationByQualifiedName( QualifiedName name ) - throws IllegalArgumentException; - - Stream<? extends AssociationDescriptor> associations(); - - Stream<? extends AssociationDescriptor> manyAssociations(); - - Stream<? extends AssociationDescriptor> namedAssociations(); -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java b/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java deleted file mode 100644 index b2e999d..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java +++ /dev/null @@ -1,79 +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.api.association; - -import java.lang.reflect.AccessibleObject; -import java.util.stream.Stream; -import org.apache.zest.api.property.StateHolder; - -/** - * This represents the state of a entity (properties+associations). - */ -public interface AssociationStateHolder - extends StateHolder -{ - /** - * Get an association for a specific accessor method. - * - * @param associationMethod for the association - * - * @return the association - */ - <T> Association<T> associationFor( AccessibleObject associationMethod ); - - /** - * Get all associations. - * - * @return stream of associations - */ - Stream<? extends Association<?>> allAssociations(); - - /** - * Get a many-association for a specific accessor method. - * - * @param manyassociationMethod for the many-association - * - * @return the association - */ - <T> ManyAssociation<T> manyAssociationFor( AccessibleObject manyassociationMethod ); - - /** - * Get all ManyAssociations. - * - * @return stream of many-associations - */ - Stream<? extends ManyAssociation<?>> allManyAssociations(); - - /** - * Get a named-association for a specific accessor method. - * - * @param namedassociationMethod for the named-association - * - * @return the association - */ - <T> NamedAssociation<T> namedAssociationFor( AccessibleObject namedassociationMethod ); - - /** - * Get all named-associations. - * - * @return stream of named-associations - */ - Stream<? extends NamedAssociation<?>> allNamedAssociations(); -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/AssociationWrapper.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AssociationWrapper.java b/core/api/src/main/java/org/apache/zest/api/association/AssociationWrapper.java deleted file mode 100644 index b6b7e50..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/AssociationWrapper.java +++ /dev/null @@ -1,81 +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.api.association; - -import org.apache.zest.api.entity.EntityReference; - -/** - * If you want to catch getting and setting association, then create a GenericConcern - * that wraps the Polygene-supplied Association instance with AssociationWrappers. Override - * get() and/or set() to perform your custom code. - */ -public class AssociationWrapper - implements Association<Object> -{ - protected Association<Object> next; - - public AssociationWrapper( Association<Object> next ) - { - this.next = next; - } - - public Association<Object> next() - { - return next; - } - - @Override - public Object get() - { - return next.get(); - } - - @Override - public void set( Object associated ) - throws IllegalArgumentException - { - next.set( associated ); - } - - @Override - public EntityReference reference() - { - return next.reference(); - } - - @Override - public int hashCode() - { - return next.hashCode(); - } - - @Override - @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") - public boolean equals( Object obj ) - { - return next.equals( obj ); - } - - @Override - public String toString() - { - return next.toString(); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/GenericAssociationInfo.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/GenericAssociationInfo.java b/core/api/src/main/java/org/apache/zest/api/association/GenericAssociationInfo.java deleted file mode 100644 index 2d53bc7..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/GenericAssociationInfo.java +++ /dev/null @@ -1,63 +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.api.association; - -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import static org.apache.zest.api.util.Classes.typeOf; - -/** - * Generic Association info. - */ -public final class GenericAssociationInfo -{ - public static Type associationTypeOf( AccessibleObject accessor ) - { - return toAssociationType( typeOf( accessor ) ); - } - - public static Type toAssociationType( Type methodReturnType ) - { - if( methodReturnType instanceof ParameterizedType ) - { - ParameterizedType parameterizedType = (ParameterizedType) methodReturnType; - if( AbstractAssociation.class.isAssignableFrom( (Class<?>) parameterizedType.getRawType() ) ) - { - return parameterizedType.getActualTypeArguments()[ 0 ]; - } - } - if (!(methodReturnType instanceof Class)) - { - throw new IllegalArgumentException( "Unable to make an association with " + methodReturnType ); - } - Type[] interfaces = ((Class<?>) methodReturnType).getGenericInterfaces(); - for (Type anInterface : interfaces) - { - Type associationType = toAssociationType(anInterface); - if (associationType != null) - { - return associationType; - } - } - return null; - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/ManyAssociation.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/ManyAssociation.java b/core/api/src/main/java/org/apache/zest/api/association/ManyAssociation.java deleted file mode 100644 index 0283d62..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/ManyAssociation.java +++ /dev/null @@ -1,58 +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.api.association; - -import java.util.List; -import java.util.Set; -import java.util.stream.Stream; -import org.apache.zest.api.entity.EntityReference; - -/** - * Association to a collection of entities. - */ -public interface ManyAssociation<T> extends Iterable<T>, AbstractAssociation -{ - /** - * Returns the number of references in this association. - * @return the number of references in this association. - */ - int count(); - - boolean contains( T entity ); - - boolean add( int i, T entity ); - - boolean add( T entity ); - - boolean remove( T entity ); - - T get( int i ); - - List<T> toList(); - - Set<T> toSet(); - - /** - * Returns a stream of the references to the associated entities. - * @return the references to the associated entities. - */ - Stream<EntityReference> references(); -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationMixin.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationMixin.java b/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationMixin.java deleted file mode 100644 index a948b55..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationMixin.java +++ /dev/null @@ -1,58 +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.api.association; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import org.apache.zest.api.common.AppliesTo; -import org.apache.zest.api.common.AppliesToFilter; -import org.apache.zest.api.injection.scope.State; - -/** - * Generic mixin for associations. - */ -@AppliesTo( { ManyAssociationMixin.AssociationFilter.class } ) -public final class ManyAssociationMixin - implements InvocationHandler -{ - @State - private AssociationStateHolder associations; - - @Override - public Object invoke( Object proxy, Method method, Object[] args ) - throws Throwable - { - return associations.manyAssociationFor( method ); - } - - /** - * ManyAssociations generic mixin AppliesToFilter. - */ - static class AssociationFilter - implements AppliesToFilter - { - @Override - public boolean appliesTo( Method method, Class<?> mixin, Class<?> compositeType, Class<?> modifierClass ) - { - return ManyAssociation.class.isAssignableFrom( method.getReturnType() ); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationWrapper.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationWrapper.java b/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationWrapper.java deleted file mode 100644 index b23aff9..0000000 --- a/core/api/src/main/java/org/apache/zest/api/association/ManyAssociationWrapper.java +++ /dev/null @@ -1,126 +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.api.association; - -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.stream.Stream; -import org.apache.zest.api.entity.EntityReference; - -/** - * If you want to catch calls to ManyAssociations, then create a GenericConcern - * that wraps the Polygene-supplied ManyAssociation instance with ManyAssociationWrappers. Override - * methods to perform your custom code. - */ -public class ManyAssociationWrapper - implements ManyAssociation<Object> -{ - protected ManyAssociation<Object> next; - - public ManyAssociationWrapper( ManyAssociation<Object> next ) - { - this.next = next; - } - - public ManyAssociation<Object> next() - { - return next; - } - - @Override - public int count() - { - return next.count(); - } - - @Override - public boolean contains( Object entity ) - { - return next.contains( entity ); - } - - @Override - public boolean add( int i, Object entity ) - { - return next.add( i, entity ); - } - - @Override - public boolean add( Object entity ) - { - return next.add( entity ); - } - - @Override - public boolean remove( Object entity ) - { - return next.remove( entity ); - } - - @Override - public Object get( int i ) - { - return next.get( i ); - } - - @Override - public List<Object> toList() - { - return next.toList(); - } - - @Override - public Set<Object> toSet() - { - return next.toSet(); - } - - @Override - public Stream<EntityReference> references() - { - return next.references(); - } - - @Override - public Iterator<Object> iterator() - { - return next.iterator(); - } - - @Override - public int hashCode() - { - return next.hashCode(); - } - - @Override - @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") - public boolean equals( Object obj ) - { - return next.equals( obj ); - } - - @Override - public String toString() - { - return next.toString(); - } -}
