001package de.deepamehta.core.model;
002
003import org.codehaus.jettison.json.JSONObject;
004
005
006
007public abstract class RoleModel implements Cloneable {
008
009    // ---------------------------------------------------------------------------------------------- Instance Variables
010
011    protected long playerId;        // id of the player (a topic, or an association)
012    protected String roleTypeUri;   // is never null
013
014    // ---------------------------------------------------------------------------------------------------- Constructors
015
016    // ### TODO: drop this?
017    protected RoleModel() {
018    }
019
020    protected RoleModel(long playerId, String roleTypeUri) {
021        setPlayerId(playerId);
022        setRoleTypeUri(roleTypeUri);
023    }
024
025    // -------------------------------------------------------------------------------------------------- Public Methods
026
027    public long getPlayerId() {
028        return playerId;
029    }
030
031    public final String getRoleTypeUri() {
032        return roleTypeUri;
033    }
034
035    // ---
036
037    public void setPlayerId(long playerId) {
038        this.playerId = playerId;
039    }
040
041    public final void setRoleTypeUri(String roleTypeUri) {
042        if (roleTypeUri == null) {
043            throw new IllegalArgumentException("\"roleTypeUri\" must not be null");
044        }
045        //
046        this.roleTypeUri = roleTypeUri;
047    }
048
049    // ---
050
051    /**
052     * Checks weather the given role model refers to the same object as this role model.
053     * In case of a topic role model the topic IDs resp. URIs are compared.
054     * In case of an association role model the association IDs are compared.
055     * Note: the role types are not compared.
056     *
057     * @return  true if the given role model refers to the same object as this role model.
058     */
059    public abstract boolean refsSameObject(RoleModel model);
060
061    public abstract JSONObject toJSON();
062
063    // === Java API ===
064
065    @Override
066    public RoleModel clone() {
067        try {
068            return (RoleModel) super.clone();
069        } catch (Exception e) {
070            throw new RuntimeException("Cloning a RoleModel failed", e);
071        }
072    }
073}