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