package org.chartsy.main.features;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
import javax.swing.AbstractAction;
import javax.swing.JToolBar;
import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.chartsy.main.managers.ProxyManager;
import org.chartsy.main.utils.DesktopUtil;
import org.openide.util.Exceptions;
import org.openide.util.ImageUtilities;
import org.openide.util.NbPreferences;
/**
*
* @author Viorel
*/
public class FeaturesPanel extends JToolBar
{
private static final Logger LOG
= Logger.getLogger(FeaturesPanel.class.getPackage().getName());
private static FeaturesPanel instance;
private FeatureBanner chartsyBanner;
private JToolBar.Separator sep1;
private FeatureBanner mrSwingBanner;
private JToolBar.Separator sep2;
private FeatureBanner stockScanPROBanner;
private List<String> usedCookies = new ArrayList<String>();
public static FeaturesPanel getDefault()
{
if (instance == null)
instance = new FeaturesPanel();
return instance;
}
private FeaturesPanel()
{
super("Features Toolbar", JToolBar.HORIZONTAL);
initComponents();
}
private void initComponents()
{
Preferences chartsy = NbPreferences.root().node("/org/chartsy/register");
Preferences stockScan = NbPreferences.root().node("/org/chartsy/stockscanpro");
usedCookies.clear();
usedCookies.add("PHPSESSID");
usedCookies.add("amember_nr");
chartsyBanner = new FeatureBanner(new ChartsyAction());
mrSwingBanner = new FeatureBanner(new MrSwingAction());
stockScanPROBanner = new FeatureBanner(new StockScanPROAction());
sep1 = new JToolBar.Separator();
sep2 = new JToolBar.Separator();
if (!isChartsyUser())
{
add(chartsyBanner);
}
else
{
chartsy.putBoolean("mrswingregistred", checkMrSwingRegistration());
stockScan.putBoolean("stockscanproregistred", checkStockScanPRORegistration() != 0);
}
if (!isStockScanPROUser())
{
if (!isMrSwingUser())
{
add(sep1);
add(mrSwingBanner);
}
add(sep2);
add(stockScanPROBanner);
} else {
removeAll();
}
}
public void refresh()
{
removeAll();
initComponents();
validate();
repaint();
}
private boolean isChartsyUser()
{
Preferences preferences = NbPreferences.root().node("/org/chartsy/register");
return preferences.getBoolean("registred", false);
}
private boolean isMrSwingUser()
{
Preferences preferences = NbPreferences.root().node("/org/chartsy/register");
return preferences.getBoolean("mrswingregistred", false);
}
private boolean isStockScanPROUser()
{
Preferences preferences = NbPreferences.root().node("/org/chartsy/stockscanpro");
return preferences.getBoolean("stockscanproregistred", false);
}
public void hideBanners()
{
Preferences chartsy = NbPreferences.root().node("/org/chartsy/register");
Preferences stockScan = NbPreferences.root().node("/org/chartsy/stockscanpro");
boolean chartsyRegistred = chartsy.getBoolean("registred", false);
boolean mrSwingRegistred = chartsy.getBoolean("mrswingregistred", false);
boolean stockScanPRORegistred = stockScan.getBoolean("stockscanproregistred", false);
if (chartsyRegistred)
{
hideChartsyBanner();
sep1.setVisible(false);
}
if (mrSwingRegistred)
{
hideMrSwingBanner();
sep2.setVisible(false);
}
if (stockScanPRORegistred)
{
hideStockScanPROBanner();
sep2.setVisible(false);
}
}
public void hideChartsyBanner()
{
chartsyBanner.setVisible(false);
}
public void hideMrSwingBanner()
{
mrSwingBanner.setVisible(false);
}
public void hideStockScanPROBanner()
{
stockScanPROBanner.setVisible(false);
}
private boolean checkMrSwingRegistration()
{
String url = "http://www.mrswing.com/chartsy/companyname.php?symbol=VODE.DE";
BufferedReader in = null;
HttpClient client = ProxyManager.getDefault().getHttpClient();
GetMethod method = new GetMethod(url);
method.setFollowRedirects(true);
List<Cookie> list = getMrSwingCookies(url);
for (Cookie cookie : list)
client.getState().addCookie(cookie);
try
{
client.executeMethod(method);
in = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
if (in.readLine().equals("OK"))
{
in.close();
method.releaseConnection();
return true;
}
else
{
in.close();
method.releaseConnection();
return false;
}
}
catch (IOException ex)
{
LOG.log(Level.SEVERE, null, ex);
method.releaseConnection();
if (in != null)
{
try { in.close(); }
catch (IOException io) { LOG.log(Level.SEVERE, null, io); }
}
return false;
}
}
private List<Cookie> getMrSwingCookies(String url)
{
Preferences preferences = NbPreferences.root().node("/org/chartsy/register");
List<Cookie> list = new ArrayList<Cookie>();
String username = preferences.get("username", "");
String password = preferences.get("password", "");
if (username != null && password != null)
{
NameValuePair[] data =
{
new NameValuePair("amember_login", username),
new NameValuePair("amember_pass", password)
};
HttpClient client = ProxyManager.getDefault().getHttpClient();
PostMethod method = new PostMethod(url);
method.setRequestBody(data);
try
{
int responce = client.executeMethod(method);
if (responce != HttpStatus.SC_NOT_IMPLEMENTED)
{
for (Cookie cookie : client.getState().getCookies())
{
if (usedCookies.contains(cookie.getName()))
list.add(cookie);
}
}
method.releaseConnection();
}
catch (IOException ex)
{
LOG.log(Level.SEVERE, null, ex);
}
}
return list;
}
private int checkStockScanPRORegistration()
{
Preferences preferences = NbPreferences.root().node("/org/chartsy/register");
HttpClient client = ProxyManager.getDefault().getHttpClient();
GetMethod method = new GetMethod("http://www.stockscanpro.com/index.php");
int id = 0;
try
{
method.setQueryString(new NameValuePair[]
{
new NameValuePair("option", "com_chartsy"),
new NameValuePair("view", "checkregistration"),
new NameValuePair("format", "raw"),
new NameValuePair("username", preferences.get("username", "")),
new NameValuePair("passwd", preferences.get("password", ""))
});
client.executeMethod(method);
id = Integer.parseInt(method.getResponseBodyAsString());
method.releaseConnection();
}
catch (IOException ex)
{
LOG.log(Level.SEVERE, null, ex);
}
return id;
}
class ChartsyAction extends AbstractAction
{
public ChartsyAction()
{
putValue(NAME, "Please register Chartsy, it's free!");
putValue(SHORT_DESCRIPTION, "Please register Chartsy, it's free!");
putValue(SMALL_ICON, ImageUtilities.loadImageIcon("org/chartsy/main/features/chartsy-banner.png", true));
putValue(LARGE_ICON_KEY, ImageUtilities.loadImageIcon("org/chartsy/main/features/chartsy-banner.png", true));
}
public void actionPerformed(ActionEvent e)
{
try { DesktopUtil.browse("http://www.chartsy.org/partners"); }
catch (Exception ex) { Exceptions.printStackTrace(ex); }
}
}
class MrSwingAction extends AbstractAction
{
public MrSwingAction()
{
putValue(NAME, "Get the MrSwing golbal EOD datafeed for only $7.79/month!");
putValue(SHORT_DESCRIPTION, "Get the MrSwing golbal EOD datafeed for only $7.79/month!");
putValue(SMALL_ICON, ImageUtilities.loadImageIcon("org/chartsy/main/features/mrswing-banner.png", true));
putValue(LARGE_ICON_KEY, ImageUtilities.loadImageIcon("org/chartsy/main/features/mrswing-banner.png", true));
}
public void actionPerformed(ActionEvent e)
{
try { DesktopUtil.browse("http://www.chartsy.org/partners"); }
catch (Exception ex) { Exceptions.printStackTrace(ex); }
}
}
class StockScanPROAction extends AbstractAction
{
public StockScanPROAction()
{
putValue(NAME, "Get StockScanPRO integration for chartsy for only $9.99/month and you get the global EOD datafeed for free!");
putValue(SHORT_DESCRIPTION, "Get StockScanPRO integration for chartsy for only $9.99/month and you get the global EOD datafeed for free!");
putValue(SMALL_ICON, ImageUtilities.loadImageIcon("org/chartsy/main/features/stockscanpro-banner.png", true));
putValue(LARGE_ICON_KEY, ImageUtilities.loadImageIcon("org/chartsy/main/features/stockscanpro-banner.png", true));
}
public void actionPerformed(ActionEvent e)
{
try { DesktopUtil.browse("http://www.chartsy.org/partners"); }
catch (Exception ex) { Exceptions.printStackTrace(ex); }
}
}
}