001    package de.deepamehta.core;
002    
003    import de.deepamehta.core.model.CompositeValueModel;
004    import de.deepamehta.core.model.DeepaMehtaObjectModel;
005    import de.deepamehta.core.model.SimpleValue;
006    import de.deepamehta.core.model.TopicModel;
007    import de.deepamehta.core.service.ClientState;
008    import de.deepamehta.core.service.Directives;
009    import de.deepamehta.core.service.ResultList;
010    
011    import java.util.List;
012    
013    
014    
015    public interface DeepaMehtaObject extends Identifiable, JSONEnabled {
016    
017    
018    
019        // === Model ===
020    
021        // --- ID ---
022    
023        long getId();
024    
025        // --- URI ---
026    
027        String getUri();
028    
029        void setUri(String uri);
030    
031        // --- Type URI ---
032    
033        String getTypeUri();
034    
035        void setTypeUri(String typeUri);
036    
037        // --- Simple Value ---
038    
039        SimpleValue getSimpleValue();
040    
041        void setSimpleValue(String value);
042        void setSimpleValue(int value);
043        void setSimpleValue(long value);
044        void setSimpleValue(boolean value);
045        void setSimpleValue(SimpleValue value);
046    
047        // --- Composite Value ---
048    
049        CompositeValue getCompositeValue();
050    
051        void setCompositeValue(CompositeValueModel comp, ClientState clientState, Directives directives);
052    
053        // ---
054    
055        void loadChildTopics();
056        void loadChildTopics(String childTypeUri);
057    
058        // ---
059    
060        DeepaMehtaObjectModel getModel();
061    
062    
063    
064        // === Updating ===
065    
066        void update(DeepaMehtaObjectModel model, ClientState clientState, Directives directives);
067    
068        // ---
069    
070        void updateChildTopic(TopicModel newChildTopic, AssociationDefinition assocDef, ClientState clientState,
071                                                                                        Directives directives);
072        void updateChildTopics(List<? extends TopicModel> newChildTopics, AssociationDefinition assocDef,
073                                                                                        ClientState clientState,
074                                                                                        Directives directives);
075    
076    
077    
078        // === Deletion ===
079    
080        /**
081         * Deletes the DeepaMehta object in its entirety, that is
082         * - the object itself (the <i>parent</i>)
083         * - all child topics associated via "dm4.core.composition", recusively
084         * - all the remaining direct associations, e.g. "dm4.core.instantiation"
085         */
086        void delete(Directives directives);
087    
088    
089    
090        // === Traversal ===
091    
092        // --- Topic Retrieval ---
093    
094        /**
095         * Fetches and returns a related topic or <code>null</code> if no such topic extists.
096         *
097         * @param   assocTypeUri        may be null
098         * @param   myRoleTypeUri       may be null
099         * @param   othersRoleTypeUri   may be null
100         * @param   othersTopicTypeUri  may be null
101         */
102        RelatedTopic getRelatedTopic(String assocTypeUri, String myRoleTypeUri, String othersRoleTypeUri,
103                                     String othersTopicTypeUri, boolean fetchComposite, boolean fetchRelatingComposite);
104    
105        ResultList<RelatedTopic> getRelatedTopics(String assocTypeUri, int maxResultSize);
106    
107        /**
108         * @param   assocTypeUri        may be null
109         * @param   myRoleTypeUri       may be null
110         * @param   othersRoleTypeUri   may be null
111         * @param   othersTopicTypeUri  may be null
112         * @param   fetchComposite
113         * @param   fetchRelatingComposite
114         * @param   maxResultSize       Result size limit. Pass 0 for no limit.
115         */
116        ResultList<RelatedTopic> getRelatedTopics(String assocTypeUri, String myRoleTypeUri, String othersRoleTypeUri,
117                                        String othersTopicTypeUri, boolean fetchComposite, boolean fetchRelatingComposite,
118                                        int maxResultSize);
119    
120        /**
121         * @param   assocTypeUris       may *not* be null
122         * @param   myRoleTypeUri       may be null
123         * @param   othersRoleTypeUri   may be null
124         * @param   othersTopicTypeUri  may be null
125         */
126        ResultList<RelatedTopic> getRelatedTopics(List assocTypeUris, String myRoleTypeUri, String othersRoleTypeUri,
127                                        String othersTopicTypeUri, boolean fetchComposite, boolean fetchRelatingComposite,
128                                        int maxResultSize);
129    
130         // --- Association Retrieval ---
131    
132         Association getAssociation(String assocTypeUri, String myRoleTypeUri, String othersRoleTypeUri,
133                                                                                 long othersTopicId);
134    
135         List<Association> getAssociations();
136    
137    
138    
139        // === Properties ===
140    
141        Object getProperty(String propUri);
142    
143        void setProperty(String propUri, Object propValue, boolean addToIndex);
144    
145        boolean hasProperty(String propUri);
146    
147        void removeProperty(String propUri);
148    }