X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fentity%2Fadapter%2FEntityAdapter.java;h=e0ab7be5694d42a75c1b22bf726ccf4e6184f617;hb=6b6b6215ebe066b81f1fa6b0c71a532ca7b4fc3f;hp=e22398163e5b81a4c83b59029640b7955b02ea40;hpb=d1fe8297d584e69a5d2bed84cc979d8bdd13cb31;p=mir.git diff --git a/source/mir/entity/adapter/EntityAdapter.java b/source/mir/entity/adapter/EntityAdapter.java index e2239816..e0ab7be5 100755 --- a/source/mir/entity/adapter/EntityAdapter.java +++ b/source/mir/entity/adapter/EntityAdapter.java @@ -29,17 +29,23 @@ */ package mir.entity.adapter; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - import mir.entity.Entity; import mir.util.CachingRewindableIterator; - -public class EntityAdapter implements Map { +import mir.util.RewindableIterator; + +import java.util.*; + +/** An EntityAdapter is a wrapper around an Entity meant to add + * missing functionality. It provides "calculated fields" + * which mir installations can extend reasonably easilly. + * "calculated fields" compute values that are not directly present + * in the db table. For example: + * a field to have the number of comments associated with an article; + * a field to get the list of hidden comments associated with an article; + * etc. + *

This whole framework is meant to be replaced by hibernate

+ */ +public class EntityAdapter { private Entity entity; private EntityAdapterDefinition definition; private Map calculatedFieldsCache; @@ -52,25 +58,18 @@ public class EntityAdapter implements Map { model = aModel; } - public boolean containsKey(Object aKey) { - try { - if (aKey instanceof String) - return entity.hasField((String) aKey) - || definition.hasCalculatedField((String) aKey); - } - catch (Throwable t) { - } - - return false; - } - public boolean equals(Object anObject) { return anObject instanceof EntityAdapter && ((EntityAdapter) anObject).entity.equals(entity); } public int hashCode() { - return entity.hashCode(); + if (entity!=null) { + return entity.hashCode(); + } + else { + return 0; + } } public Entity getEntity() { @@ -81,7 +80,7 @@ public class EntityAdapter implements Map { return model; } - public Object get(Object aKey) { + public Object get(String aKey) { Object result; if (calculatedFieldsCache.containsKey(aKey)) { @@ -93,52 +92,30 @@ public class EntityAdapter implements Map { return result; } - else if (aKey instanceof String) { - return entity.getFieldValue((String) aKey); - } else { - return null; + return entity.getFieldValue((String) aKey); } } - public boolean isEmpty() { - return false; - } - - public Set keySet() { - throw new UnsupportedOperationException("EntityAdapter.keySet()"); - } - - public Object put(Object aKey, Object value) { - throw new UnsupportedOperationException("EntityAdapter.put()"); - } - - public void putAll(Map t) { - throw new UnsupportedOperationException("EntityAdapter.putAll()"); - } - - public Object remove(Object aKey) { - throw new UnsupportedOperationException("EntityAdapter.remove()"); - } - - public int size() { - throw new UnsupportedOperationException("EntityAdapter.size()"); - } - - public Collection values() { - throw new UnsupportedOperationException("EntityAdapter.values()"); - } - - public void clear() { - throw new UnsupportedOperationException("EntityAdapter.clear()"); - } - - public boolean containsValue(Object value) { - throw new UnsupportedOperationException("EntityAdapter.containsValue()"); - } + public Iterator getIterator(String aKey) { + Object result = get(aKey); - public Set entrySet() { - throw new UnsupportedOperationException("EntityAdapter.entrySet()"); + if (result instanceof RewindableIterator) { + ((RewindableIterator) result).rewind(); + return (RewindableIterator) result; + } + else if (result instanceof Iterator) { + return (Iterator) result; + } + else if (result instanceof Collection) { + return ((Collection) result).iterator(); + } + else if (result!=null) { + return Collections.singletonList(result).iterator(); + } + else { + return null; + } } public Object getComplexRelation(String aMainTablePrefix, List someExtraTables, @@ -157,12 +134,9 @@ public class EntityAdapter implements Map { } - public Object getRelation(String aWhereClause, String anOrderByClause, String aDefinition) { + public List getRelation(String aWhereClause, String anOrderByClause, String aDefinition) { try { - return - new CachingRewindableIterator( - new EntityIteratorAdapter( - aWhereClause, anOrderByClause, -1, getModel(), aDefinition)); + return EntityAdapterEngine.retrieveAdapterList(model, aDefinition, aWhereClause, anOrderByClause, -1, 0); } catch (Throwable t) { throw new RuntimeException(t.getMessage()); @@ -171,15 +145,30 @@ public class EntityAdapter implements Map { public EntityAdapter getToOneRelation(String aWhereClause, String anOrderByClause, String aDefinition) { try { - Iterator i = new EntityIteratorAdapter(aWhereClause, anOrderByClause, -1, getModel(), aDefinition); + Iterator i = new EntityIteratorAdapter(aWhereClause, anOrderByClause, 1, getModel(), aDefinition, 1, 0); if (i.hasNext()) return (EntityAdapter) i.next(); - else - return null; + return null; } catch (Throwable t) { throw new RuntimeException(t.getMessage()); } } + + public EntityAdapter getComplexToOneRelation(String aMainTablePrefix, List someExtraTables, + String aWhereClause, String anOrderByClause, String aDefinition) { + try { + Iterator i = new EntityIteratorAdapter(aMainTablePrefix, someExtraTables, aWhereClause, anOrderByClause, -1, + getModel(), aDefinition, 1, 0); + + if (i.hasNext()) + return (EntityAdapter) i.next(); + return null; + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } + } + } \ No newline at end of file