testing extension of EntityBrowser, EntityAdaptor
authorrk <rk>
Mon, 24 Nov 2003 21:45:26 +0000 (21:45 +0000)
committerrk <rk>
Mon, 24 Nov 2003 21:45:26 +0000 (21:45 +0000)
source/mir/entity/EntityBrowser.java
source/mir/entity/adapter/EntityAdapter.java
source/mir/entity/adapter/EntityIteratorAdapter.java
source/mir/storage/Database.java
source/mir/storage/StorageObject.java
source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java
source/mircoders/storage/DatabaseContentToTopics.java

index 44b21f4..1e4f1fe 100755 (executable)
@@ -30,6 +30,8 @@
 
 package mir.entity;
 
+import java.util.List;
+
 import mir.storage.StorageObject;
 import mir.storage.StorageObjectFailure;
 import mir.util.RewindableIterator;
@@ -37,6 +39,8 @@ import mir.util.RewindableIterator;
 public class EntityBrowser implements RewindableIterator {
 
   private StorageObject storage;
+  private String mainTablePrefix;
+  private List extraTables;
   private String whereClause;
   private String orderByClause;
   private int batchSize;
@@ -49,19 +53,27 @@ public class EntityBrowser implements RewindableIterator {
   private int batchPosition;
   private int positionInBatch;
 
-  public EntityBrowser(StorageObject aStorage, String aWhereClause, String anOrderByClause,
-                       int aBatchSize, int aLimit, int aSkip) throws StorageObjectFailure {
+  public EntityBrowser(StorageObject aStorage, String aMainTablePrefix, List someExtraTables,
+     String aWhereClause, String anOrderByClause,
+     int aBatchSize, int aLimit, int aSkip) throws StorageObjectFailure {
 
     storage=aStorage;
+    mainTablePrefix=aMainTablePrefix;
+    extraTables=someExtraTables;
     whereClause=aWhereClause;
     orderByClause=anOrderByClause;
     batchSize=aBatchSize;
     skip=aSkip;
     limit=aLimit;
-
+    
     rewind();
   }
 
+  public EntityBrowser(StorageObject aStorage, String aWhereClause, String anOrderByClause,
+                       int aBatchSize, int aLimit, int aSkip) throws StorageObjectFailure {
+    this(aStorage, "", null, aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip);
+  }
+
   public EntityBrowser(StorageObject aStorage,
           String aWhereClause, String anOrderByClause,
           int aBatchSize) throws StorageObjectFailure {
@@ -69,7 +81,7 @@ public class EntityBrowser implements RewindableIterator {
   }
 
   public void readCurrentBatch(int aSkip) throws StorageObjectFailure {
-    currentBatch = storage.selectByWhereClause(whereClause, orderByClause, aSkip, batchSize);
+    currentBatch = storage.selectByWhereClause (whereClause, orderByClause, aSkip, batchSize);
     batchPosition = aSkip;
     positionInBatch = 0;
   }
index 42faf0b..1b21f3e 100755 (executable)
@@ -32,6 +32,7 @@ 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;
 
@@ -141,6 +142,22 @@ public class EntityAdapter implements Map {
     throw new UnsupportedOperationException("EntityAdapter.entrySet()");
   }
 
+  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 Object getRelation(String aWhereClause, String anOrderByClause, String aDefinition) {
     try {
       return
index 0b29d42..49df936 100755 (executable)
@@ -29,6 +29,8 @@
  */
 package mir.entity.adapter;
 
+import java.util.List;
+
 import mir.entity.Entity;
 import mir.entity.EntityBrowser;
 import mir.storage.StorageObjectFailure;
@@ -57,6 +59,14 @@ public class EntityIteratorAdapter implements RewindableIterator {
     this(new EntityBrowser(aModel.getMappingForName(aDefinitionName).getStorage(), aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip), aModel, aDefinitionName);
   }
 
+  public EntityIteratorAdapter(String aMainTablePrefix, List someExtraTables, 
+          String aWhereClause, String anOrderByClause,
+          int aBatchSize, EntityAdapterModel aModel, String aDefinitionName,
+          int aLimit, int aSkip) throws StorageObjectFailure, EntityAdapterExc {
+    this(new EntityBrowser(aModel.getMappingForName(aDefinitionName).getStorage(), aMainTablePrefix, someExtraTables, aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip), aModel, aDefinitionName);
+  }
+
+
   public boolean hasNext() {
     return iterator.hasNext();
   }
index fde49b2..ab93c7e 100755 (executable)
@@ -75,7 +75,7 @@ import com.codestudio.util.SQLManager;
  * Treiber, Host, User und Passwort, ueber den der Zugriff auf die
  * Datenbank erfolgt.
  *
- * @version $Id: Database.java,v 1.44.2.8 2003/11/24 19:57:54 rk Exp $
+ * @version $Id: Database.java,v 1.44.2.9 2003/11/24 21:45:26 rk Exp $
  * @author rk
  *
  */
@@ -474,7 +474,7 @@ public class Database implements StorageObject {
    */
 
   public EntityList selectByWhereClauseWithExtraTables(String mainTablePrefix, 
-                                               Vector extraTables, String aWhereClause )
+                                               List extraTables, String aWhereClause )
    throws StorageObjectFailure {
        return selectByWhereClause( mainTablePrefix, extraTables, aWhereClause, "", 0, -1);
   }
@@ -576,7 +576,7 @@ public class Database implements StorageObject {
    * @return EntityList mit den gematchten Entities
    * @exception StorageObjectException
    */
-  public EntityList selectByWhereClause(String mainTablePrefix, Vector extraTables,
+  public EntityList selectByWhereClause(String mainTablePrefix, List extraTables,
       String aWhereClause, String anOrderByClause,
                        int offset, int limit) throws StorageObjectFailure {
     
@@ -624,8 +624,8 @@ public class Database implements StorageObject {
     // append extratables, if necessary
     if (extraTables!=null) {
       for (int i=0;i < extraTables.size();i++) {
-        countSql.append( ", " + extraTables.elementAt(i));
-        selectSql.append( ", " + extraTables.elementAt(i));
+        countSql.append( ", " + extraTables.get(i));
+        selectSql.append( ", " + extraTables.get(i));
       }
     }
     
index 921ce85..dc68091 100755 (executable)
@@ -153,6 +153,11 @@ public interface StorageObject {
    */
   abstract public void update(Entity a) throws StorageObjectFailure;
 
+  abstract public EntityList selectByWhereClause(String mainTablePrefix, List extraTables,
+      String aWhereClause, String anOrderByClause,
+      int offset, int limit) throws StorageObjectFailure;
+  
+
   /**
    * Dokumentation siehe Database.java
    * @param a
index 744e546..17eb268 100755 (executable)
@@ -461,7 +461,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       topicOrder = aTopicOrder;
     }
 
-       // TODO rewrite as relational select
+        // TODO rewrite as relational select
     public Object getValue(EntityAdapter anEntityAdapter) {
       try {
         String condition = "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)";
@@ -494,14 +494,21 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
 
     public Object getValue(EntityAdapter anEntityAdapter) {
       try {
-               // TODO rewrite as relational select
-        String condition = "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)";
+        // TODO rewrite as relational select
+        // select * from content where exists 
+        // (select * from content_x_media where content_id="+
+        // anEntityAdapter.get("id")+" and media_id=id)        
+        String condition = "cxm.content_id="+ anEntityAdapter.get("id") +
+          "cxm.media_id = m.id";        
+        List extraTables = new Vector();
+        extraTables.add("content_x_media cxm");        
+        // String condition = "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)";
         if (published)
           condition = "is_published='t' and " + condition;
-        return anEntityAdapter.getRelation(
-           condition,
-          "id",
-          definition);
+        // return anEntityAdapter.getRelation(
+        //    condition, "id", definition);
+          
+        return anEntityAdapter.getComplexRelation("m", extraTables, condition, "id", definition);
       }
       catch (Throwable t) {
         throw new RuntimeException(t.getMessage());
index 0695ac7..3d19a17 100755 (executable)
@@ -82,21 +82,14 @@ public class DatabaseContentToTopics extends Database implements StorageObject{
   public EntityList getTopics(EntityContent content) {
     EntityList returnList=null;
     if (content != null) {
-      // get all to_topic from content_x_topic
-      // TODO rewrite with getByWhereClauseWithExtraTables
-      // select t.* from topics t, content_x_topic cxt where t.id=cxt.topic_id
-      // and cxt.content_id=<id>
-      
-      String id = content.getId();
-      //String subselect = "id in (select topic_id from " + theTable + " where content_id=" + id+")";
 
+      String id = content.getId();
       try {
         Vector extraTables = new Vector();
         extraTables.add(theTable+" cxt");
         returnList = DatabaseTopics.getInstance()
                       .selectByWhereClauseWithExtraTables("t",extraTables, 
-                                              "t.id=cxt.topic_id and  cxt.content_id="+id );
-        // .selectByWhereClause(subselect,-1);
+                                              "t.id=cxt.topic_id and  cxt.content_id="+id );        
       }
       catch (Exception e) {
         logger.error("-- get topics failed " + e.toString());
@@ -281,9 +274,9 @@ public class DatabaseContentToTopics extends Database implements StorageObject{
     throws StorageObjectFailure {
     EntityList returnList=null;
     if (topic != null) {
-      // TODO rewrite with getByWhereClauseWithExtraTables 
-      // 
       
+      // TODO rewrite with getByWhereClauseWithExtraTables 
+            
       String id = topic.getId();
       String select = "select content_id from " + theTable + " where topic_id=" + id;