added "new PHP project" shortcut to PHP perspective
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / bookmark / EntityNode.java
index 6d5adbe..b45d6b8 100644 (file)
@@ -1,8 +1,17 @@
 package com.quantum.view.bookmark;
 
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 import com.quantum.model.Column;
 import com.quantum.model.Entity;
 import com.quantum.model.EntityHolder;
+import com.quantum.model.NotConnectedException;
 import com.quantum.model.SchemaHolder;
 import com.quantum.model.Table;
 import com.quantum.model.View;
@@ -15,6 +24,10 @@ public class EntityNode extends TreeNode implements EntityHolder {
     private Entity entity;
     private boolean longFormName;
     
+    private List columns = Collections.synchronizedList(new ArrayList());
+    private List foreignKeys = Collections.synchronizedList(new ArrayList());
+    boolean initialized = false;
+    
     public EntityNode(TreeNode parent, Entity entity) {
         this(parent, entity, false);
     }
@@ -31,8 +44,11 @@ public class EntityNode extends TreeNode implements EntityHolder {
         }
     }
 
-    public Object[] getChildren() {
-        initializeChildren();
+    public Object[] getChildren() throws NotConnectedException, SQLException {
+        if (!isInitialized()) {
+               initializeChildren();
+        }
+       
         if (this.children.size() > 0) {
             return (ColumnNode[]) this.children.toArray(new ColumnNode[this.children.size()]);
         } else {
@@ -40,15 +56,36 @@ public class EntityNode extends TreeNode implements EntityHolder {
         }
     }
 
-    protected synchronized void initializeChildren() {
-        this.children.clear();
+    protected synchronized void initializeChildren() throws NotConnectedException, SQLException {
+       boolean wasInitialized = isInitialized();
+        Map map = getChildrenAsMap();
         Column[] columns = this.entity.getColumns();
+        this.children.clear();
         for (int i = 0, length = (columns == null) ? 0 : columns.length;
             i < length;
             i++) {
-            this.children.add(new ColumnNode(this, columns[i]));
+               
+               ColumnNode node = (ColumnNode) map.get(columns[i].getName());
+               if (node == null) {
+                       this.children.add(new ColumnNode(this, columns[i]));
+               } else {
+                       node.setColumn(columns[i]);
+                       this.children.add(node);
+               }
+               
+               if (wasInitialized) {
+                       firePropertyChange("columns", null, null);
+               }
         }
-        // TODO: fire property change event
+    }
+    
+    private Map getChildrenAsMap() {
+       Map map = new HashMap();
+       for (Iterator i = this.children.iterator(); i.hasNext();) {
+                       TreeNode node = (TreeNode) i.next();
+                       map.put(node.getName(), node);
+               }
+       return map;
     }
 
     public boolean hasChildren() {
@@ -68,7 +105,7 @@ public class EntityNode extends TreeNode implements EntityHolder {
     }
     
     public String getLabelName() {
-        return (this.longFormName) ? this.entity.getCondQualifiedName() : this.entity.getName();
+        return (this.longFormName) ? this.entity.getQualifiedName() : this.entity.getName();
     }
     
     public boolean isTable() {
@@ -89,8 +126,15 @@ public class EntityNode extends TreeNode implements EntityHolder {
         } else if (isView()) {
             return "view.gif";
         } else {
-            return (this.entity.exists() == null || this.entity.exists().booleanValue()) 
-                ? "bigtable.gif" : "missingtable.gif";
+            if (this.entity.exists() == null || this.entity.exists().booleanValue()){
+               if (this.entity.isSynonym())
+                       return "big_syn_table.gif";
+               else
+                       return "bigtable.gif";
+            } else
+               return "missingtable.gif";
+   
+   
         }
     }
 
@@ -119,10 +163,13 @@ public class EntityNode extends TreeNode implements EntityHolder {
     public int compareTo(Object o) {
         if (o instanceof EntityNode) {
             EntityNode that = (EntityNode) o;
-            return this.entity.getCondQualifiedName().compareTo(
-                that.entity.getCondQualifiedName());
+            return this.entity.getQualifiedName().compareTo(
+                that.entity.getQualifiedName());
         } else {
             return super.compareTo(o);
         }
     }
+       void setEntity(Entity entity) {
+               this.entity = entity;
+       }
 }