X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fentity%2Fadapter%2FEntityAdapter.java;h=2fff4d20d3e3754bd0edb514473ba788636d5a95;hb=97488204d3bc9d251b525a70b2cf0c70956a3484;hp=cafd1eb5cd63b3a9d0130c5328697e409381b1e0;hpb=a459f111d85598df56c6ab711cec11632676b39c;p=mir.git diff --git a/source/mir/entity/adapter/EntityAdapter.java b/source/mir/entity/adapter/EntityAdapter.java index cafd1eb5..2fff4d20 100755 --- a/source/mir/entity/adapter/EntityAdapter.java +++ b/source/mir/entity/adapter/EntityAdapter.java @@ -18,13 +18,13 @@ * 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 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. + * 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; @@ -32,12 +32,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; +/** 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 implements Map { private Entity entity; private EntityAdapterDefinition definition; @@ -54,9 +65,8 @@ public class EntityAdapter implements Map { public boolean containsKey(Object aKey) { try { if (aKey instanceof String) - return entity.hasValueForField((String) aKey) - || definition.hasCalculatedField((String) aKey) - || entity.getFields().contains(aKey); + return entity.hasField((String) aKey) + || definition.hasCalculatedField((String) aKey); } catch (Throwable t) { } @@ -94,7 +104,7 @@ public class EntityAdapter implements Map { return result; } else if (aKey instanceof String) { - return entity.getValue((String) aKey); + return entity.getFieldValue((String) aKey); } else { return null; @@ -141,29 +151,57 @@ public class EntityAdapter implements Map { throw new UnsupportedOperationException("EntityAdapter.entrySet()"); } - public Object getRelation(String aWhereClause, String anOrderByClause, String aDefinition) { + public Object getComplexRelation(String aMainTablePrefix, List someExtraTables, + String aWhereClause, String anOrderByClause, String aDefinition) { try { return new CachingRewindableIterator( - new EntityIteratorAdapter( - aWhereClause, anOrderByClause, -1, getModel(), aDefinition)); + new EntityIteratorAdapter(aMainTablePrefix, someExtraTables, + aWhereClause, anOrderByClause, + -1, getModel(), aDefinition, -1, 0) + ); + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } + } + + + public Object 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 getToOneRelation(String aWhereClause, String anOrderByClause, String aDefinition) { + 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 i.next(); - else - return null; + return (EntityAdapter) i.next(); + 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