X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fentity%2Fadapter%2FEntityAdapter.java;h=e0ab7be5694d42a75c1b22bf726ccf4e6184f617;hb=6b6b6215ebe066b81f1fa6b0c71a532ca7b4fc3f;hp=e5ad90e24c2e3885b02b3ad85c3a797ccf535449;hpb=62f2f914058c39865ff038e6281b045b05f598cb;p=mir.git diff --git a/source/mir/entity/adapter/EntityAdapter.java b/source/mir/entity/adapter/EntityAdapter.java index e5ad90e2..e0ab7be5 100755 --- a/source/mir/entity/adapter/EntityAdapter.java +++ b/source/mir/entity/adapter/EntityAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001, 2002 The Mir-coders group + * Copyright (C) 2001, 2002 The Mir-coders group * * This file is part of Mir. * @@ -18,24 +18,34 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * In addition, as a special exception, The Mir-coders gives permission to link - * the code of this program with the com.oreilly.servlet library, any library - * licensed under the Apache Software License, The Sun (tm) Java Advanced - * Imaging library (JAI), The Sun JIMI library (or with modified versions of - * the above that use the same license as the above), and distribute linked - * combinations including the two. You must obey the GNU General Public - * License in all respects for all of the code used other than the above - * mentioned libraries. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If you do - * not wish to do so, delete this exception statement from your version. + * the code of this program with any library licensed under the Apache Software License, + * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library + * (or with modified versions of the above that use the same license as the above), + * and distribute linked combinations including the two. You must obey the + * GNU General Public License in all respects for all of the code used other than + * the above mentioned libraries. If you modify this file, you may extend this + * exception to your version of the file, but you are not obligated to do so. + * If you do not wish to do so, delete this exception statement from your version. */ - package mir.entity.adapter; +import mir.entity.Entity; +import mir.util.CachingRewindableIterator; +import mir.util.RewindableIterator; + import java.util.*; -import mir.entity.*; -import mir.util.*; -public class EntityAdapter implements Map { +/** 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; @@ -48,26 +58,18 @@ public class EntityAdapter implements Map { model = aModel; } - public boolean containsKey(Object aKey) { - try { - if (aKey instanceof String) - return entity.hasValueForField((String) aKey) - || definition.hasCalculatedField((String) aKey) - || entity.getFields().contains(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() { @@ -78,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)) { @@ -90,77 +92,83 @@ public class EntityAdapter implements Map { return result; } - else if (aKey instanceof String) { - return entity.getValue((String) aKey); - } else { - return null; + return entity.getFieldValue((String) aKey); } } - public boolean isEmpty() { - throw new UnsupportedOperationException("EntityAdapter.isEmpty()"); - } - - 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 Iterator getIterator(String aKey) { + Object result = get(aKey); - public Collection values() { - throw new UnsupportedOperationException("EntityAdapter.values()"); + 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 void clear() { - throw new UnsupportedOperationException("EntityAdapter.clear()"); + public Object getComplexRelation(String aMainTablePrefix, List someExtraTables, + String aWhereClause, String anOrderByClause, String aDefinition) { + try { + return + new CachingRewindableIterator( + new EntityIteratorAdapter(aMainTablePrefix, someExtraTables, + aWhereClause, anOrderByClause, + -1, getModel(), aDefinition, -1, 0) + ); + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } } - public boolean containsValue(Object value) { - throw new UnsupportedOperationException("EntityAdapter.containsValue()"); - } - public Set entrySet() { - throw new UnsupportedOperationException("EntityAdapter.entrySet()"); + public List getRelation(String aWhereClause, String anOrderByClause, String aDefinition) { + try { + return EntityAdapterEngine.retrieveAdapterList(model, aDefinition, aWhereClause, anOrderByClause, -1, 0); + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } } - public Object getRelation(String aWhereClause, String anOrderByClause, String aDefinition) { + public EntityAdapter getToOneRelation(String aWhereClause, String anOrderByClause, String aDefinition) { try { - return - new CachingRewindableIterator( - 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(); + return null; } catch (Throwable t) { throw new RuntimeException(t.getMessage()); } } - public Object getToOneRelation(String aWhereClause, String anOrderByClause, String aDefinition) { + public EntityAdapter getComplexToOneRelation(String aMainTablePrefix, List someExtraTables, + String aWhereClause, String anOrderByClause, String aDefinition) { try { - Iterator i = new EntityIteratorAdapter(aWhereClause, anOrderByClause, -1, getModel(), aDefinition); + Iterator i = new EntityIteratorAdapter(aMainTablePrefix, someExtraTables, aWhereClause, anOrderByClause, -1, + getModel(), aDefinition, 1, 0); if (i.hasNext()) - return i.next(); - else - return null; + return (EntityAdapter) i.next(); + return null; } catch (Throwable t) { throw new RuntimeException(t.getMessage()); } } + } \ No newline at end of file