package org.chartsy.stockscanpro.ui;
import java.awt.Dimension;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Collection;
import java.util.Iterator;
import javax.swing.JComponent;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.tree.TreeSelectionModel;
import org.chartsy.stockscanpro.actions.LoadScansAction;
import org.chartsy.stockscanpro.filetype.ScanDataObject;
import org.netbeans.editor.EditorUI;
import org.netbeans.editor.Utilities;
import org.openide.explorer.ExplorerManager;
import org.openide.explorer.ExplorerUtils;
import org.openide.explorer.view.BeanTreeView;
import org.openide.nodes.Node;
import org.openide.util.Lookup;
import org.openide.util.LookupEvent;
import org.openide.util.LookupListener;
/**
*
* @author Viorel
*/
public class ScanLoaderPanel extends JPanel
implements ExplorerManager.Provider, Lookup.Provider, LookupListener
{
private ExplorerManager manager;
private BeanTreeView treeView;
private JEditorPane editorPane;
private QueryPanel queryPanel;
private Lookup lookup;
private Lookup.Result result;
private String scanTitle;
public ScanLoaderPanel(QueryPanel panel)
{
super(SpringUtilities.getLayout());
setOpaque(false);
queryPanel = panel;
manager = new ExplorerManager();
lookup = ExplorerUtils.createLookup(manager, getActionMap());
manager.setRootContext(LoadScansAction.getRootNode());
initComponents();
}
private void initComponents()
{
treeView = new BeanTreeView();
treeView.setRootVisible(false);
treeView.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
treeView.setDragSource(true);
treeView.setUseSubstringInQuickSearch(true);
treeView.setPreferredSize(new Dimension(600, 300));
treeView.setPopupAllowed(false);
add(treeView);
editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.setContentType("text/x-scan");
EditorUI editorUI = Utilities.getEditorUI(editorPane);
JComponent mainComp = null;
if (editorUI != null)
mainComp = editorUI.getExtComponent();
if (mainComp == null)
mainComp = new javax.swing.JScrollPane(editorPane);
mainComp.setPreferredSize(new Dimension(600, 150));
add(mainComp);
SpringUtilities.makeCompactGrid(this,
getComponentCount(), 1, // rows, cols
5, 5, // initialX, initialY
5, 5);// xPad, yPad
}
public ExplorerManager getExplorerManager()
{
return manager;
}
public Lookup getLookup()
{
return lookup;
}
public @Override void addNotify()
{
super.addNotify();
ExplorerUtils.activateActions(manager, true);
result = lookup.lookupResult(ScanDataObject.class);
result.addLookupListener(this);
}
public @Override void removeNotify()
{
ExplorerUtils.activateActions(manager, false);
if (result != null)
{
result.removeLookupListener(this);
result = null;
}
super.removeNotify();
}
public void resultChanged(LookupEvent lookupEvent)
{
Lookup.Result res = (Lookup.Result) lookupEvent.getSource();
Collection collection = res.allInstances();
if (!collection.isEmpty())
{
StringBuilder builder = new StringBuilder();
for (Iterator it = collection.iterator(); it.hasNext();)
{
ScanDataObject dataObject = (ScanDataObject) it.next();
builder.append(decode((String) dataObject.getPrimaryFile().getAttribute("content")));
scanTitle = decode((String) dataObject.getPrimaryFile().getAttribute("title"));
}
editorPane.setText(builder.toString());
}
else
{
scanTitle = "Untitled Scan";
editorPane.setText("");
}
}
public void setRootNode(Node rootNode)
{
getExplorerManager().setRootContext(rootNode);
}
public BeanTreeView getTreeView()
{
return treeView;
}
public void setQueryPanel(QueryPanel panel)
{
this.queryPanel = panel;
}
public void loadScan()
{
queryPanel.setScanTitle(scanTitle);
queryPanel.setScan(editorPane.getText());
}
public String decode(String text)
{
try
{
return URLDecoder.decode(text, "UTF-8");
}
catch (UnsupportedEncodingException ex)
{
return text;
}
}
}