package org.chartsy.stockscanpro.actions;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.util.prefs.Preferences;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.chartsy.main.RegisterForm;
import org.chartsy.main.features.FeaturesPanel;
import org.chartsy.main.managers.ProxyManager;
import org.chartsy.main.utils.DesktopUtil;
import org.chartsy.stockscanpro.StockScreenerComponent;
import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.util.Exceptions;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
import org.openide.util.RequestProcessor;
import org.openide.util.Task;
import org.openide.util.TaskListener;
import org.openide.windows.WindowManager;
public final class StockScreenerAction implements ActionListener
{
private final static RequestProcessor RP = new RequestProcessor("interruptible tasks", 1, true);
private Preferences preferences;
private String username = "";
private String password = "";
private boolean isStockScanUser = false;
private int userId = 0;
public void actionPerformed(ActionEvent e)
{
if (!StockScreenerComponent.findInstance().isOpened())
{
if (!checkRegistration())
{
RegisterForm register = new RegisterForm(new JFrame(), true);
register.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
register.setVisible(true);
}
else
{
username = preferences.get("username", "");
password = preferences.get("password", "");
checkStockScanUser();
}
}
else
{
StockScreenerComponent.findInstance().requestActive();
}
}
private boolean checkRegistration()
{
preferences = NbPreferences.root().node("/org/chartsy/register");
boolean registred = preferences.getBoolean("registred", false);
return registred;
}
private void checkStockScanUser()
{
final Preferences prefs = NbPreferences.root().node("/org/chartsy/stockscanpro");
isStockScanUser = prefs.getBoolean("stockscanproregistred", false);
final RequestProcessor.Task task = RP.create(new Runnable()
{
public void run()
{
userId = getUserId();
isStockScanUser = userId != 0;
if (isStockScanUser)
{
prefs.putBoolean("stockscanproregistred", isStockScanUser);
prefs.putInt("stockscanprouser", userId);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
FeaturesPanel.getDefault().hideBanners();
}
});
}
}
});
final ProgressHandle handle = ProgressHandleFactory.createHandle("Cheching registration", task);
task.addTaskListener(new TaskListener()
{
public void taskFinished(Task task)
{
handle.finish();
if (isStockScanUser)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
openComponent();
}
});
}
else
{
JLabel label = new JLabel(NbBundle.getMessage(StockScreenerAction.class, "Registration_MSG"));
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
label.addMouseListener(new MouseAdapter()
{
public @Override void mouseClicked(MouseEvent e)
{
try { DesktopUtil.browse(NbBundle.getMessage(StockScreenerAction.class, "MrSwing_URL")); }
catch (Exception ex) { Exceptions.printStackTrace(ex); }
}
});
DialogDescriptor descriptor = new DialogDescriptor(label, "Register");
descriptor.setMessageType(DialogDescriptor.INFORMATION_MESSAGE);
descriptor.setOptions(new Object[]
{
DialogDescriptor.OK_OPTION,
DialogDescriptor.CANCEL_OPTION
});
Object ret = DialogDisplayer.getDefault().notify(descriptor);
if (ret.equals(DialogDescriptor.OK_OPTION))
{
try { DesktopUtil.browse(NbBundle.getMessage(StockScreenerAction.class, "MrSwing_URL")); }
catch (Exception ex) { Exceptions.printStackTrace(ex); }
}
}
}
});
if (!isStockScanUser)
{
handle.start();
task.schedule(0);
}
else
{
openComponent();
}
}
private void openComponent()
{
StockScreenerComponent component = new StockScreenerComponent();
component.open();
component.requestActive();
}
private int getUserId()
{
HttpClient client = ProxyManager.getDefault().httpClient();
GetMethod method = new GetMethod(
NbBundle.getMessage(StockScreenerAction.class, "StockScanPRO_URL"));
int id = 0;
try
{
method.setQueryString(new NameValuePair[]
{
new NameValuePair("option", "com_chartsy"),
new NameValuePair("view", "checkregistration"),
new NameValuePair("format", "raw"),
new NameValuePair("username", username),
new NameValuePair("passwd", password)
});
client.executeMethod(method);
id = Integer.parseInt(method.getResponseBodyAsString());
}
catch (IOException ex)
{
Exceptions.printStackTrace(ex);
}
finally
{
method.releaseConnection();
}
return id;
}
}