001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.Association;
004import de.deepamehta.core.Role;
005import de.deepamehta.core.model.RoleModel;
006
007import org.codehaus.jettison.json.JSONObject;
008
009
010
011abstract class AttachedRole implements Role {
012
013    // ---------------------------------------------------------------------------------------------- Instance Variables
014
015    private RoleModel model;
016    private Association assoc;  // the association this role is involved in
017
018    protected final EmbeddedService dms;
019
020    // ---------------------------------------------------------------------------------------------------- Constructors
021
022    protected AttachedRole(RoleModel model, Association assoc, EmbeddedService dms) {
023        this.model = model;
024        this.assoc = assoc;
025        this.dms = dms;
026    }
027
028    // -------------------------------------------------------------------------------------------------- Public Methods
029
030
031
032    // === Role Implementation ===
033
034    @Override
035    public String getRoleTypeUri() {
036        return model.getRoleTypeUri();
037    }
038
039    @Override
040    public long getPlayerId() {
041        return model.getPlayerId();
042    }
043
044    // Note: getPlayer() remains abstract
045
046    // ---
047
048    @Override
049    public void setRoleTypeUri(String roleTypeUri) {
050        // update memory
051        model.setRoleTypeUri(roleTypeUri);
052        // update DB
053        storeRoleTypeUri();
054    }
055
056    // ---
057
058    @Override
059    public RoleModel getModel() {
060        return model;
061    }
062
063    // ---
064
065    @Override
066    public JSONObject toJSON() {
067        return getModel().toJSON();
068    }
069
070    // ------------------------------------------------------------------------------------------------- Private Methods
071
072    private void storeRoleTypeUri() {
073        dms.storageDecorator.storeRoleTypeUri(assoc.getId(), getPlayerId(), getRoleTypeUri());
074    }
075}