package org.chartsy.main.welcome.ui; import java.awt.Cursor; import java.awt.FlowLayout; import java.awt.Image; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Date; import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.chartsy.main.managers.ProxyManager; import org.chartsy.main.welcome.content.Constants; import org.chartsy.main.welcome.content.DesktopUtil; import org.openide.awt.StatusDisplayer; import org.openide.util.NbBundle; /** * * @author Viorel */ public final class BottomContent extends JPanel implements Constants, MouseListener, ActionListener { private static final Logger LOG = Logger.getLogger(BottomContent.class.getPackage().getName()); private String url = ""; private Random random = new Random(); private String cookieName; private String cookieValue; private String cookieDomain; private String cookiePath; private Date cookieExpires; private boolean cookieSecure; private JButton bottomLink; public BottomContent() { super(new FlowLayout(FlowLayout.CENTER)); setOpaque(false); bottomLink = new JButton(); bottomLink.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); bottomLink.setCursor(Cursor.getPredefinedCursor(12)); bottomLink.setHorizontalAlignment(2); bottomLink.addMouseListener((MouseListener) this); bottomLink.setMargin(new Insets(0, 0, 0, 0)); bottomLink.setBorderPainted(false); bottomLink.setFocusPainted(false); bottomLink.setContentAreaFilled(false); bottomLink.addActionListener((ActionListener) this); int i = getRandomNumber(); Image image = getImageFromURL(getImageURL(i)); if (image != null) { url = getURL(i); ImageIcon imageIcon = new ImageIcon(image); bottomLink.setIcon(imageIcon); bottomLink.setPressedIcon(imageIcon); } add(bottomLink); } private int getRandomNumber() { int n = 1000; int rand = random.nextInt(n); return Math.abs(rand); } private String getURL(int i) { return NbBundle.getMessage(BottomContent.class, "URL_BannerLink", Integer.toString(i)); } private String getImageURL(int i) { return NbBundle.getMessage(BottomContent.class, "URL_BannerImageLink", Integer.toString(i)); } @Override public void mouseClicked(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) {} @Override public void mouseReleased(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) { StatusDisplayer.getDefault().setStatusText(url); } @Override public void mouseExited(MouseEvent e) { StatusDisplayer.getDefault().setStatusText(""); } @Override public void actionPerformed(ActionEvent e) { try { bottomLink.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); HttpClient client = ProxyManager.getDefault().getHttpClient(); Cookie cookie = new Cookie(cookieDomain, cookieName, cookieValue, cookiePath, cookieExpires, cookieSecure); client.getState().addCookie(cookie); HttpMethod method = new GetMethod(url.toString()); method.setFollowRedirects(true); client.executeMethod(method); String uri = method.getURI().getHost() + (method.getURI().getPath().equals("/") ? "" : method.getURI().getPath()); uri = (uri.startsWith("http://")) ? uri : "http://" + uri; DesktopUtil.browse(uri); method.setFollowRedirects(false); method.releaseConnection(); bottomLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } catch (Exception ex) { LOG.log(Level.SEVERE, "", ex); } } public Image getImageFromURL(String urlString) { try { HttpClient client = ProxyManager.getDefault().getHttpClient(); HttpMethod method = new GetMethod(urlString); client.executeMethod(method); Cookie[] cookies = client.getState().getCookies(); for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("OAVARS[acaa7ff1]")) { cookieName = cookies[i].getName(); cookieValue = cookies[i].getValue(); cookieDomain = cookies[i].getDomain(); cookiePath = cookies[i].getPath(); cookieExpires = cookies[i].getExpiryDate(); cookieSecure = cookies[i].getSecure(); } } Image image = ImageIO.read(method.getResponseBodyAsStream()); method.releaseConnection(); return image; } catch (Exception ex) { LOG.log(Level.SEVERE, "", ex); } return null; } }