001    package de.deepamehta.core;
002    
003    import de.deepamehta.core.model.AssociationDefinitionModel;
004    import de.deepamehta.core.service.ClientState;
005    import de.deepamehta.core.service.Directives;
006    
007    
008    
009    /**
010     * Definition of an association between 2 topic types -- part of DeepaMehta's type system,
011     * like an association in a class diagram. Used to represent both, aggregations and compositions.
012     *
013     * @author <a href="mailto:jri@deepamehta.de">Jörg Richter</a>
014     */
015    public interface AssociationDefinition extends Association {
016    
017        String getInstanceLevelAssocTypeUri();
018    
019        String getParentTypeUri();
020    
021        String getChildTypeUri();
022    
023        String getParentCardinalityUri();
024    
025        String getChildCardinalityUri();
026    
027        ViewConfiguration getViewConfig();
028    
029        // ---
030    
031        AssociationDefinitionModel getModel();
032    
033        // ---
034    
035        void setParentCardinalityUri(String parentCardinalityUri, ClientState clientState, Directives directives);
036    
037        void setChildCardinalityUri(String childCardinalityUri, ClientState clientState, Directives directives);
038    
039        // === Updating ===
040    
041        void update(AssociationDefinitionModel model, ClientState clientState, Directives directives);
042    }