001package de.deepamehta.core;
002
003import de.deepamehta.core.model.AssociationDefinitionModel;
004import de.deepamehta.core.model.AssociationModel;
005import de.deepamehta.core.model.IndexMode;
006import de.deepamehta.core.model.TypeModel;
007
008import java.util.Collection;
009import java.util.List;
010
011
012
013public interface DeepaMehtaType extends Topic {
014
015
016
017    // === Data Type ===
018
019    String getDataTypeUri();
020
021    DeepaMehtaType setDataTypeUri(String dataTypeUri);
022
023
024
025    // === Index Modes ===
026
027    List<IndexMode> getIndexModes();
028
029    DeepaMehtaType addIndexMode(IndexMode indexMode);
030
031
032
033    // === Association Definitions ===
034
035    Collection<AssociationDefinition> getAssocDefs();
036
037    AssociationDefinition getAssocDef(String assocDefUri);
038
039    boolean hasAssocDef(String assocDefUri);
040
041    DeepaMehtaType addAssocDef(AssociationDefinitionModel assocDef);
042
043    /**
044     * @param   beforeAssocDefUri   the URI of the assoc def <i>before</i> the given assoc def is inserted.
045     *                              If <code>null</code> the assoc def is appended at the end.
046     */
047    DeepaMehtaType addAssocDefBefore(AssociationDefinitionModel assocDef, String beforeAssocDefUri);
048
049    DeepaMehtaType removeAssocDef(String assocDefUri);
050
051
052
053    // === View Configuration ===
054
055    ViewConfiguration getViewConfig();
056
057    Object getViewConfigValue(String configTypeUri, String childTypeUri);
058
059
060
061    // ===
062
063    void update(TypeModel model);
064
065    // ---
066
067    TypeModel getModel();
068}