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    }