001package de.deepamehta.core;
002
003import de.deepamehta.core.model.AssociationModel;
004import de.deepamehta.core.model.RoleModel;
005import de.deepamehta.core.model.TopicRoleModel;
006
007import java.util.List;
008
009
010
011/**
012 * ### FIXDOC: Specification of an association -- A n-ary connection between topics and other associations.
013 *
014 * @author <a href="mailto:jri@deepamehta.de">Jörg Richter</a>
015 */
016public interface Association extends DeepaMehtaObject {
017
018
019
020    // === Model ===
021
022    Role getRole1();
023
024    Role getRole2();
025
026    // ---
027
028    DeepaMehtaObject getPlayer1();
029
030    DeepaMehtaObject getPlayer2();
031
032    // ---
033
034    /**
035     * @teturn  this association's topic which plays the given role.
036     *          If there is no such topic, null is returned.
037     *          <p>
038     *          If there are 2 such topics an exception is thrown.
039     */
040    Topic getTopic(String roleTypeUri);
041
042    /**
043     * @teturn  this association's topic which has the given type.
044     *          If there is no such topic, null is returned.
045     *          <p>
046     *          If there are 2 such topics an exception is thrown.
047     */
048    Topic getTopicByType(String topicTypeUri);
049
050    // ---
051
052    /**
053     * Returns this association's role which refers to the same object as the given role model.
054     * The role returned is found by comparing topic IDs, topic URIs, or association IDs.
055     * The role types are <i>not</i> compared.
056     * <p>
057     * If the object refered by the given role model is not a player in this association an exception is thrown.
058     */
059    Role getRole(RoleModel roleModel);
060
061    boolean isPlayer(TopicRoleModel roleModel);
062
063    // ---
064
065    Association loadChildTopics();
066    Association loadChildTopics(String childTypeUri);
067
068    // ---
069
070    AssociationModel getModel();
071
072
073
074    // === Updating ===
075
076    void update(AssociationModel model);
077}