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     * &quot;slot&quot;. 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.