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}