001 package org.nakedobjects.applib.annotation;
002
003 import java.lang.annotation.ElementType;
004 import java.lang.annotation.Inherited;
005 import java.lang.annotation.Retention;
006 import java.lang.annotation.RetentionPolicy;
007 import java.lang.annotation.Target;
008
009
010 /**
011 * Indicates that the class is part of (aggregated within) a larger class, which may reference objects outside
012 * the aggregate but may not be referenced by objects other than within the aggregate.
013 *
014 * <p>
015 * This is/should be interpreted by viewers as meaning that references to the object may not be shared between
016 * instances. So for example in the DnD viewer an aggregated object may not be drag/dropped into an empty
017 * "slot". Instead, the user would need to use copy/paste.
018 *
019 * <p>
020 * Note that aggregated objects are arbitrarily large and are usually mutable. {@link Value}s are similar
021 * (the only thing that one can definitively say about a value is that it is an aggregate, however values are
022 * typically small and are usually immutable.
023 *
024 * @see Value
025 */
026 @Inherited
027 @Target( { ElementType.TYPE })
028 @Retention(RetentionPolicy.RUNTIME)
029 public @interface Aggregated {}
030
031 // Copyright (c) Naked Objects Group Ltd.