001 package de.deepamehta.core.impl; 002 003 import de.deepamehta.core.Association; 004 import de.deepamehta.core.Role; 005 import de.deepamehta.core.model.RoleModel; 006 007 import org.codehaus.jettison.json.JSONObject; 008 009 010 011 abstract 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 }