001 package de.deepamehta.core.impl; 002 003 import de.deepamehta.core.Association; 004 import de.deepamehta.core.DeepaMehtaObject; 005 import de.deepamehta.core.Topic; 006 import de.deepamehta.core.model.AssociationModel; 007 import de.deepamehta.core.model.DeepaMehtaObjectModel; 008 import de.deepamehta.core.model.TopicModel; 009 010 import java.util.Iterator; 011 012 013 014 class TopicIterable implements Iterable<Topic> { 015 016 private Iterator<Topic> topics; 017 018 TopicIterable(EmbeddedService dms) { 019 this.topics = new TopicIterator(dms); 020 } 021 022 @Override 023 public Iterator<Topic> iterator() { 024 return topics; 025 } 026 } 027 028 class AssociationIterable implements Iterable<Association> { 029 030 private Iterator<Association> assocs; 031 032 AssociationIterable(EmbeddedService dms) { 033 this.assocs = new AssociationIterator(dms); 034 } 035 036 @Override 037 public Iterator<Association> iterator() { 038 return assocs; 039 } 040 } 041 042 043 044 // === 045 046 047 048 class TopicIterator extends ObjectIterator<Topic, TopicModel> { 049 050 TopicIterator(EmbeddedService dms) { 051 super(dms); 052 } 053 054 @Override 055 Iterator<TopicModel> fetchObjects() { 056 return dms.storageDecorator.fetchAllTopics(); 057 } 058 059 @Override 060 Topic instantiateObject(TopicModel model) { 061 return dms.instantiateTopic(model); 062 } 063 } 064 065 066 067 class AssociationIterator extends ObjectIterator<Association, AssociationModel> { 068 069 AssociationIterator(EmbeddedService dms) { 070 super(dms); 071 } 072 073 @Override 074 Iterator<AssociationModel> fetchObjects() { 075 return dms.storageDecorator.fetchAllAssociations(); 076 } 077 078 @Override 079 Association instantiateObject(AssociationModel model) { 080 return dms.instantiateAssociation(model); 081 } 082 } 083 084 085 086 abstract class ObjectIterator<E extends DeepaMehtaObject, M extends DeepaMehtaObjectModel> implements Iterator<E> { 087 088 // ---------------------------------------------------------------------------------------------- Instance Variables 089 090 protected EmbeddedService dms; 091 private Iterator<M> objects; 092 093 // ---------------------------------------------------------------------------------------------------- Constructors 094 095 ObjectIterator(EmbeddedService dms) { 096 this.dms = dms; 097 this.objects = fetchObjects(); 098 } 099 100 // -------------------------------------------------------------------------------------------------- Public Methods 101 102 @Override 103 public boolean hasNext() { 104 return objects.hasNext(); 105 } 106 107 @Override 108 public E next() { 109 return instantiateObject(objects.next()); 110 } 111 112 @Override 113 public void remove() { 114 objects.remove(); 115 } 116 117 // ----------------------------------------------------------------------------------------- Package Private Methods 118 119 abstract Iterator<M> fetchObjects(); 120 121 abstract E instantiateObject(M model); 122 }