001    package de.deepamehta.core.model;
002    
003    import org.codehaus.jettison.json.JSONObject;
004    
005    
006    
007    public abstract class RoleModel implements Cloneable {
008    
009        // ---------------------------------------------------------------------------------------------- Instance Variables
010    
011        protected long playerId;        // id of the player (a topic, or an association)
012        protected String roleTypeUri;   // is never null
013    
014        // ---------------------------------------------------------------------------------------------------- Constructors
015    
016        // ### TODO: drop this?
017        protected RoleModel() {
018        }
019    
020        protected RoleModel(long playerId, String roleTypeUri) {
021            setPlayerId(playerId);
022            setRoleTypeUri(roleTypeUri);
023        }
024    
025        // -------------------------------------------------------------------------------------------------- Public Methods
026    
027        public long getPlayerId() {
028            return playerId;
029        }
030    
031        public final String getRoleTypeUri() {
032            return roleTypeUri;
033        }
034    
035        // ---
036    
037        public void setPlayerId(long playerId) {
038            this.playerId = playerId;
039        }
040    
041        public final void setRoleTypeUri(String roleTypeUri) {
042            if (roleTypeUri == null) {
043                throw new IllegalArgumentException("\"roleTypeUri\" must not be null");
044            }
045            //
046            this.roleTypeUri = roleTypeUri;
047        }
048    
049        // ---
050    
051        /**
052         * Checks weather the given role model refers to the same object as this role model.
053         * In case of a topic role model the topic IDs resp. URIs are compared.
054         * In case of an association role model the association IDs are compared.
055         * Note: the role types are not compared.
056         *
057         * @return  true if the given role model refers to the same object as this role model.
058         */
059        public abstract boolean refsSameObject(RoleModel model);
060    
061        public abstract JSONObject toJSON();
062    
063        // === Java API ===
064    
065        @Override
066        public RoleModel clone() {
067            try {
068                return (RoleModel) super.clone();
069            } catch (Exception e) {
070                throw new RuntimeException("Cloning a RoleModel failed", e);
071            }
072        }
073    }