001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.Role;
004import de.deepamehta.core.model.AssociationModel;
005import de.deepamehta.core.model.AssociationRoleModel;
006import de.deepamehta.core.model.RoleModel;
007
008import org.codehaus.jettison.json.JSONObject;
009
010
011
012class AssociationRoleModelImpl extends RoleModelImpl implements AssociationRoleModel {
013
014    // ---------------------------------------------------------------------------------------------------- Constructors
015
016    AssociationRoleModelImpl(long assocId, String roleTypeUri, PersistenceLayer pl) {
017        super(assocId, roleTypeUri,  pl);
018    }
019
020    // -------------------------------------------------------------------------------------------------- Public Methods
021
022
023
024    // === Implementation of abstract RoleModel methods ===
025
026    @Override
027    public boolean refsSameObject(RoleModel model) {
028        if (model instanceof AssociationRoleModel) {
029            AssociationRoleModel assocRole = (AssociationRoleModel) model;
030            return assocRole.getPlayerId() == playerId;
031        }
032        return false;
033    }
034
035    @Override
036    public JSONObject toJSON() {
037        try {
038            return new JSONObject()
039                .put("assoc_id", playerId)
040                .put("role_type_uri", roleTypeUri);
041        } catch (Exception e) {
042            throw new RuntimeException("Serialization failed (" + this + ")", e);
043        }
044    }
045
046
047
048    // === Java API ===
049
050    @Override
051    public String toString() {
052        return "\n        association role (roleTypeUri=\"" + roleTypeUri + "\", playerId=" + playerId + ")";
053    }
054
055    // ----------------------------------------------------------------------------------------- Package Private Methods
056
057    @Override
058    Role instantiate(AssociationModelImpl assoc) {
059        return new AssociationRoleImpl(this, assoc, pl);
060    }
061
062    @Override
063    AssociationModelImpl getPlayer() {
064        return pl.fetchAssociation(playerId);
065    }
066}