001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.Role;
004import de.deepamehta.core.model.AssociationModel;
005import de.deepamehta.core.model.DeepaMehtaObjectModel;
006import de.deepamehta.core.model.RoleModel;
007
008import org.codehaus.jettison.json.JSONObject;
009
010
011
012abstract class RoleModelImpl implements RoleModel {
013
014    // ---------------------------------------------------------------------------------------------- Instance Variables
015
016    long playerId;                  // id of the player (a topic, or an association)
017    String roleTypeUri;             // is never null
018
019    PersistenceLayer pl;
020
021    // ---------------------------------------------------------------------------------------------------- Constructors
022
023    // ### TODO: drop this?
024    RoleModelImpl() {
025    }
026
027    RoleModelImpl(long playerId, String roleTypeUri, PersistenceLayer pl) {
028        setPlayerId(playerId);
029        setRoleTypeUri(roleTypeUri);
030        this.pl = pl;
031    }
032
033    // -------------------------------------------------------------------------------------------------- Public Methods
034
035    @Override
036    public long getPlayerId() {
037        return playerId;
038    }
039
040    @Override
041    public final String getRoleTypeUri() {
042        return roleTypeUri;
043    }
044
045    // ---
046
047    // ### TODO: to be dropped?
048    @Override
049    public void setPlayerId(long playerId) {
050        this.playerId = playerId;
051    }
052
053    @Override
054    public final void setRoleTypeUri(String roleTypeUri) {
055        if (roleTypeUri == null) {
056            throw new IllegalArgumentException("\"roleTypeUri\" must not be null");
057        }
058        //
059        this.roleTypeUri = roleTypeUri;
060    }
061
062    // ---
063
064    // Note: refsSameObject() remain abstract
065
066
067
068    // === Java API ===
069
070    @Override
071    public RoleModel clone() {
072        try {
073            return (RoleModel) super.clone();
074        } catch (Exception e) {
075            throw new RuntimeException("Cloning a RoleModel failed", e);
076        }
077    }
078
079    // ----------------------------------------------------------------------------------------- Package Private Methods
080
081    abstract Role instantiate(AssociationModelImpl assoc);
082
083    abstract DeepaMehtaObjectModel getPlayer();
084}