package com.c2kernel.gui.tree; import java.util.ArrayList; import javax.swing.tree.DefaultMutableTreeNode; import com.c2kernel.collection.Collection; import com.c2kernel.collection.CollectionMember; import com.c2kernel.collection.Dependency; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.entity.proxy.ProxyObserver; import com.c2kernel.gui.ItemTabManager; import com.c2kernel.gui.MainFrame; import com.c2kernel.lookup.InvalidItemPathException; import com.c2kernel.lookup.ItemPath; 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 implements ProxyObserver> { ItemProxy parent; Collection thisCollection; String path; public NodeCollection(ItemProxy parent, String name, ItemTabManager desktop) { super(desktop); this.parent = parent; this.name = name; this.path = parent.getSystemKey()+"/Collection/"+name; createTreeNode(); this.makeExpandable(); } public NodeCollection(ItemProxy parent, Collection coll, ItemTabManager desktop) { super(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 { if (thisCollection == null) { Collection initColl = (Collection)parent.getObject(ClusterStorage.COLLECTION+"/"+name); add(initColl); } parent.subscribe(new MemberSubscription>(this, ClusterStorage.COLLECTION, false)); } catch (ObjectNotFoundException ex) { end(false); return; } } @Override public void add(Collection contents) { if (!contents.getName().equals(name)) return; this.type = contents.getClass().getSimpleName(); ArrayList newMembers = contents.getMembers().list; ArrayList oldMembers; if (thisCollection == null) oldMembers = new ArrayList(); else oldMembers = thisCollection.getMembers().list; ArrayList currentPaths = new ArrayList(); // add any missing paths for (CollectionMember newMember : newMembers) { if (!oldMembers.contains(newMember) && newMember.getSystemKey()>-1) try { ItemPath itemPath = new ItemPath(newMember.getSystemKey()); currentPaths.add(itemPath); NodeItem newMemberNode = new NodeItem(itemPath, desktop); newMemberNode.setCollection(contents, newMember.getID(), parent); newMemberNode.setToolTip(getPropertyToolTip(newMember.getProperties())); add(newMemberNode); } catch (InvalidItemPathException ex) { Logger.error("NodeCollection::loadChildren() " + ex.toString()); } } // 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(""); for (KeyValuePair prop : props.getKeyValuePairs()) { verStr.append("").append(prop.getKey()).append(": ").append(prop.getValue()).append("
"); } return verStr.append("").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; } }