/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.viewdefinitioneditor;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.util.concurrent.SynchronousQueue;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.component.tool.AbstractTool;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.integration.swing.ViewEntry;
import com.opengamma.integration.swing.ViewListCellRenderer;
import com.opengamma.integration.swing.ViewListModel;
import com.opengamma.integration.tool.IntegrationToolContext;
import com.opengamma.scripts.Scriptable;
/**
* Debugging tool for engine functions.
*/
@Scriptable
public class ViewDefinitionEditor extends AbstractTool<IntegrationToolContext> {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(ViewDefinitionEditor.class);
private JFrame _frame;
private JTextField _viewNameTextField;
private ViewListModel _viewListModel;
//-------------------------------------------------------------------------
/**
* Main method to run the tool.
*
* @param args the standard tool arguments, not null
*/
public static void main(String[] args) {
new ViewDefinitionEditor().invokeAndTerminate(args);
}
//-------------------------------------------------------------------------
/**
* Initialize the contents of the frame.
* @wbp.parser.entryPoint
*/
private void initialize() {
_frame = new JFrame();
_frame.setTitle("View Definition Editor");
_frame.setPreferredSize(new Dimension(1000, 700));
_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
_frame.getContentPane().add(mainPanel, BorderLayout.CENTER);
mainPanel.setLayout(new BorderLayout());
_viewList = new JList<ViewEntry>();
_viewListModel = getViewListModel();
_viewList.setModel(_viewListModel);
_viewList.setCellRenderer(getViewListCellRenderer());
_viewList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
final ConfigSource configSource = getToolContext().getConfigSource();
JPanel panel = new JPanel();
mainPanel.add(panel, BorderLayout.CENTER);
panel.setLayout(new BorderLayout(0, 0));
_splitPane = new JSplitPane();
panel.add(_splitPane);
//JScrollPane failuresScrollPane = new JScrollPane(_failuresTreeTable);
//_splitPane.setRightComponent(failuresScrollPane);
_viewNameTextField = new JTextField();
_viewNameTextField.setHorizontalAlignment(JTextField.LEFT);
_viewNameTextField.addKeyListener(new KeyListener() {
private void actionPerformed(KeyEvent e) {
JTextField field = _viewNameTextField;
_viewListModel.setFilter(field.getText());;
}
@Override
public void keyTyped(KeyEvent e) {
s_logger.warn("key code = {}", e.getKeyCode());
actionPerformed(e);
}
@Override
public void keyPressed(KeyEvent e) {
s_logger.warn("key pressed = {}", e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
_viewList.requestFocusInWindow();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
_viewList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
@SuppressWarnings("unchecked")
JList<ViewEntry> cb = (JList<ViewEntry>) e.getSource();
final ViewEntry viewEntry = (ViewEntry) cb.getSelectedValue();
if (viewEntry != null) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
@SuppressWarnings("unchecked")
ConfigItem<ViewDefinition> configItem = (ConfigItem<ViewDefinition>) configSource.get(viewEntry.getUniqueId());
if (configItem.getValue() != null) {
_viewNameTextField.setText(viewEntry.getName());
//_portfolioTree.setModel(getPortfolioTreeModel(configItem.getValue().getPortfolioId(), getToolContext()));
} else {
JOptionPane.showMessageDialog(null, "There is no portfolio set in the selected view", "No portfolio", JOptionPane.ERROR_MESSAGE);
}
}
});
}
}
});
JPanel viewSelectionPanel = new JPanel(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(_viewList);
viewSelectionPanel.add(_viewNameTextField, BorderLayout.PAGE_START);
viewSelectionPanel.add(scrollPane, BorderLayout.CENTER);
_splitPane.setLeftComponent(viewSelectionPanel);
}
private ListCellRenderer<? super ViewEntry> getViewListCellRenderer() {
return new ViewListCellRenderer();
}
private ViewListModel getViewListModel() {
return new ViewListModel(getToolContext().getConfigMaster());
}
private final SynchronousQueue<Void> _endQueue = new SynchronousQueue<>();
private JSplitPane _splitPane;
private JList<ViewEntry> _viewList;
@Override
protected void doRun() throws Exception {
initialize();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
_frame.pack();
_frame.setVisible(true);
_frame.addWindowStateListener(new WindowStateListener() {
@Override
public void windowStateChanged(WindowEvent e) {
if (e.getNewState() == WindowEvent.WINDOW_CLOSED) {
_endQueue.add(null);
}
}
});
_splitPane.setDividerLocation(0.3d);
} catch (Exception e) {
e.printStackTrace();
}
}
});
_endQueue.take();
}
}