diff options
Diffstat (limited to 'src/main/java/com/c2kernel/gui/tree/NodeCollection.java')
| -rw-r--r-- | src/main/java/com/c2kernel/gui/tree/NodeCollection.java | 120 |
1 files changed, 101 insertions, 19 deletions
diff --git a/src/main/java/com/c2kernel/gui/tree/NodeCollection.java b/src/main/java/com/c2kernel/gui/tree/NodeCollection.java index 631ed8b..47afc5f 100644 --- a/src/main/java/com/c2kernel/gui/tree/NodeCollection.java +++ b/src/main/java/com/c2kernel/gui/tree/NodeCollection.java @@ -4,19 +4,27 @@ import java.util.ArrayList; import javax.swing.tree.DefaultMutableTreeNode;
+import com.c2kernel.collection.Collection;
import com.c2kernel.collection.CollectionMember;
-import com.c2kernel.collection.Parent2ChildCollection;
+import com.c2kernel.collection.Dependency;
import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.entity.proxy.EntityProxyObserver;
import com.c2kernel.entity.proxy.ItemProxy;
+import com.c2kernel.entity.proxy.MemberSubscription;
import com.c2kernel.gui.EntityTabManager;
+import com.c2kernel.gui.MainFrame;
import com.c2kernel.lookup.EntityPath;
import com.c2kernel.lookup.InvalidEntityPathException;
+import com.c2kernel.lookup.Path;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.utils.CastorHashMap;
+import com.c2kernel.utils.KeyValuePair;
import com.c2kernel.utils.Logger;
-public class NodeCollection extends Node {
+public class NodeCollection extends Node implements EntityProxyObserver<Collection<? extends CollectionMember>> {
ItemProxy parent;
- Parent2ChildCollection<CollectionMember> thisCollection;
+ Collection<? extends CollectionMember> thisCollection;
String path;
public NodeCollection(ItemProxy parent, String name, EntityTabManager desktop) {
@@ -27,42 +35,116 @@ public class NodeCollection extends Node { createTreeNode();
this.makeExpandable();
}
+
+ public NodeCollection(ItemProxy parent, Collection<? extends CollectionMember> coll, EntityTabManager desktop) {
+ this.desktop = desktop;
+ this.parent = parent;
+ this.name = coll.getName();
+ this.path = parent.getSystemKey()+"/Collection/"+name;
+ createTreeNode();
+ this.makeExpandable();
+ add(coll);
+ }
@Override
public void loadChildren() {
Logger.msg(8, "NodeCollection::loadChildren()");
try {
- thisCollection = (Parent2ChildCollection<CollectionMember>)parent.getObject("Collection/"+name);
+ if (thisCollection == null) {
+ Collection<? extends CollectionMember> initColl = (Collection<? extends CollectionMember>)parent.getObject(ClusterStorage.COLLECTION+"/"+name);
+ add(initColl);
+ }
+ parent.subscribe(new MemberSubscription<Collection<? extends CollectionMember>>(this, ClusterStorage.COLLECTION, false));
} catch (ObjectNotFoundException ex) {
end(false);
return;
}
-
- this.type = thisCollection.getClass().getName();
- int lastDot = this.type.lastIndexOf('.');
- if (lastDot > -1) this.type = this.type.substring(lastDot+1);
- ArrayList<CollectionMember> collectionMembers = thisCollection.getMembers().list;
- for (int i=0; i<collectionMembers.size(); i++)
- {
- CollectionMember aMember = collectionMembers.get(i);
- if (aMember!=null)
+ }
+
+ @Override
+ public void add(Collection<? extends CollectionMember> contents) {
+ if (!contents.getName().equals(name)) return;
+ this.type = contents.getClass().getSimpleName();
+ ArrayList<? extends CollectionMember> newMembers = contents.getMembers().list;
+ ArrayList<? extends CollectionMember> oldMembers;
+ if (thisCollection == null)
+ oldMembers = new ArrayList<CollectionMember>();
+ else
+ oldMembers = thisCollection.getMembers().list;
+
+ ArrayList<Path> currentPaths = new ArrayList<Path>();
+ // add any missing paths
+ for (CollectionMember newMember : newMembers) {
+ if (!oldMembers.contains(newMember) && newMember.getEntityKey()>-1)
try
{
- EntityPath entityPath = new EntityPath(aMember.getEntityKey());
- add(new NodeItem(entityPath, desktop));
+ EntityPath entityPath = new EntityPath(newMember.getEntityKey());
+ currentPaths.add(entityPath);
+ NodeItem newMemberNode = new NodeItem(entityPath, desktop);
+ newMemberNode.setCollection(contents, newMember.getID(), parent);
+ newMemberNode.setToolTip(getPropertyToolTip(newMember.getProperties()));
+ add(newMemberNode);
}
catch (InvalidEntityPathException ex)
{
- Logger.error("InvalidEntityPathException::NodeCollection::loadChildren() " + ex.toString());
+ Logger.error("NodeCollection::loadChildren() " + ex.toString());
}
}
-
- end(false);
-
+ // remove those no longer present
+ for (Path childPath : childNodes.keySet()) {
+ if (!currentPaths.contains(childPath)) {
+ remove(childPath);
+ }
+
+ }
+
+ thisCollection = contents;
+ if (isDependency())
+ setToolTip(getPropertyToolTip(((Dependency)contents).getProperties()));
+ end(false);
+ }
+
+ public boolean addMember(int syskey) {
+ if (!isDependency()) return false;
+ String[] params = { thisCollection.getName(), String.valueOf(syskey) };
+ try {
+ MainFrame.userAgent.execute(parent, "AddMemberToCollection", params);
+ return true;
+ } catch (Exception e1) {
+ MainFrame.exceptionDialog(e1);
+ return false;
+ }
+ }
+
+ public static String getPropertyToolTip(CastorHashMap props) {
+ if (props.size() == 0) return null;
+ StringBuffer verStr = new StringBuffer("<html>");
+ for (KeyValuePair prop : props.getKeyValuePairs()) {
+ verStr.append("<b>").append(prop.getKey()).append(":</b> ").append(prop.getValue()).append("<br/>");
+ }
+ return verStr.append("</html>").toString();
}
@Override
public DefaultMutableTreeNode getTreeNode() {
return treeNode;
}
+
+
+
+ @Override
+ public void remove(String id) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void control(String control, String msg) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public boolean isDependency() {
+ return thisCollection instanceof Dependency;
+ }
}
|
