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 }