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, false); // fetchComnposite=false
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, false); // fetchComnposite=false
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 }