package org.chartsy.main;
import java.awt.Color;
import java.awt.Cursor;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.text.AbstractDocument;
import org.chartsy.main.data.DataProvider;
import org.chartsy.main.data.Exchange;
import org.chartsy.main.managers.DataProviderManager;
import org.chartsy.main.managers.TemplateManager;
import org.chartsy.main.templates.Template;
import org.chartsy.main.utils.DesktopUtil;
import org.chartsy.main.utils.UppercaseDocumentFilter;
import org.chartsy.main.utils.autocomplete.StockAutoCompleter;
import org.openide.util.Exceptions;
import org.openide.windows.WindowManager;
public class NewChartDialog extends javax.swing.JDialog
{
private static final String defaultDataProvider = "MrSwing";
private StockAutoCompleter completer = null;
private String stock = null;
private String dataProvider = null;
private Template template = null;
private String msgUrl = "";
/** Creates new form NewChartDialog */
public NewChartDialog(java.awt.Frame parent, boolean modal)
{
super(parent, modal);
setTitle("New Chart");
initComponents();
parent.setIconImage(WindowManager.getDefault().getMainWindow().getIconImage());
getRootPane().setDefaultButton(btnNewChart);
initForm();
}
private void initForm()
{
msgLabel.setForeground(Color.red);
msgLabel.setVisible(false);
msgLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
dataProvider = DataProviderManager.getDefault().getDataProvider(defaultDataProvider).getName();
List<String> dataProviders = DataProviderManager.getDefault().getDataProviders();
Collections.sort(dataProviders);
lstDataProvider.setMaximumRowCount(dataProviders.size());
for (String s : dataProviders)
{
lstDataProvider.addItem(s);
}
lstDataProvider.setSelectedItem(defaultDataProvider);
Object[] templates = TemplateManager.getDefault().getTemplateNames();
for (Object temp : templates)
{
lstTemplate.addItem(temp);
}
lstTemplate.setSelectedItem(TemplateManager.getDefault().getDefaultTemplate());
((AbstractDocument) txtSymbol.getDocument()).setDocumentFilter(new UppercaseDocumentFilter());
completer = new StockAutoCompleter(txtSymbol);
completer.setDataProvider(dataProvider);
}
public String getStock()
{
return stock;
}
public String getDataProvider()
{
return dataProvider;
}
public Template getTemplate()
{
return template;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
lblLogo = new javax.swing.JLabel();
lblSymbol = new javax.swing.JLabel();
txtSymbol = new javax.swing.JTextField();
lblDataProvider = new javax.swing.JLabel();
lstDataProvider = new javax.swing.JComboBox();
lblExchange = new javax.swing.JLabel();
lstExchange = new javax.swing.JComboBox();
lblTemplate = new javax.swing.JLabel();
lstTemplate = new javax.swing.JComboBox();
btnNewChart = new javax.swing.JButton();
btnCancel = new javax.swing.JButton();
msgLabel = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.title")); // NOI18N
lblLogo.setBackground(new java.awt.Color(255, 255, 255));
lblLogo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblLogo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/chartsy/main/resources/logo.png"))); // NOI18N
lblLogo.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblLogo.text")); // NOI18N
lblLogo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
lblSymbol.setFont(new java.awt.Font("Tahoma", 1, 11));
lblSymbol.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblSymbol.text")); // NOI18N
txtSymbol.setColumns(6);
txtSymbol.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.txtSymbol.text")); // NOI18N
txtSymbol.setToolTipText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.txtSymbol.toolTipText")); // NOI18N
lblDataProvider.setFont(new java.awt.Font("Tahoma", 1, 11));
lblDataProvider.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblDataProvider.text")); // NOI18N
lstDataProvider.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lstDataProviderActionPerformed(evt);
}
});
lblExchange.setFont(new java.awt.Font("Tahoma", 1, 11));
lblExchange.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblExchange.text")); // NOI18N
lstExchange.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lstExchangeActionPerformed(evt);
}
});
lblTemplate.setFont(new java.awt.Font("Tahoma", 1, 11));
lblTemplate.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.lblTemplate.text")); // NOI18N
btnNewChart.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.btnNewChart.text")); // NOI18N
btnNewChart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnNewChartActionPerformed(evt);
}
});
btnCancel.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.btnCancel.text")); // NOI18N
btnCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelActionPerformed(evt);
}
});
msgLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
msgLabel.setText(org.openide.util.NbBundle.getMessage(NewChartDialog.class, "NewChartDialog.msgLabel.text")); // NOI18N
msgLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
msgLabel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
msgLabelMouseClicked(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(msgLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 489, Short.MAX_VALUE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(lblSymbol)
.addGap(56, 56, 56)
.addComponent(txtSymbol, javax.swing.GroupLayout.PREFERRED_SIZE, 361, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(11, 11, 11))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblTemplate)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblDataProvider)
.addComponent(lblExchange))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lstExchange, 0, 388, Short.MAX_VALUE)
.addComponent(lstTemplate, 0, 388, Short.MAX_VALUE)
.addComponent(lstDataProvider, 0, 388, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(btnNewChart)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnCancel))))))
.addGap(26, 26, 26))))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblLogo, javax.swing.GroupLayout.DEFAULT_SIZE, 489, Short.MAX_VALUE)
.addContainerGap()))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(166, Short.MAX_VALUE)
.addComponent(msgLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblSymbol)
.addComponent(txtSymbol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(9, 9, 9)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblDataProvider)
.addComponent(lstDataProvider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblExchange)
.addComponent(lstExchange, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblTemplate)
.addComponent(lstTemplate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnCancel)
.addComponent(btnNewChart))
.addContainerGap())
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(11, 11, 11)
.addComponent(lblLogo, javax.swing.GroupLayout.DEFAULT_SIZE, 132, Short.MAX_VALUE)
.addGap(159, 159, 159)))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void lstDataProviderActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_lstDataProviderActionPerformed
{//GEN-HEADEREND:event_lstDataProviderActionPerformed
this.msgLabel.setVisible(false);
msgUrl = "";
JComboBox list = (JComboBox) evt.getSource();
dataProvider = (String) list.getSelectedItem();
lstExchange.removeAllItems();
if (completer != null)
{
completer.setDataProvider(dataProvider);
}
DataProvider dp = DataProviderManager.getDefault().getDataProvider(dataProvider);
Exchange[] exchanges = dp.getExchanges();
if (exchanges == null || exchanges.length == 0)
{
lblExchange.setVisible(false);
lstExchange.setVisible(false);
} else
{
for (Exchange exchange : exchanges)
{
lstExchange.addItem(exchange.getExchange());
}
}
if (dp.needsRegistration() && !dp.isRegistred())
{
this.msgLabel.setText(dp.getRegistrationMessage());
this.msgLabel.setVisible(true);
this.msgUrl = dp.getRegistrationURL();
}
}//GEN-LAST:event_lstDataProviderActionPerformed
private void lstExchangeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_lstExchangeActionPerformed
{//GEN-HEADEREND:event_lstExchangeActionPerformed
Object obj = lstDataProvider.getSelectedItem();
if (obj != null)
{
DataProvider dp = DataProviderManager.getDefault().getDataProvider((String) obj);
int i = lstExchange.getSelectedIndex();
if (i != -1)
{
Exchange exchange = dp.getExchanges()[i];
String symbol = txtSymbol.getText();
if (symbol != null)
{
symbol.trim();
String delimiter = ".";
if (symbol.contains(delimiter))
{
int index = symbol.indexOf(delimiter);
symbol = symbol.substring(0, index);
}
txtSymbol.setText(symbol + exchange.getSufix());
}
}
}
}//GEN-LAST:event_lstExchangeActionPerformed
private void btnNewChartActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnNewChartActionPerformed
{//GEN-HEADEREND:event_btnNewChartActionPerformed
completer.stopTimer();
dataProvider = (String) lstDataProvider.getSelectedItem();
stock = txtSymbol.getText().trim();
template = TemplateManager.getDefault().getTemplate(lstTemplate.getSelectedItem());
setVisible(false);
}//GEN-LAST:event_btnNewChartActionPerformed
private void btnCancelActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnCancelActionPerformed
{//GEN-HEADEREND:event_btnCancelActionPerformed
stock = null;
dataProvider = null;
template = null;
setVisible(false);
}//GEN-LAST:event_btnCancelActionPerformed
private void msgLabelMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_msgLabelMouseClicked
if (!msgUrl.isEmpty())
{
try
{
DesktopUtil.browse(msgUrl);
} catch (Exception ex)
{}
}
}//GEN-LAST:event_msgLabelMouseClicked
/**
* @param args the command line arguments
*/
public static void main(String args[])
{
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
NewChartDialog dialog = new NewChartDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter()
{
public void windowClosing(java.awt.event.WindowEvent e)
{
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnCancel;
private javax.swing.JButton btnNewChart;
private javax.swing.JLabel lblDataProvider;
private javax.swing.JLabel lblExchange;
private javax.swing.JLabel lblLogo;
private javax.swing.JLabel lblSymbol;
private javax.swing.JLabel lblTemplate;
private javax.swing.JComboBox lstDataProvider;
private javax.swing.JComboBox lstExchange;
private javax.swing.JComboBox lstTemplate;
private javax.swing.JLabel msgLabel;
private javax.swing.JTextField txtSymbol;
// End of variables declaration//GEN-END:variables
}