001 package de.deepamehta.core;
002
003 import de.deepamehta.core.model.AssociationDefinitionModel;
004
005
006
007 /**
008 * Definition of an association between 2 topic types -- part of DeepaMehta's type system,
009 * like an association in a class diagram. Used to represent both, aggregations and compositions.
010 *
011 * @author <a href="mailto:jri@deepamehta.de">Jörg Richter</a>
012 */
013 public interface AssociationDefinition extends Association {
014
015 /**
016 * @return The custom association type, or <code>null</code> if not set.
017 */
018 String getCustomAssocTypeUri();
019
020 /**
021 * @return The type to be used to create an association instance based on this association definition.
022 * This is the custom association type if set, otherwise this is <code>dm4.core.composition</code>
023 * or <code>dm4.core.aggregation</code> depending on this association definition's type.
024 * Is never <code>null</code>.
025 */
026 String getInstanceLevelAssocTypeUri();
027
028 String getParentTypeUri();
029
030 String getChildTypeUri();
031
032 String getParentCardinalityUri();
033
034 String getChildCardinalityUri();
035
036 ViewConfiguration getViewConfig();
037
038 // ---
039
040 AssociationDefinitionModel getModel();
041
042 // ---
043
044 void setCustomAssocTypeUri(String customAssocTypeUri);
045
046 // ---
047
048 void setParentCardinalityUri(String parentCardinalityUri);
049
050 void setChildCardinalityUri(String childCardinalityUri);
051
052 // === Updating ===
053
054 void update(AssociationDefinitionModel model);
055 }