001/*
002 *  Licensed to the Apache Software Foundation (ASF) under one
003 *  or more contributor license agreements.  See the NOTICE file
004 *  distributed with this work for additional information
005 *  regarding copyright ownership.  The ASF licenses this file
006 *  to you under the Apache License, Version 2.0 (the
007 *  "License"); you may not use this file except in compliance
008 *  with the License.  You may obtain a copy of the License at
009 *
010 *        http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *  Unless required by applicable law or agreed to in writing,
013 *  software distributed under the License is distributed on an
014 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 *  KIND, either express or implied.  See the License for the
016 *  specific language governing permissions and limitations
017 *  under the License.
018 */
019
020package org.apache.isis.core.metamodel.facets.object.aggregated;
021
022import java.util.List;
023import java.util.Set;
024
025import org.apache.isis.core.metamodel.facets.MarkerFacet;
026import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
027
028/**
029 * Indicates that this class is parented, that is, wholly contained within a
030 * larger object.
031 * 
032 * <p>
033 * There are two classes of object that are parented:
034 * <ul>
035 * <li>Aggregated objects</li>
036 * <li>Internal collections</li>
037 * </ul>
038 * 
039 * <p>
040 * In the standard Apache Isis Programming Model, aggregated objects typically corresponds to
041 * applying the <tt>@Aggregated</tt> annotation at the class level.  
042 * In terms of an analogy, aggregated is similar to Hibernate's component types
043 * (for larger mutable in-line objects) or to Hibernate's user-defined types
044 * (for smaller immutable values).
045 * 
046 * <p>
047 * Internal collections are the {@link List}s, {@link Set}s etc that hold references to
048 * other root entities.
049 * 
050 * <p>
051 * The object may or may not be {@link ImmutableFacet immutable}.  If an aggregated entity, then it may
052 * reference regular entity domain objects or other aggregated objects.
053 */
054public interface ParentedFacet extends MarkerFacet {
055
056}