001    package de.deepamehta.core.model;
002    
003    import de.deepamehta.core.RelatedTopic;
004    import de.deepamehta.core.Topic;
005    import java.util.List;
006    
007    
008    
009    public class TopicReferenceModel extends RelatedTopicModel {
010    
011        // ---------------------------------------------------------------------------------------------------- Constructors
012    
013        public TopicReferenceModel(long topicId) {
014            super(topicId);
015        }
016    
017        public TopicReferenceModel(long topicId, AssociationModel relatingAssoc) {
018            super(topicId, relatingAssoc);
019        }
020    
021        public TopicReferenceModel(String topicUri) {
022            super(topicUri);
023        }
024    
025        public TopicReferenceModel(String topicUri, AssociationModel relatingAssoc) {
026            super(topicUri, relatingAssoc);
027        }
028    
029        public TopicReferenceModel(long topicId, ChildTopicsModel relatingAssocChildTopics) {
030            super(topicId, new AssociationModel(relatingAssocChildTopics));
031        }
032    
033        public TopicReferenceModel(String topicUri, ChildTopicsModel relatingAssocChildTopics) {
034            super(topicUri, new AssociationModel(relatingAssocChildTopics));
035        }
036    
037        // -------------------------------------------------------------------------------------------------- Public Methods
038    
039        public boolean isReferenceById() {
040            return getId() != -1;
041        }
042    
043        public boolean isReferenceByUri() {
044            return getUri() != null && !getUri().equals("");
045        }
046    
047        // ---
048    
049        /**
050         * Checks weather this reference refers to the given topic.
051         */
052        public boolean isReferingTo(Topic topic) {
053            if (isReferenceById()) {
054                return getId() == topic.getId();
055            } else if (isReferenceByUri()) {
056                return getUri().equals(topic.getUri());
057            } else {
058                throw new RuntimeException("Invalid topic reference (" + this + ")");
059            }
060        }
061    
062        /**
063         * From the given topics finds the one this reference refers to.
064         */
065        public RelatedTopic findReferencedTopic(List<RelatedTopic> topics) {
066            for (RelatedTopic topic : topics) {
067                if (isReferingTo(topic)) {
068                    return topic;
069                }
070            }
071            return null;
072        }
073    
074        // ---
075    
076        @Override
077        public String toString() {
078            return "reference " + super.toString();
079        }
080    }