001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.model.RelatedTopicModel;
004import de.deepamehta.core.model.TopicModel;
005import de.deepamehta.core.model.TopicReferenceModel;
006
007import java.util.List;
008
009
010
011class TopicReferenceModelImpl extends RelatedTopicModelImpl implements TopicReferenceModel {
012
013    // ---------------------------------------------------------------------------------------------------- Constructors
014
015    TopicReferenceModelImpl(RelatedTopicModelImpl relatedTopic) {
016        super(relatedTopic);
017    }
018
019    // -------------------------------------------------------------------------------------------------- Public Methods
020
021    @Override
022    public boolean isReferenceById() {
023        return getId() != -1;
024    }
025
026    @Override
027    public boolean isReferenceByUri() {
028        return getUri() != null && !getUri().equals("");
029    }
030
031    // ---
032
033    @Override
034    public boolean isReferingTo(TopicModel topic) {
035        if (isReferenceById()) {
036            return getId() == topic.getId();
037        } else if (isReferenceByUri()) {
038            return getUri().equals(topic.getUri());
039        } else {
040            throw new RuntimeException("Invalid topic reference (" + this + ")");
041        }
042    }
043
044    @Override
045    public RelatedTopicModelImpl findReferencedTopic(List<? extends RelatedTopicModel> topics) {
046        for (RelatedTopicModel topic : topics) {
047            if (isReferingTo(topic)) {
048                return (RelatedTopicModelImpl) topic;
049            }
050        }
051        return null;
052    }
053
054    // ---
055
056    @Override
057    public String toString() {
058        return "reference " + super.toString();
059    }
060}