001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.TopicType;
004import de.deepamehta.core.model.AssociationDefinitionModel;
005import de.deepamehta.core.model.SimpleValue;
006import de.deepamehta.core.model.TopicModel;
007import de.deepamehta.core.model.TopicTypeModel;
008import de.deepamehta.core.model.TypeModel;
009import de.deepamehta.core.service.Directive;
010
011import java.util.List;
012
013
014
015/**
016 * Data that underlies a {@link TopicType}.
017 *
018 * @author <a href="mailto:jri@deepamehta.de">Jörg Richter</a>
019 */
020class TopicTypeModelImpl extends TypeModelImpl implements TopicTypeModel {
021
022    // ---------------------------------------------------------------------------------------------------- Constructors
023
024    TopicTypeModelImpl(TypeModelImpl type) {
025        super(type);
026    }
027
028    // -------------------------------------------------------------------------------------------------- Public Methods
029
030    @Override
031    public TopicTypeModel addAssocDef(AssociationDefinitionModel assocDef) {
032        return (TopicTypeModel) super.addAssocDef(assocDef);
033    }
034
035    // ---
036
037    @Override
038    public TopicTypeModelImpl clone() {
039        try {
040            return (TopicTypeModelImpl) super.clone();
041        } catch (Exception e) {
042            throw new RuntimeException("Cloning a TopicTypeModel failed", e);
043        }
044    }
045
046    @Override
047    public String toString() {
048        return "topic type (" + super.toString() + ")";
049    }
050
051    // ----------------------------------------------------------------------------------------- Package Private Methods
052
053    @Override
054    String className() {
055        return "topic type";
056    }
057
058    @Override
059    TopicTypeImpl instantiate() {
060        // Note: declaration and assignment is required for type inference to work (at least in Java 6)
061        TopicTypeModelImpl type = clone().filterReadableAssocDefs();
062        return new TopicTypeImpl(type, pl);
063    }
064
065
066
067    // === Implementation of abstract TypeModelImpl methods ===
068
069    @Override
070    List<TopicModelImpl> getAllInstances() {
071        return pl.fetchTopics("type_uri", new SimpleValue(uri));
072    }
073
074    // ---
075
076    @Override
077    Directive getUpdateTypeDirective() {
078        return Directive.UPDATE_TOPIC_TYPE;
079    }
080
081    @Override
082    Directive getDeleteTypeDirective() {
083        return Directive.DELETE_TOPIC_TYPE;
084    }
085}