package jeql.workbench.ui.assist;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import jeql.engine.CommandInvoker;
import jeql.engine.CommandRegistry;
import jeql.engine.EngineContext;
import jeql.man.CommandParamMethod;
import jeql.man.CommandUtil;
import jeql.man.ManUtil;
import jeql.workbench.Workbench;
public class CommandAssistPanel extends JPanel
{
public static CodeSnippet getCodeSnip(JList list)
{
return (CodeSnippet) list.getSelectedValue();
}
private DefaultListModel cmdListModel = new DefaultListModel();
private JList cmdList = new JList(cmdListModel);
private DefaultListModel paramListModel = new DefaultListModel();
private JList paramList = new JList(paramListModel);
private CodeAssistPanel codeAssistPanel;
public CommandAssistPanel(CodeAssistPanel codeAssistPanel)
{
this.codeAssistPanel = codeAssistPanel; try {
initUI();
populateCmdList();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
private void initUI() throws Exception
{
//setSize(100, 250);
cmdList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cmdList.setSelectionBackground(Color.GRAY);
cmdList.setSize(100, 250);
cmdList.setBorder(new EmptyBorder(2, 2, 2, 2));
cmdList.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
populateParamList();
CodeSnippet snip = getCodeSnip(cmdList);
codeAssistPanel.showDoc(snip.getDoc());
if (e.getClickCount() == 2) {
Workbench.controller().insertCodeSnippet(snip);
}
}
});
JScrollPane cmdScrollPane1 = new JScrollPane();
cmdScrollPane1.getViewport().add(cmdList, null);
//--------- Function list
paramList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
paramList.setSelectionBackground(Color.GRAY);
paramList.setSize(100, 250);
paramList.setBorder(new EmptyBorder(2, 2, 2, 2));
paramList.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
CodeSnippet snip = getCodeSnip(paramList);
codeAssistPanel.showDoc(snip.getDoc());
if (e.getClickCount() == 2) {
Workbench.controller().insertCodeSnippet(getCodeSnip(paramList));
}
}
});
JScrollPane paramScrollPane = new JScrollPane();
paramScrollPane.getViewport().add(paramList, null);
setLayout(new GridLayout(1,2));
setPreferredSize(new Dimension(150, 250));
add(cmdScrollPane1);
add(paramScrollPane);
}
public void populateCmdList()
{
cmdListModel.clear();
CommandRegistry reg = EngineContext.getInstance().geCommandRegistry();
for (CommandInvoker ci : reg.getCommands() ) {
cmdListModel.addElement(CodeSnippet.code2(
ci.getName(),
ci.getDescription(),
ci.getName() + " ", ";"));
}
}
private void populateParamList()
{
String moduleName = cmdList.getSelectedValue().toString();
populateParamList(moduleName);
}
private void populateParamList(String cmdName)
{
paramListModel.clear();
Map<String, CommandParamMethod> params = EngineContext.getInstance().geCommandRegistry().getCommand(cmdName).getParameters();
// output default first
if (params.containsKey(CommandInvoker.DEFAULT_METHOD_NAME)) {
//System.out.println(PARAM_INDENT + params.get(CommandInvoker.DEFAULT_METHOD_NAME));
CommandParamMethod param = params.get(CommandInvoker.DEFAULT_METHOD_NAME);
String name = null;
paramListModel.addElement(CodeSnippet.code(
param.toStringSpec(),
param.getDoc(),
name));
/*
writer.writeCommandParam(param.getIOTag(), param.getDisplayName(),
param.getArgTypeList(), param.getDescription());
*/
}
for (String paramName : params.keySet() ) {
if (paramName.equals(CommandInvoker.DEFAULT_METHOD_NAME))
continue;
CommandParamMethod param = params.get(paramName);
String name = param.getDisplayName() + ": ";
paramListModel.addElement(CodeSnippet.code(
param.toStringSpec(),
param.getDoc(),
name ));
/*
writer.writeCommandParam(param.getIOTag(), param.getDisplayName(),
param.getArgTypeList(), param.getDescription());
*/
}
}
}