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 058 059 // === Implementation of abstract RoleModelImpl methods === 060 061 @Override 062 Role instantiate(AssociationModelImpl assoc) { 063 return new AssociationRoleImpl(this, assoc); 064 } 065 066 @Override 067 RelatedAssociationModelImpl getPlayer(AssociationModelImpl assoc) { 068 return mf.newRelatedAssociationModel(pl.fetchAssociation(playerId), assoc); 069 } 070}