package org.chartsy.main.favorites.nodes; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import org.chartsy.main.ChartFrame; import org.chartsy.main.data.ChartData; import org.chartsy.main.intervals.DailyInterval; import org.chartsy.main.managers.ChartManager; import org.chartsy.main.managers.TemplateManager; import org.chartsy.main.templates.Template; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor.InputLine; import org.openide.NotifyDescriptor.Message; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.actions.NodeAction; /** * * @author Viorel */ public class Actions { private Actions() {} public static Action openStock(StockAPINode node) { return new OpenStock(node); } public static Action addFolder(RootAPINode node) { return AddFolder.addFolder(node); } public static Action renameFolder() { return RenameFolder.getDefault(); } private static class OpenStock extends AbstractAction implements HelpCtx.Provider { private StockAPINode node; public OpenStock(StockAPINode node) { this.node = node; putValue(NAME, "Open in New Tab"); } public void actionPerformed(ActionEvent e) { if (node != null) { final StockAPI stock = node.getLookup().lookup(StockAPI.class); if (stock != null) { String defaultTemplate = TemplateManager.getDefault().getDefaultTemplate(); Template template = TemplateManager.getDefault().getTemplate(defaultTemplate); ChartData chartData = new ChartData(); chartData.setStock(stock.getStock()); chartData.setDataProviderName(stock.getDataProviderName()); chartData.setInterval(new DailyInterval()); chartData.setChart( ChartManager.getDefault().getChart("Candle Stick")); ChartFrame chartFrame = ChartFrame.getInstance(); chartFrame.setChartData(chartData); chartFrame.setTemplate(template); chartFrame.open(); chartFrame.requestActive(); } } } public HelpCtx getHelpCtx() { return new HelpCtx(OpenStock.class); } } private static class AddFolder extends NodeAction { private static AddFolder ADDFOLDER; public static Action addFolder(RootAPINode node) { if (ADDFOLDER == null) ADDFOLDER = new AddFolder(node); return ADDFOLDER; } private RootAPINode root; private AddFolder(RootAPINode root) { this.root = root; } protected @Override void performAction(Node[] nodes) { InputLine descriptor = new DialogDescriptor.InputLine("Folder Name:", "Add Folder"); descriptor.setOptions(new Object[] { DialogDescriptor.OK_OPTION, DialogDescriptor.CANCEL_OPTION }); Object ret = DialogDisplayer.getDefault().notify(descriptor); if (ret.equals(DialogDescriptor.OK_OPTION)) { String folderName = descriptor.getInputText(); if ((folderName != null) && (folderName.hashCode() != "".hashCode())) { FolderAPI folder = new FolderAPI(); folder.setDisplayName(folderName); if (!root.getRoot().folderNameExists(folderName)) { root.getRoot().addFolder(folder); if (root.getChildren() instanceof RootAPIChildren) { RootAPIChildren children = (RootAPIChildren) root.getChildren(); children.addNewFolder(new FolderAPINode(folder)); } //root.getChildren().add(new Node[] { new FolderAPINode(folder) }); } else { Message message = new DialogDescriptor.Message( "Folder already exists.", DialogDescriptor.INFORMATION_MESSAGE); DialogDisplayer.getDefault().notify(message); } } else { Message message = new DialogDescriptor.Message( "Invalid folder name.", DialogDescriptor.WARNING_MESSAGE); DialogDisplayer.getDefault().notify(message); } } } protected @Override boolean enable(Node[] nodes) { return true; } public @Override String getName() { return "Add Folder"; } public @Override HelpCtx getHelpCtx() { return new HelpCtx(AddFolder.class); } protected @Override boolean asynchronous() { return false; } } private static class RenameFolder extends NodeAction { private static RenameFolder RENAME = new RenameFolder(); public static Action getDefault() { return RENAME; } protected @Override void performAction(Node[] nodes) { if (nodes == null || nodes.length == 0) return; if (nodes.length > 1) { Message message = new DialogDescriptor.Message( "You can rename only one folder.", DialogDescriptor.INFORMATION_MESSAGE); DialogDisplayer.getDefault().notify(message); return; } FolderAPINode node = (FolderAPINode) nodes[0]; RootAPINode root = (RootAPINode) node.getParentNode(); InputLine descriptor = new DialogDescriptor.InputLine("Folder Name:", "Rename Folder"); descriptor.setOptions(new Object[] { DialogDescriptor.OK_OPTION, DialogDescriptor.CANCEL_OPTION }); Object ret = DialogDisplayer.getDefault().notify(descriptor); if (ret.equals(DialogDescriptor.OK_OPTION)) { String folderName = descriptor.getInputText(); if ((folderName != null) && (folderName.hashCode() != "".hashCode())) { if (!root.getRoot().folderNameExists(folderName)) { node.setDisplayName(folderName); node.getFolder().setDisplayName(folderName); } else { Message message = new DialogDescriptor.Message( "Folder already exists.", DialogDescriptor.INFORMATION_MESSAGE); DialogDisplayer.getDefault().notify(message); } } else { Message message = new DialogDescriptor.Message( "Invalid folder name.", DialogDescriptor.WARNING_MESSAGE); DialogDisplayer.getDefault().notify(message); } } } protected @Override boolean enable(Node[] nodes) { if (nodes == null || nodes.length == 0) return false; for (int i = 0; i < nodes.length; i++) if (!(nodes[i] instanceof FolderAPINode)) return false; return true; } public @Override String getName() { return "Rename"; } public @Override HelpCtx getHelpCtx() { return new HelpCtx(RenameFolder.class); } protected @Override boolean asynchronous() { return false; } } }