001 package de.deepamehta.plugins.facets.model;
002
003 import de.deepamehta.core.model.ChildTopicsModel;
004 import de.deepamehta.core.model.RelatedTopicModel;
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 // === Single-valued Facets ===
042
043 /**
044 * Accesses a single-valued facet.
045 */
046 public RelatedTopicModel getTopic() {
047 return getTopic(childTypeUri);
048 }
049
050 /**
051 * Accesses a multiple-valued facet.
052 */
053 public List<RelatedTopicModel> getTopics() {
054 return getTopics(childTypeUri);
055 }
056
057 // ---
058
059 /**
060 * Puts a value in a single-valued facet.
061 */
062 public FacetValue put(RelatedTopicModel value) {
063 return (FacetValue) put(childTypeUri, value);
064 }
065
066 // ---
067
068 /**
069 * Convenience method to put a *simple* value in a single-valued facet.
070 */
071 public FacetValue put(Object value) {
072 return (FacetValue) put(childTypeUri, value);
073 }
074
075 /**
076 * Convenience method to put a *composite* value in a single-valued facet.
077 */
078 public FacetValue put(ChildTopicsModel value) {
079 return (FacetValue) put(childTypeUri, value);
080 }
081
082 // ---
083
084 /**
085 * Puts a by-ID topic reference in a single-valued facet.
086 */
087 public FacetValue putRef(long refTopicId) {
088 return (FacetValue) putRef(childTypeUri, refTopicId);
089 }
090
091 /**
092 * Puts a by-URI topic reference in a single-valued facet.
093 */
094 public FacetValue putRef(String refTopicUri) {
095 return (FacetValue) putRef(childTypeUri, refTopicUri);
096 }
097
098 // === Multiple-valued Facets ===
099
100 /**
101 * Sets the values of a multiple-valued facet.
102 */
103 public FacetValue put(List<RelatedTopicModel> values) {
104 return (FacetValue) put(childTypeUri, values);
105 }
106
107 // ---
108
109 /**
110 * Adds a by-ID topic reference to a multiple-valued facet.
111 */
112 public FacetValue addRef(long refTopicId) {
113 return (FacetValue) addRef(childTypeUri, refTopicId);
114 }
115
116 /**
117 * Adds a by-URI topic reference to a multiple-valued facet.
118 */
119 public FacetValue addRef(String refTopicUri) {
120 return (FacetValue) addRef(childTypeUri, refTopicUri);
121 }
122
123 // ---
124
125 /**
126 * Adds a by-ID topic deletion reference to a multiple-valued facet.
127 */
128 public FacetValue addDeletionRef(long refTopicId) {
129 return (FacetValue) addDeletionRef(childTypeUri, refTopicId);
130 }
131 }