001    package de.deepamehta.plugins.facets.model;
002    
003    import de.deepamehta.core.model.ChildTopicsModel;
004    import de.deepamehta.core.model.TopicModel;
005    
006    import org.codehaus.jettison.json.JSONObject;
007    
008    import java.util.List;
009    
010    
011    
012    /**
013     * A facet value as used in update facet calls.
014     * Used for both, single-valued facets and multiple-valued facets.
015     */
016    public class FacetValue extends ChildTopicsModel {
017    
018        private String childTypeUri;
019    
020        // ---------------------------------------------------------------------------------------------------- Constructors
021    
022        public FacetValue(String childTypeUri) {
023            this.childTypeUri = childTypeUri;
024        }
025    
026        public FacetValue(JSONObject obj) {
027            super(obj);
028            try {
029                if (size() != 1) {
030                    throw new RuntimeException("There are " + size() + " child type entries (expected is 1)");
031                }
032                //
033                this.childTypeUri = iterator().next();
034            } catch (Exception e) {
035                throw new RuntimeException("Parsing FacetValue failed (JSONObject=" + obj + ")", e);
036            }
037        }
038    
039        // -------------------------------------------------------------------------------------------------- Public Methods
040    
041        /**
042         * Accesses a single-valued facet.
043         */
044        public TopicModel getTopic() {
045            return getTopic(childTypeUri);
046        }
047    
048        /**
049         * Accesses a multiple-valued facet.
050         */
051        public List<TopicModel> getTopics() {
052            return getTopics(childTypeUri);
053        }
054    
055        // ---
056    
057        /**
058         * Puts a value in a single-valued facet.
059         */
060        public FacetValue put(TopicModel value) {
061            return (FacetValue) put(childTypeUri, value);
062        }
063    
064        // ---
065    
066        /**
067         * Convenience method to put a *simple* value in a single-valued facet.
068         */
069        public FacetValue put(Object value) {
070            return (FacetValue) put(childTypeUri, value);
071        }
072    
073        /**
074         * Convenience method to put a *composite* value in a single-valued facet.
075         */
076        public FacetValue put(ChildTopicsModel value) {
077            return (FacetValue) put(childTypeUri, value);
078        }
079    
080        // ---
081    
082        /**
083         * Adds all the values to a multiple-valued facet.
084         */
085        public FacetValue put(List<TopicModel> values) {
086            return (FacetValue) put(childTypeUri, values);
087        }
088    
089        // ---
090    
091        /**
092         * Adds a by-ID topic reference to a multiple-valued facet.
093         */
094        public FacetValue addRef(long refTopicId) {
095            return (FacetValue) addRef(childTypeUri, refTopicId);
096        }
097    
098        /**
099         * Adds a by-URI topic reference to a multiple-valued facet.
100         */
101        public FacetValue addRef(String refTopicUri) {
102            return (FacetValue) addRef(childTypeUri, refTopicUri);
103        }
104    
105        // ---
106    
107        /**
108         * Adds a by-ID topic deletion reference to a multiple-valued facet.
109         */
110        public FacetValue addDeletionRef(long refTopicId) {
111            return (FacetValue) addDeletionRef(childTypeUri, refTopicId);
112        }
113    }