001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.model.ChildTopicsModel;
004import de.deepamehta.core.model.RelatedTopicModel;
005import de.deepamehta.core.model.facets.FacetValueModel;
006import de.deepamehta.core.service.ModelFactory;
007
008import java.util.HashMap;
009import java.util.List;
010
011
012
013class FacetValueModelImpl extends ChildTopicsModelImpl implements FacetValueModel {
014
015    // ---------------------------------------------------------------------------------------------- Instance Variables
016
017    private String childTypeUri;
018
019    // ---------------------------------------------------------------------------------------------------- Constructors
020
021    FacetValueModelImpl(String childTypeUri, ModelFactory mf) {
022        super(new HashMap(), mf);
023        this.childTypeUri = childTypeUri;
024    }
025
026    FacetValueModelImpl(ChildTopicsModelImpl childTopics) {
027        super(childTopics);
028        this.childTypeUri = iterator().next();
029    }
030
031    // -------------------------------------------------------------------------------------------------- Public Methods
032
033
034
035    // === Single-valued Facets ===
036
037    /**
038     * Accesses a single-valued facet.
039     */
040    public RelatedTopicModel getTopic() {
041        return getTopic(childTypeUri);
042    }
043
044    /**
045     * Accesses a multiple-valued facet.
046     */
047    public List<? extends RelatedTopicModel> getTopics() {
048        return getTopics(childTypeUri);
049    }
050
051    // ---
052
053    /**
054     * Puts a value in a single-valued facet.
055     */
056    public FacetValueModel put(RelatedTopicModel value) {
057        return (FacetValueModel) put(childTypeUri, value);
058    }
059
060    // ---
061
062    /**
063     * Convenience method to put a *simple* value in a single-valued facet.
064     */
065    public FacetValueModel put(Object value) {
066        return (FacetValueModel) put(childTypeUri, value);
067    }
068
069    /**
070     * Convenience method to put a *composite* value in a single-valued facet.
071     */
072    public FacetValueModel put(ChildTopicsModel value) {
073        return (FacetValueModel) put(childTypeUri, value);
074    }
075
076    // ---
077
078    /**
079     * Puts a by-ID topic reference in a single-valued facet.
080     */
081    public FacetValueModel putRef(long refTopicId) {
082        return (FacetValueModel) putRef(childTypeUri, refTopicId);
083    }
084
085    /**
086     * Puts a by-URI topic reference in a single-valued facet.
087     */
088    public FacetValueModel putRef(String refTopicUri) {
089        return (FacetValueModel) putRef(childTypeUri, refTopicUri);
090    }
091
092
093
094    // === Multiple-valued Facets ===
095
096    /**
097     * Sets the values of a multiple-valued facet.
098     */
099    public FacetValueModel put(List<RelatedTopicModel> values) {
100        return (FacetValueModel) put(childTypeUri, values);
101    }
102
103    // ---
104
105    /**
106     * Adds a by-ID topic reference to a multiple-valued facet.
107     */
108    public FacetValueModel addRef(long refTopicId) {
109        return (FacetValueModel) addRef(childTypeUri, refTopicId);
110    }
111
112    /**
113     * Adds a by-URI topic reference to a multiple-valued facet.
114     */
115    public FacetValueModel addRef(String refTopicUri) {
116        return (FacetValueModel) addRef(childTypeUri, refTopicUri);
117    }
118
119    // ---
120
121    /**
122     * Adds a by-ID topic deletion reference to a multiple-valued facet.
123     */
124    public FacetValueModel addDeletionRef(long refTopicId) {
125        return (FacetValueModel) addDeletionRef(childTypeUri, refTopicId);
126    }
127}