/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.console.navtree;
import java.net.URL;
import java.util.Properties;
import javax.swing.*;
import org.jboss.console.manager.interfaces.SimpleTreeNodeMenuEntry;
import org.jboss.console.manager.interfaces.TreeAction;
import org.jboss.console.manager.interfaces.impl.HttpLinkTreeAction;
import org.jboss.console.remote.AppletRemoteMBeanInvoker;
import org.jboss.console.remote.SimpleRemoteMBeanInvoker;
/**
* AdminTreeBrowser container for applets
*
* @see org.jboss.console.navtree.AdminTreeBrowser
*
* @author <a href="mailto:sacha.labourey@cogito-info.ch">Sacha Labourey</a>.
* @version $Revision: 81010 $
*/
public class AppletBrowser extends javax.swing.JApplet
{
AdminTreeBrowser treeBrowser = null;
AppletAdminContext ctx = null;
public static final String RIGHT_FRAME_NAME = "right";
protected String sessionId = null;
protected String pmJmxName = null;
public AppletBrowser ()
{
}
public void start ()
{
try
{
ctx = new AppletAdminContext ();
initAppletParams();
treeBrowser = new AdminTreeBrowser (ctx);
initComponents ();
initRefreshThread ();
}
catch (Exception e)
{
e.printStackTrace ();
}
}
public void refreshTree (boolean force)
{
treeBrowser.refreshTree(force);
}
protected void initAppletParams()
{
sessionId = getParameter("SessionId");
if (sessionId != null)
sessionId = "jsessionid=" + sessionId;
else
sessionId = "";
this.pmJmxName = getParameter("PMJMXName");
if( pmJmxName == null )
pmJmxName = "jboss.admin:service=PluginManager";
}
protected void initComponents()
{
javax.swing.JTree tree = treeBrowser.getTree();
javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(tree);
scrollPane.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
getContentPane().add(scrollPane, java.awt.BorderLayout.CENTER);
//getContentPane().add(tree, java.awt.BorderLayout.CENTER);
}
protected void initRefreshThread ()
{
try
{
String strRefreshSec = getParameter("RefreshTime");
if (strRefreshSec != null && !"".equals(strRefreshSec))
{
final long refresh = Long.parseLong(strRefreshSec);
Thread t = new Thread ( new Runnable()
{
public synchronized void run ()
{
long timeout = refresh*1000;
while (true)
{
try
{
this.wait(timeout);
treeBrowser.refreshTree(false);
}
catch (Exception displayed)
{
//displayed.printStackTrace();
}
}
}
}
);
t.start();
}
}
catch (Exception displayed)
{
displayed.printStackTrace();
}
}
/** Allow the applet to be run as an application:
* java -cp applet.jar org.jboss.console.navtree.AppletBrowser
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
JApplet applet = new AppletBrowser();
applet.setStub(new MainAppletStub());
JFrame frame = new JFrame("Administration Console");
frame.getContentPane().add(applet);
frame.setSize(600, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
applet.init();
applet.start();
frame.setVisible(true);
}
public class AppletAdminContext implements TreeContext
{
String webHost = null;
String hostname = null;
org.jboss.console.remote.SimpleRemoteMBeanInvoker invoker = null;
public AppletAdminContext ()
{
//webHost = getCodeBase ().toString ();
java.net.URL root = getCodeBase();
webHost = root.getProtocol() + ":";
if (root.getAuthority() != null && root.getAuthority().length() > 0) {
webHost+="//";
webHost+=root.getAuthority();
}
if (!webHost.endsWith ("/"))
webHost = webHost + "/";
hostname = getCodeBase ().getHost ();
}
public synchronized SimpleRemoteMBeanInvoker getRemoteMBeanInvoker ()
{
if (invoker == null)
{
System.out.println (getCodeBase().toString() + "Invoker");
try
{
invoker = new AppletRemoteMBeanInvoker (getCodeBase().toString() + "Invoker");
}
catch (Exception displayed)
{
displayed.printStackTrace ();
}
}
return invoker;
}
public void doAdminTreeAction (TreeAction action)
{
if (action != null && action instanceof HttpLinkTreeAction)
{
HttpLinkTreeAction act = (HttpLinkTreeAction)action;
openLink (act.getTarget (), act.getFrame());
}
}
public void doPopupMenuAction (SimpleTreeNodeMenuEntry entry)
{
TreeAction ta = entry.getAction ();
if (ta instanceof HttpLinkTreeAction)
{
HttpLinkTreeAction act = (HttpLinkTreeAction)ta;
openLink ( act.getTarget (), act.getFrame());
}
else if (ta instanceof AppletTreeAction)
{
((AppletTreeAction)ta).doAction(ctx, AppletBrowser.this);
}
}
public java.util.Properties getJndiProperties ()
{
Properties props = new Properties (); // to be improved? (to read from Applet properties and pass as parameter
props.setProperty ("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty ("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
props.setProperty ("java.naming.provider.url", hostname);
return props;
}
public String getServiceJmxName () { return pmJmxName; }
public void openLink (String target, String frame)
{
try
{
if (target == null)
{
return;
}
else
{
System.out.println(target);
if (frame == null)
getAppletContext ().showDocument ( new URL(localizeUrl(target)), RIGHT_FRAME_NAME);
else
getAppletContext ().showDocument ( new URL(localizeUrl(target)), frame);
}
}
catch (Exception tobad) { tobad.printStackTrace (); }
}
public String localizeUrl (String sourceUrl)
{
String target = sourceUrl;
if (target == null)
return null;
if (!target.toLowerCase ().startsWith ("http"))
{
if (target.startsWith ("/"))
target = target.substring (1);
target = webHost + target;
if (target.indexOf("?") >= 0)
target = target + "&" + sessionId;
else
target = target + ";" + sessionId;
}
return target;
}
}
}