001package systems.dmx.facets;
002
003import systems.dmx.core.DMXObject;
004import systems.dmx.core.RelatedTopic;
005import systems.dmx.core.Topic;
006import systems.dmx.core.model.facets.FacetValueModel;
007
008import java.util.List;
009
010
011
012public interface FacetsService {
013
014    // ### TODO: rename to getFacetValue?
015    RelatedTopic getFacet(long topicId, String facetTypeUri);
016
017    /**
018     * Retrieves a facet value.
019     * ### TODO: rename to getFacetValue?
020     *
021     * @param   object          The facetted object: a topic, association, a type ...
022     * @param   facetTypeUri    URI of the facet type.
023     *
024     * @return  The retrieved facet value (including its child topics) or <code>null</code> if no such topic extists.
025     */
026    RelatedTopic getFacet(DMXObject object, String facetTypeUri);
027
028    // ---
029
030    // ### TODO: rename to getFacetValues?
031    List<RelatedTopic> getFacets(long topicId, String facetTypeUri);
032
033    /**
034     * Retrieves the values of a multi-facet.
035     * ### TODO: rename to getFacetValues?
036     *
037     * @param   object          The facetted object: a topic, association, a type ...
038     * @param   facetTypeUri    URI of the facet type.
039     *
040     * @return  The retrieved facet values (including their child topics). The list may be empty.
041     */
042    List<RelatedTopic> getFacets(DMXObject object, String facetTypeUri);
043
044    // ---
045
046    Topic getFacettedTopic(long topicId, List<String> facetTypeUris);
047
048    void addFacetTypeToTopic(long topicId, String facetTypeUri);
049
050    // ---
051
052    void updateFacet(long topicId, String facetTypeUri, FacetValueModel value);
053
054    /**
055     * Updates a facet.
056     *
057     * @param   object          The facetted object: a topic, association, a type ...
058     * @param   facetTypeUri    URI of the facet type.
059     * @param   value           The new facet value.
060     */
061    void updateFacet(DMXObject object, String facetTypeUri, FacetValueModel value);
062
063    // ---
064
065    boolean hasFacet(long topicId, String facetTypeUri, long facetTopicId);
066}