001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.AssociationType;
004import de.deepamehta.core.model.AssociationDefinitionModel;
005import de.deepamehta.core.model.AssociationModel;
006import de.deepamehta.core.model.AssociationTypeModel;
007import de.deepamehta.core.model.SimpleValue;
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 AssociationType}.
017 *
018 * @author <a href="mailto:jri@deepamehta.de">Jörg Richter</a>
019 */
020public class AssociationTypeModelImpl extends TypeModelImpl implements AssociationTypeModel {
021
022    // ---------------------------------------------------------------------------------------------------- Constructors
023
024    AssociationTypeModelImpl(TypeModelImpl type) {
025        super(type);
026    }
027
028    // -------------------------------------------------------------------------------------------------- Public Methods
029
030    @Override
031    public AssociationTypeModel addAssocDef(AssociationDefinitionModel assocDef) {
032        return (AssociationTypeModel) super.addAssocDef(assocDef);
033    }
034
035    @Override
036    public AssociationTypeModel setLabelConfig(List<String> labelConfig) {
037        return (AssociationTypeModel) super.setLabelConfig(labelConfig);
038    }
039
040    // ---
041
042    @Override
043    public AssociationTypeModelImpl clone() {
044        try {
045            return (AssociationTypeModelImpl) super.clone();
046        } catch (Exception e) {
047            throw new RuntimeException("Cloning a AssociationTypeModel failed", e);
048        }
049    }
050
051    @Override
052    public String toString() {
053        return "association type (" + super.toString() + ")";
054    }
055
056    // ----------------------------------------------------------------------------------------- Package Private Methods
057
058    @Override
059    String className() {
060        return "association type";
061    }
062
063    @Override
064    AssociationTypeImpl instantiate() {
065        // Note: declaration and assignment is required for type inference to work (at least in Java 6)
066        AssociationTypeModelImpl type = clone().filterReadableAssocDefs();
067        return new AssociationTypeImpl(type, pl);
068    }
069
070
071
072    // === Implementation of abstract TypeModelImpl methods ===
073
074    @Override
075    List<AssociationModelImpl> getAllInstances() {
076        return pl.fetchAssociations("type_uri", new SimpleValue(uri));
077    }
078
079    // ---
080
081    @Override
082    Directive getUpdateTypeDirective() {
083        return Directive.UPDATE_ASSOCIATION_TYPE;
084    }
085
086    @Override
087    Directive getDeleteTypeDirective() {
088        return Directive.DELETE_ASSOCIATION_TYPE;
089    }
090}