/* * This source code is the property of EADS France. No part of it shall * be reproduced or transmitted without the express prior written * authorization of EADS France, and its contents shall not be disclosed. * Copyright EADS France. */ package org.jcae.netbeans.mesh.bora; import org.jcae.netbeans.mesh.*; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import javax.swing.Action; import org.jcae.mesh.bora.ds.BCADGraphCell; import org.jcae.netbeans.mesh.bora.SubmeshNode.DataModel; import org.openide.actions.NewAction; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.actions.SystemAction; import org.openide.util.datatransfer.NewType; /** * * @author Gautam Botrel * */ public class BGroupsNode extends AbstractNode { private final BGroupsNodeKeys groupNode; public BGroupsNode(SubmeshNode.DataModel dataModel) { super(Children.LEAF); groupNode = new BGroupsNodeKeys(dataModel); setChildren(groupNode); } public void fireModelChanged() { groupNode.fireModelChanged(); } public class BGroupsNodeKeys extends Children.Keys<String> { private final SubmeshNode.DataModel dataModel; public BGroupsNodeKeys(DataModel dataModel) { this.dataModel = dataModel; } @Override protected void addNotify() { fireModelChanged(); } public void fireModelChanged() { setKeys(dataModel.getAllGroups()); for (String group : dataModel.getAllGroups()) { refreshKey(group); } } public void addNewGroupNode() { final String group = "group"; Collection<String> existing = dataModel.getAllGroups(); int i = 0; String toAdd = group; while (existing.contains(toAdd)) { toAdd = group + i++; } dataModel.addGroup(toAdd,null); fireModelChanged(); } @Override protected Node[] createNodes(String arg0) { ArrayList<Node> toCreate = new ArrayList<Node>(); final String group = arg0.toString(); for (BCADGraphCell cell : dataModel.getCellsInGroup(group)) { BCADGraphNode newNode = new BCADGraphNode(true, cell, dataModel); dataModel.addListener(newNode); toCreate.add(newNode); } BGroupNode toAdd = new BGroupNode(group, toCreate, dataModel); return new Node[]{toAdd}; } } @Override public Action[] getActions(boolean arg0) { return new Action[]{SystemAction.get(NewAction.class)}; } @Override public NewType[] getNewTypes() { return new NewType[]{new NewType() { public void create() throws IOException { groupNode.addNewGroupNode(); } @Override public String getName() { return "Group"; } }}; } }