[jboss-cvs] JBoss Profiler SVN: r524 - in branches/JBossProfiler2/src: main/org/jboss/profiler/client/web and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Apr 26 11:55:45 EDT 2009


Author: jesper.pedersen
Date: 2009-04-26 11:55:43 -0400 (Sun, 26 Apr 2009)
New Revision: 524

Added:
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/DecorateFrameInfo.java
   branches/JBossProfiler2/src/main/www/connecterr.xhtml
   branches/JBossProfiler2/src/main/www/profilersnapshot.xhtml
   branches/JBossProfiler2/src/main/www/profilerstatus.xhtml
   branches/JBossProfiler2/src/main/www/snapshotconfig.xhtml
   branches/JBossProfiler2/src/main/www/snapshotoperations.xhtml
   branches/JBossProfiler2/src/main/www/template/analyzetemplate.xhtml
   branches/JBossProfiler2/src/main/www/template/serveropttemplate.xhtml
Removed:
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeFrameBean.java
   branches/JBossProfiler2/src/main/www/addclasspanel.xhtml
   branches/JBossProfiler2/src/main/www/index.html
   branches/JBossProfiler2/src/main/www/listsnapshot.xhtml
   branches/JBossProfiler2/src/main/www/removeclasspanel.xhtml
   branches/JBossProfiler2/src/main/www/template/comparetemplate.xhtml
   branches/JBossProfiler2/src/main/www/template/loadtemplate.xhtml
   branches/JBossProfiler2/src/main/www/template/template.xhtml
Modified:
   branches/JBossProfiler2/src/etc/faces-config.xml
   branches/JBossProfiler2/src/etc/web.xml
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/BasicOptBean.java
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ClassBean.java
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/CompareSnapshotBean.java
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/LoadSnapshotBean.java
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/MethodBean.java
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/OverviewBean.java
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ThreadHotspotBean.java
   branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeThreadBean.java
   branches/JBossProfiler2/src/main/www/comparemethods.xhtml
   branches/JBossProfiler2/src/main/www/comparesnapshots.xhtml
   branches/JBossProfiler2/src/main/www/index.xhtml
   branches/JBossProfiler2/src/main/www/loadhotspots.xhtml
   branches/JBossProfiler2/src/main/www/loadoverview.xhtml
   branches/JBossProfiler2/src/main/www/loadsnapshot.xhtml
   branches/JBossProfiler2/src/main/www/loadthreadhotspots.xhtml
   branches/JBossProfiler2/src/main/www/loadthreadtree.xhtml
   branches/JBossProfiler2/src/main/www/template/head.xhtml
Log:
Web update from  Huijuan Shao <hjshao at hitachi.cn> - modifications by Jesper Pedersen

Modified: branches/JBossProfiler2/src/etc/faces-config.xml
===================================================================
--- branches/JBossProfiler2/src/etc/faces-config.xml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/etc/faces-config.xml	2009-04-26 15:55:43 UTC (rev 524)
@@ -7,6 +7,7 @@
     version="1.2">
 
   <application>
+    <message-bundle>jboss-profiler</message-bundle>
     <locale-config>
       <default-locale>en</default-locale>
     </locale-config>
@@ -22,11 +23,21 @@
     <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>
   <managed-bean>
+    <managed-bean-name>frameInfo</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.shared.FrameInfo</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
     <managed-bean-name>methodBean</managed-bean-name>
     <managed-bean-class>org.jboss.profiler.client.web.MethodBean</managed-bean-class>
     <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>
   <managed-bean>
+    <managed-bean-name>threadInfoBean</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.shared.ThreadInfo</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
     <managed-bean-name>treeThreadBean</managed-bean-name>
     <managed-bean-class>org.jboss.profiler.client.web.TreeThreadBean</managed-bean-class>
     <managed-bean-scope>session</managed-bean-scope>
@@ -34,7 +45,7 @@
   <managed-bean>
     <managed-bean-name>treeFrameBean</managed-bean-name>
     <managed-bean-class>org.jboss.profiler.client.web.TreeFrameBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
+    <managed-bean-scope>request</managed-bean-scope>
   </managed-bean>
   <managed-bean>
     <managed-bean-name>threadHotspotBean</managed-bean-name>
@@ -42,9 +53,39 @@
     <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>
   <managed-bean>
+    <managed-bean-name>snapshot</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.shared.Snapshot</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
+    <managed-bean-name>allocationInfo</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.shared.AllocationInfo</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
+    <managed-bean-name>threadInfo</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.shared.ThreadInfo</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
+    <managed-bean-name>classInfo</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.shared.ClassInfo</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
+    <managed-bean-name>combinedFrameInfo</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.client.CombinedFrameInfo</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
+    <managed-bean-name>selectItem</managed-bean-name>
+    <managed-bean-class>javax.faces.model.SelectItem</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+  <managed-bean>
     <managed-bean-name>basicOptBean</managed-bean-name>
     <managed-bean-class>org.jboss.profiler.client.web.BasicOptBean</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
+    <managed-bean-scope>application</managed-bean-scope>
   </managed-bean>
   <managed-bean>
     <managed-bean-name>loadSnapshotBean</managed-bean-name>
@@ -61,4 +102,28 @@
     <managed-bean-class>org.jboss.profiler.client.web.util.TreeDemoStateAdvisor</managed-bean-class>
     <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>
+  <managed-bean>
+    <managed-bean-name>timedClassInfo</managed-bean-name>
+    <managed-bean-class>org.jboss.profiler.client.TimedClassInfo</managed-bean-class>
+    <managed-bean-scope>request</managed-bean-scope>
+    <managed-property>
+      <property-name>className</property-name>
+      <property-class>java.lang.String</property-class>
+      <value>test</value>
+    </managed-property>
+    <managed-property>
+      <property-name>waitTime</property-name>
+      <property-class>double</property-class>
+      <value>3.0</value>
+    </managed-property>
+  </managed-bean>
+  <navigation-rule>
+    <display-name>profilerstatus.xhtml</display-name>
+    <from-view-id>/profilerstatus.xhtml</from-view-id>
+    <navigation-case>
+      <from-action>#{basicOptBean.connect}</from-action>
+      <from-outcome>org.jboss.remoting.CannotConnectException</from-outcome>
+      <to-view-id>/connecterr.xhtml</to-view-id>
+    </navigation-case>
+  </navigation-rule>
 </faces-config>

Modified: branches/JBossProfiler2/src/etc/web.xml
===================================================================
--- branches/JBossProfiler2/src/etc/web.xml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/etc/web.xml	2009-04-26 15:55:43 UTC (rev 524)
@@ -5,33 +5,33 @@
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          version="2.5">
 
-  <display-name>JBoss Profiler</display-name>
-
+  <display-name>JBoss Profiler 2</display-name>
+  
   <context-param>
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
     <param-value>.xhtml</param-value>
   </context-param>
-
+  
   <context-param>
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
     <param-value>server</param-value>
   </context-param>
-
+  
   <context-param>
     <param-name>javax.faces.PARTIAL_STATE_SAVING_METHOD</param-name>
     <param-value>false</param-value>
   </context-param>
-
+  
   <context-param>
     <param-name>javax.faces.PARTIAL_STATE_SAVING_DISPATCH_EVERY_TIME</param-name>
     <param-value>true</param-value>
   </context-param>
-
+  
   <context-param>
     <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
     <param-value>false</param-value>
   </context-param>
-
+  
   <context-param>
     <param-name>com.sun.faces.verifyObjects</param-name>
     <param-value>true</param-value>
@@ -46,21 +46,22 @@
     <param-name>facelets.DEVELOPMENT</param-name>
     <param-value>false</param-value>
   </context-param>
+
   <context-param>
     <param-name>facelets.SKIP_COMMENTS</param-name>
     <param-value>true</param-value>
   </context-param>
 
   <context-param>
-    <param-name> org.richfaces.SKIN </param-name>
+    <param-name>org.richfaces.SKIN</param-name>
     <param-value>blueSky</param-value>
   </context-param>
 
   <context-param>
-    <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
-    <param-value>com.sun.facelets.FaceletViewHandler</param-value>
+    <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name> 
+    <param-value>com.sun.facelets.FaceletViewHandler</param-value> 
   </context-param>
-
+  
   <servlet>
     <servlet-name>FacesServlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
@@ -71,33 +72,44 @@
     <servlet-name>FacesServlet</servlet-name>
     <url-pattern>*.xhtml</url-pattern>
   </servlet-mapping>
-
+  
   <filter>
     <display-name>Ajax4jsf Filter</display-name>
     <filter-name>ajax4jsf</filter-name>
     <filter-class>org.ajax4jsf.Filter</filter-class>
   </filter>
-
+  
   <filter-mapping>
     <filter-name>ajax4jsf</filter-name>
     <servlet-name>FacesServlet</servlet-name>
     <dispatcher>REQUEST</dispatcher>
     <dispatcher>FORWARD</dispatcher>
     <dispatcher>INCLUDE</dispatcher>
-  </filter-mapping>
-
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-  </welcome-file-list>
-
+  </filter-mapping> 
+  
   <error-page>
-    <error-code>404</error-code>
-    <location>/index.html</location>
+    <exception-type>org.jboss.remoting.CannotConnectException</exception-type>
+    <location>/connecterr.xhtml</location>
   </error-page>
-
+  
   <error-page>
-    <error-code>500</error-code>
-    <location>/index.html</location>
+    <exception-type>java.lang.Throwable</exception-type>
+    <location>/connecterr.xhtml</location>
   </error-page>
-
+  
+  <error-page>
+    <exception-type>java.lang.Exception</exception-type>
+    <location>/connecterr.xhtml</location>
+  </error-page>
+  
+  <error-page>
+    <exception-type>java.net.ConnectException</exception-type>
+    <location>/connecterr.xhtml</location>
+  </error-page>
+  
+  <error-page>  
+    <error-code>500</error-code>  
+    <location>/connecterr.xhtml</location>  
+  </error-page> 
+  
 </web-app>

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/BasicOptBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/BasicOptBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/BasicOptBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -24,47 +24,48 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
+import java.net.MalformedURLException;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.faces.model.SelectItem;
 
-import org.jboss.profiler.agent.Agent;
+import org.jboss.profiler.client.SnapshotUtil;
+import org.jboss.profiler.shared.Command;
+import org.jboss.profiler.shared.CommandType;
 import org.jboss.profiler.shared.Snapshot;
 import org.jboss.profiler.shared.SnapshotHelper;
+import org.jboss.profiler.shared.Visibility;
 
 /**
  * @author Huijuan Shao <hjshao at hitachi.cn>
  */
 public class BasicOptBean implements Serializable {
-  //Profiler profiler1 = new Profiler();
-  private boolean start = false; //profiler1.isRunning();
-  private boolean enabled = false; //Agent.isEnabled();
   private String lastestOpts = "";
-  private String addClass;
+  //private String addClass="org.jboss.profiler.*";
+  private String addClass = "";
   private String visibility;
-  private String removeClass;
+  //private String removeClass="org.apache.jsp.*";
+  private String removeClass = "";
   private String selectSnapshot;
   private String saveSnapshotName;
   private boolean panelShows = false;
   private String saveEcho = "";
   
-  public boolean isStart() {
-    return start;
-  }
-
-  public void setStart(boolean start) {
-    this.start = start;
-  }
-
-  public boolean isEnabled() {
-    return enabled;
-  }
-
-  public void setEnabled(boolean enabled) {
-    this.enabled = enabled;
-  }
-
+  private String protocol = "socket";
+  private String host = "localhost";
+  private int port = 5400;
+  private String threshold = "1.0";
+  private static double digThreshold = 1.0;
+  private String plugin = "org.jboss.profiler.plugins.Hibernate";
+  
+  private String path = LoadSnapshotBean.class.getResource("/").getFile() + "../../files/";
+  private ArrayList<String> interceptClassList = new ArrayList<String>();
+  private static ArrayList<Snapshot> snapshotsList = new ArrayList<Snapshot>();
+  
+  private org.jboss.remoting.InvokerLocator locator;
+  private org.jboss.remoting.Client remotingClient;
+  
   public String getLastestOpts() {
     return lastestOpts;
   }
@@ -96,7 +97,23 @@
   public void setRemoveClass(String removeClass) {
     this.removeClass = removeClass;
   }
+ 
+  public ArrayList<String> getInterceptClassList() {
+    return interceptClassList;
+  }
 
+  public void setInterceptClassList(ArrayList<String> interceptClassList) {
+    this.interceptClassList = interceptClassList;
+  }
+
+  public static ArrayList<Snapshot> getSnapshotsList() {
+    return snapshotsList;
+  }
+
+  public static void setSnapshotsList(ArrayList<Snapshot> snapshotsList) {
+    BasicOptBean.snapshotsList = snapshotsList;
+  }
+
   public String getSelectSnapshot() {
     return selectSnapshot;
   }
@@ -113,6 +130,14 @@
     this.saveSnapshotName = saveSnapshotName;
   }
 
+  public static double getDigThreshold() {
+    return digThreshold;
+  }
+
+  public static void setDigThreshold(double digThreshold) {
+    BasicOptBean.digThreshold = digThreshold;
+  }
+
   public boolean isPanelShows() {
     return panelShows;
   }
@@ -129,81 +154,137 @@
     this.saveEcho = saveEcho;
   }
   
-  public void clickStart(){
-    // start or stop, the profiler should be enabled.
-    // TODO: cant use Agent / Profiler directly...
-    if (Agent.isEnabled()) {
-      if (this.start == false) {
-        setStart(true);
-        this.setLastestOpts("Profiler has started.");
-        //profiler1.startProfiler();
-      } else {
-        setStart(false);
-        this.setLastestOpts("Profiler has stopped.");
-        //profiler1.stopProfiler();
-      }
-    }
+  public void clickStart() throws Throwable {	
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+			
+    remotingClient.connect();
+    this.connect();
+
+    Command cmd = new Command(CommandType.START_PROFILER);
+    String response = (String)remotingClient.invoke(cmd);	
+    this.setLastestOpts("Profiler has started.");
+	
+    remotingClient.disconnect();
   }
 
-  public void clickEnable(){
-    // TODO: cant use Agent / Profiler directly...
-    if (this.enabled == false && !Agent.isEnabled()) {
-      this.setEnabled(true); 
-      this.setLastestOpts("Profiler has enabled.");
-      //profiler1.enableProfiler();
-    } else if (this.enabled == true && Agent.isEnabled()) {
-      this.setEnabled(false);
-      this.setLastestOpts("Profiler has disabled.");
-      //profiler1.stopProfiler();
-      //profiler1.disableProfiler();
-    }
+  public void clickStop() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+    remotingClient.connect();
+	  
+    Command cmd3 = new Command(CommandType.STOP_PROFILER);
+    String response = (String)remotingClient.invoke(cmd3);				
+    this.setLastestOpts("Profiler has stopped.");
+	
+    remotingClient.disconnect();
   }
 
-  public void clearSnapshot(){
-    // TODO: cant use Agent / Profiler directly...
-    //this.setLastestOpts("clear all snapshots.");
-    //profiler1.clearSnapshots();
-    this.setPanelShows(false);
+  public void clickEnable() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+				
+    remotingClient.connect();  
+	  
+    Command cmd1 = new Command(CommandType.ENABLE);
+    String response = (String)remotingClient.invoke(cmd1);					
+    this.setLastestOpts("Profiler has enabled.");
+	
+    remotingClient.disconnect();
   }
+  
+  public void clickDisable() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+				
+    remotingClient.connect();  
+	  
+    Command cmd2 = new Command(CommandType.DISABLE);
+    String response = (String)remotingClient.invoke(cmd2);					
+    this.setLastestOpts("Profiler has disabled.");	
+	
+    remotingClient.disconnect();
+  }
 
-  public void gc(){
-    // TODO: cant use Agent / Profiler directly...
-    if(Agent.isEnabled()){
-      this.setLastestOpts("begins garbage collection.");
-      org.jboss.profiler.agent.Profiler.garbageCollection();
+  public void gc() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+				
+    remotingClient.connect();
+    this.connect();
+
+    Command cmd = new Command(CommandType.START_PROFILER);
+    String response = (String)remotingClient.invoke(cmd);	
+    this.setLastestOpts("begins garbage collection.");
+		
+    remotingClient.disconnect();
+  }
+  
+  public void takeSnapshot() throws Throwable {    
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+				
+    remotingClient.connect();
+
+    Command cmd = new Command(CommandType.SNAPSHOT);
+	
+    Snapshot snapshot = (Snapshot)remotingClient.invoke(cmd);
+    if (snapshot != null) {
+      //SnapshotUtil su = new SnapshotUtil(new Double(threshold).doubleValue());
+      BasicOptBean.snapshotsList.add(snapshot);
     }
+		
+    remotingClient.disconnect();
   }
   
-  public void takeSnapshot(){
-    // TODO: cant use Agent / Profiler directly...
-    org.jboss.profiler.agent.Profiler.snapshot();
-    //this.setLastestOpts("take snapshot.");
+  public void clearSnapshot() throws Throwable {    
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+					
+    remotingClient.connect();
+
+    Command cmd = new Command(CommandType.CLEAR_SNAPSHOTS);
+		
+    String response = (String)remotingClient.invoke(cmd);
+
+    this.snapshotsList.clear();
+			
+    remotingClient.disconnect();
     this.setPanelShows(false);
   }
   
-  public String[] getSnapshots(){
-    // TODO: cant use Agent / Profiler directly...
-    String[] snapshots = org.jboss.profiler.agent.Profiler.listSnapshots();
+  /**
+   * 
+   * @return all the snapshots string from the agent side
+   * @throws Throwable
+   */
+  public String[] getSnapshots() throws Throwable {  
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+    remotingClient.connect();
+    Command cmd = new Command(CommandType.LIST_SNAPSHOTS);
+    String[] snapshots = (String[])remotingClient.invoke(cmd);
+    remotingClient.disconnect();
     return snapshots;
   }
   
-  public void selectSnapshotAction(){
+  public void selectSnapshotAction() {
     this.setPanelShows(true);
   }
   
-  public void selectSaveSnapshotAction(){
+  public void selectSaveSnapshotAction() throws Throwable {
     String[] snapshots = this.getSnapshots();
-    int k=0;
-    for(int i = 0; i < snapshots.length; i++) {
+    int k = 0;
+    for (int i = 0; i < snapshots.length; i++) {
       if(snapshots[i].equals(this.selectSnapshot))
         k=i;
     }
-    Snapshot selectSnapshot1 = org.jboss.profiler.agent.Profiler.getSnapshot(k);
+    Snapshot selectSnapshot1 =(Snapshot)this.snapshotsList.get(k);
     try {
       if (this.saveSnapshotName == "")
-        SnapshotHelper.save(selectSnapshot1);
+        SnapshotHelper.save(selectSnapshot1,new File(path+ SnapshotHelper.getName(selectSnapshot1) + ".jps"));
       else
-        SnapshotHelper.save(selectSnapshot1, new File(this.saveSnapshotName));
+        SnapshotHelper.save(selectSnapshot1, new File(path+this.saveSnapshotName));
       
       this.saveEcho = "snapshot "+this.saveSnapshotName+" is just saved!";
       this.saveSnapshotName = "";
@@ -212,7 +293,7 @@
     }
   }
   
-  public List<SelectItem> getVisibilities(){
+  public List<SelectItem> getVisibilities() {
     List<SelectItem> allSelectItems = new ArrayList<SelectItem>(4);
     allSelectItems.add(new SelectItem("public"));
     allSelectItems.add(new SelectItem("package"));
@@ -221,15 +302,131 @@
     return allSelectItems;
   }
   
-  public void addClassAction(){
-    // TODO: cant use Agent / Profiler directly...
-    //Profiler profiler = new Profiler();
-    //profiler.addClasses(this.addClass, this.visibility);
+  public void addClassAction() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+    remotingClient.connect();  
+	
+    String clz= this.addClass;
+    Visibility v = Visibility.PUBLIC;
+    
+    if (this.visibility.endsWith("private")) {
+      v = Visibility.PRIVATE;
+    } else if (this.visibility.endsWith("protected")) {
+      v = Visibility.PROTECTED;
+    } else if (this.visibility.endsWith("package")) {
+      v = Visibility.PACKAGE;
+    }
+    
+    Command cmd = new Command(CommandType.ADD_CLASSES, new Object[] { clz, v } );
+		  
+    String response = (String)remotingClient.invoke(cmd);					
+    //this.setLastestOpts("Profiler has disabled.");		
+    remotingClient.disconnect();	
+	
+    listClassAction();
   }
   
-  public void removeClassAction(){
-    // TODO: cant use Agent / Profiler directly...
-    //Profiler profiler = new Profiler();
-    //profiler.removeClasses(this.removeClass);
+  public void removeClassAction() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+    remotingClient.connect();  
+	
+    String clz = this.removeClass;
+    Command cmd = new Command(CommandType.REMOVE_CLASSES, new Object[] { clz } );
+			  
+    String response = (String)remotingClient.invoke(cmd);					
+
+    remotingClient.disconnect();
+	
+    listClassAction();
   }
+  
+  public void listClassAction() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    remotingClient = new org.jboss.remoting.Client(locator);
+    remotingClient.connect();  
+		
+    Command cmd = new Command(CommandType.LIST_CLASSES);				
+		
+    this.interceptClassList.clear();
+    String[] result = (String[])remotingClient.invoke(cmd);
+    if (result != null) {
+      for (int j = 0; j < result.length; j++) {
+        this.interceptClassList.add(result[j]);
+      }
+    }  	
+    remotingClient.disconnect();
+  }
+  
+  public String getProtocol() {
+    return protocol;
+  }
+	
+  public void setProtocol(String protocol) {
+    this.protocol = protocol;
+  }
+	
+  public String getHost() {
+    return host;
+  }
+	
+  public void setHost(String host) {
+    this.host = host;
+  }
+	
+  public int getPort() {
+    return port;
+  }
+	
+  public void setPort(int port) {
+    this.port = port;
+  }
+
+  public String getThreshold() {
+    return threshold;
+  }
+
+  public void setThreshold(String threshold) {
+    this.threshold = threshold;
+    BasicOptBean.setDigThreshold(new Double(threshold).doubleValue());
+  }
+
+  public String getPlugin() {
+    return plugin;
+  }
+	
+  public void setPlugin(String plugin) {
+    this.plugin = plugin;
+  }
+
+  public List<SelectItem> getProtocols() {
+    List<SelectItem> allSelectItems = null;
+    allSelectItems = new ArrayList<SelectItem>(3);
+    allSelectItems.add(new SelectItem("socket"));
+    allSelectItems.add(new SelectItem("http"));
+    allSelectItems.add(new SelectItem("rmi"));
+    return allSelectItems;
+  }
+	
+  public void connect() throws Throwable {
+    locator = new org.jboss.remoting.InvokerLocator(this.protocol + "://" + this.host + ":" + this.port);     
+    org.jboss.remoting.Client remotingClient = new org.jboss.remoting.Client(locator);
+			
+    remotingClient.connect();
+    remotingClient.disconnect();
+  }
+	
+  public void protocolChanged(javax.faces.event.ValueChangeEvent evt) {
+    String protocol = (String)evt.getNewValue();
+    if (protocol.endsWith("socket")) {
+      this.setPort(5400);
+    } else if (protocol.endsWith("http")) {
+      this.setPort(5401);
+    } else {
+      this.setPort(5402);
+    }
+		
+    this.setProtocol(protocol);
+  }
 }

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ClassBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ClassBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ClassBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -31,13 +31,13 @@
 
 import org.jboss.profiler.client.CombinedFrameComparator;
 import org.jboss.profiler.client.CombinedFrameInfo;
-import org.jboss.profiler.client.SnapshotUtil;
 import org.jboss.profiler.client.TimedClassComparator;
 import org.jboss.profiler.client.TimedClassInfo;
 import org.jboss.profiler.client.Util;
 import org.jboss.profiler.shared.AllocationInfo;
 import org.jboss.profiler.shared.Math;
 import org.jboss.profiler.shared.Snapshot;
+import org.jboss.profiler.client.SnapshotUtil;
 
 /**
  * @author Huijuan Shao <hjshao at hitachi.cn>
@@ -47,14 +47,13 @@
   private String type;
   private String totalTime;
   private String waitTime;
-  long allocCount;
-  private String selectedClass = "";
-  
+  private long allocCount;
+  private String selectedClass="";
+	
   private Map<String, List<CombinedFrameInfo>> info = null;
   private List<TimedClassInfo> classes = null;
-  
+	
   //the class info in which the methods will be shown.
-  
   public ClassBean(String className,String type, String totalTime) {
     super();
     this.className = className;
@@ -63,7 +62,7 @@
     this.waitTime = "";
     this.allocCount = -1;
   }
-  
+	
   public ClassBean(String className,String type, String totalTime,String waitTime, long allocations) {
     super();
     this.className = className;
@@ -72,60 +71,56 @@
     this.waitTime = waitTime;
     this.allocCount = allocations;
   }
-  
+	
   public ClassBean() {
     super();
-    // TODO Auto-generated constructor stub
   }
-
+	
   public String getClassName() {
     return className;
   }
-
+	
   public void setClassName(String className) {
     this.className = className;
   }
-
+	
   public String getType() {
     return type;
   }
-
+	
   public void setType(String type) {
     this.type = type;
   }
-
+	
   public String getTotalTime() {
     return totalTime;
   }
-
+	
   public void setTotalTime(String totalTime) {
     this.totalTime = totalTime;
   }
-  
+
   public String getWaitTime() {
     return waitTime;
   }
-
+	
   public void setWaitTime(String waitTime) {
     this.waitTime = waitTime;
   }
-  
+
   public long getAllocCount() {
     return allocCount;
   }
-
+	
   public void setAllocCount(long allocCount) {
     this.allocCount = allocCount;
   }
-  
-  private long getAllocations(TimedClassInfo tci, List<AllocationInfo> allocs){
+
+  private long getAllocations(TimedClassInfo tci, List<AllocationInfo> allocs) {
     String prettyClassName = Util.getPrettyName(tci);
-    long alloc = 0;
-    
+    long alloc = 0;		    
     if (allocs != null && allocs.size() > 0) {
-      
       boolean found = false;
-      
       for (int i = 0; !found && i < allocs.size(); i++) {
         AllocationInfo ai = allocs.get(i);
         if (ai.getClassName().equals(prettyClassName)) {
@@ -136,29 +131,28 @@
     }
     return alloc;
   }
-  
+	
   public String getSelectedClass() {
     return selectedClass;
   }
-  
+
   public void setSelectedClass(String selectedClass) {
     this.selectedClass = selectedClass;
   }
-    
+
   public Set<String> getAjaxRowKeys(){
     ClassBean[] clazz = this.getClasses();
     Set<String> keys = new HashSet<String>();
-    for(int i = 0; i < clazz.length; i++) {
+    for (int i = 0; i < clazz.length; i++) {
       keys.add(clazz[i].className);
     }
     return keys;
   }
-  
-  public void fireMethodsInfo(){
-    //Maybe this part needs to integrate with getClasses to keep accord with snapshot.    
-    TimedClassInfo selectedTimedClassInfo = null, tmpTimedClassInfo = null;
+	
+  public void fireMethodsInfo() {
+    TimedClassInfo selectedTimedClassInfo = null,tmpTimedClassInfo = null;
     String tmpString;
-    if (this.classes != null) {
+    if (this.classes!=null) {
       for (int i = 0; i < classes.size(); i++) {
         tmpTimedClassInfo = (TimedClassInfo)(classes.get(i));
         tmpString = tmpTimedClassInfo.getClassName();
@@ -170,35 +164,32 @@
         }
       }
     }
-    
     MethodBean.setTci(selectedTimedClassInfo);
     List<CombinedFrameInfo> l = info.get(selectedTimedClassInfo.getClassName());
     MethodBean.setCfs(l);
   }
-
-  public ClassBean[] getClasses(){
+	
+  public ClassBean[] getClasses() {
     ClassBean[] classBeans = null;
-    
     if (LoadSnapshotBean.getSnapshot() != null) {
       DecimalFormat df = new DecimalFormat("#0.00");
-      SnapshotUtil su = new SnapshotUtil();
+      SnapshotUtil su = new SnapshotUtil(BasicOptBean.getDigThreshold());
       Map<String, List<CombinedFrameInfo>> info = su.getInformation(LoadSnapshotBean.getSnapshot());
-      
       List<TimedClassInfo> classes = su.getTimedClasses(LoadSnapshotBean.getSnapshot().getClasses(), info);
-      
+		    
       this.info = info;
       this.classes = classes;
-      
+			
       Collections.sort(classes, new TimedClassComparator(TimedClassComparator.NAME));
-      
+		    
       int j = 0;
       long tmpCount = 0;
       classBeans = new ClassBean[classes.size()];
-      
+		    
       for (TimedClassInfo tci: classes) {
         tmpCount = this.getAllocations(tci, LoadSnapshotBean.getSnapshot().getAllocations());
         classBeans[j++] = new ClassBean(Util.getPrettyName(tci),Util.getDescription(tci),
-                                        df.format(tci.getTotalTime()), df.format(tci.getWaitTime()), tmpCount);
+                                        df.format(tci.getTotalTime()), df.format(tci.getWaitTime()),tmpCount);
       }	   
     }
     return classBeans;

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/CompareSnapshotBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/CompareSnapshotBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/CompareSnapshotBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -36,34 +36,30 @@
 
 import org.jboss.profiler.client.CombinedFrameComparator;
 import org.jboss.profiler.client.CombinedFrameInfo;
-import org.jboss.profiler.client.SnapshotUtil;
 import org.jboss.profiler.client.TimedClassInfo;
 import org.jboss.profiler.shared.Snapshot;
 import org.jboss.profiler.shared.SnapshotHelper;
+import org.jboss.profiler.client.SnapshotUtil;
 
 /**
  * @author Huijuan Shao <hjshao at hitachi.cn>
  */
 public class CompareSnapshotBean implements Serializable {
-  private String[] snapshotsToCompare=new String[2];
-  
+  private String[] snapshotsToCompare = new String[2];
+	
   CompareSnapshotBean[] compareSnapshotBeans;
-  
   private String difftime;
-  
   private String oTime;
-  
   private String nTime;
-  
   private long diffCount;
-  
   private long oCount;
   private long nCount;
   private String methodName;
-  
+  private String path = LoadSnapshotBean.class.getResource("/").getFile() + "../../files/";
+	
   public CompareSnapshotBean() {
   }
-  
+	
   public CompareSnapshotBean(String difftime,String oTime,String nTime,long diffCount,long oCount,long nCount, String methodName) {
     this.difftime = difftime;
     this.oTime = oTime;
@@ -73,121 +69,111 @@
     this.nCount = nCount;
     this.methodName = methodName;
   }
-  
+	
   public String getDifftime() {
     return difftime;
   }
-
+	
   public void setDifftime(String difftime) {
     this.difftime = difftime;
   }
-
+	
   public String getOTime() {
     return oTime;
   }
-
+	
   public void setOTime(String time) {
     oTime = time;
   }
-
+	
   public String getNTime() {
     return nTime;
   }
-
+	
   public void setNTime(String time) {
     nTime = time;
   }
-
+	
   public long getDiffCount() {
     return diffCount;
   }
-
+	
   public void setDiffCount(long diffCount) {
     this.diffCount = diffCount;
   }
-
+	
   public long getOCount() {
     return oCount;
   }
-
+	
   public void setOCount(long count) {
     oCount = count;
   }
-
+	
   public long getNCount() {
     return nCount;
   }
-
+	
   public void setNCount(long count) {
     nCount = count;
   }
-
+	
   public String getMethodName() {
     return methodName;
   }
-
+	
   public void setMethodName(String methodName) {
     this.methodName = methodName;
   }
-
+	
   public CompareSnapshotBean[] getCompareSnapshotBeans() {
     return compareSnapshotBeans;
   }
-
+	
   public String[] getSnapshotsToCompare() {
     return snapshotsToCompare;
   }
-
+	
   public void setSnapshotsToCompare(String[] snapshotsToCompare) {
     this.snapshotsToCompare = snapshotsToCompare;
   }
-  
+	
   public List<SelectItem> getJPSs(){
     List<SelectItem> allSelectItems = null;
-    File tempFile = new File(".");
+    File tempFile = new File(path);
     String[] fileStr = tempFile.list();
     List<String> jpsFiles = new ArrayList<String>();
     allSelectItems = new ArrayList<SelectItem>();
-    for(int i = 0; i < fileStr.length; i++) {
+    for (int i = 0; i < fileStr.length; i++) {
       if (fileStr[i].endsWith("jps")) {
         jpsFiles.add(fileStr[i]);
         allSelectItems.add(new SelectItem(fileStr[i]));
       }
     }
-    
     return allSelectItems;
   }
-  
+	
   public void analyzeAction() throws Exception{
-    File file1 = new File(this.snapshotsToCompare[0]);
-    File file2 = new File(this.snapshotsToCompare[1]);
-    
+    File file1 = new File(path + this.snapshotsToCompare[0]);
+    File file2 = new File(path + this.snapshotsToCompare[1]);
+		
     try {
       Snapshot os = SnapshotHelper.load(file1);
-      
       Snapshot ns = SnapshotHelper.load(file2);
-      
-      SnapshotUtil su = new SnapshotUtil(); 
-      
+      SnapshotUtil su = new SnapshotUtil(BasicOptBean.getDigThreshold());
       Map<String, List<CombinedFrameInfo>> oInfo = su.getInformation(os);
-      
       Map<String, List<CombinedFrameInfo>> nInfo = su.getInformation(ns);
-      
       compareSnapshotBeans = this.compareMethods(oInfo, nInfo);
-      
     } catch (IOException e) {
-      // TODO Auto-generated catch block
       e.printStackTrace();
     }
   }
-  
+	
   private CompareSnapshotBean[] compareMethods(Map<String, List<CombinedFrameInfo>> oInfo, Map<String, List<CombinedFrameInfo>> nInfo) throws Exception {
     List<CombinedFrameInfo> methods = new ArrayList<CombinedFrameInfo>();
     Map<String, CombinedFrameInfo> oMap = new HashMap<String, CombinedFrameInfo>();
     Map<String, CombinedFrameInfo> nMap = new HashMap<String, CombinedFrameInfo>();
-    
     Map<String, CombinedFrameInfo> tMap = new HashMap<String, CombinedFrameInfo>();
-    
     Iterator it = oInfo.values().iterator();
     while (it.hasNext()) {
       List<CombinedFrameInfo> l = (List<CombinedFrameInfo>)it.next();
@@ -223,7 +209,6 @@
       CombinedFrameInfo c = new CombinedFrameInfo(cfi.getClassName(), cfi.getPrettyName());
       c.increaseTotalTime(cfi.getTotalTime() - oTime);
       c.increaseCount(cfi.getCount() - oCount);
-      
       methods.add(c);
     }
     
@@ -235,8 +220,7 @@
       
       CombinedFrameInfo c = new CombinedFrameInfo(cfi.getClassName(), cfi.getPrettyName());
       c.increaseTotalTime(-cfi.getTotalTime());
-      c.increaseCount(-cfi.getCount());
-      
+      c.increaseCount(-cfi.getCount());	
       methods.add(c);
     }
     
@@ -244,9 +228,7 @@
     Collections.reverse(methods);
     
     DecimalFormat df = new DecimalFormat("#0.00");
-    
     this.compareSnapshotBeans=new CompareSnapshotBean[methods.size()];
-    
     for (int i = 0; i < methods.size(); i++) {
       CombinedFrameInfo h = methods.get(i);
       CombinedFrameInfo o = oMap.get(h.getPrettyName());
@@ -266,8 +248,8 @@
         nCount = n.getCount();
       }
       
-      compareSnapshotBeans[i] = new CompareSnapshotBean(df.format(h.getTotalTime()),df.format(oTime),
-                                                        df.format(nTime),h.getCount(),oCount,nCount,h.getPrettyName());
+      compareSnapshotBeans[i]=new CompareSnapshotBean(df.format(h.getTotalTime()),df.format(oTime),
+                                                      df.format(nTime),h.getCount(),oCount,nCount,h.getPrettyName());
     }
     
     return compareSnapshotBeans;

Added: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/DecorateFrameInfo.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/DecorateFrameInfo.java	                        (rev 0)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/DecorateFrameInfo.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,117 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007-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.profiler.client.web;
+
+import java.io.Serializable;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.profiler.shared.FrameInfo;
+import org.jboss.profiler.shared.Math;
+import org.jboss.profiler.shared.MethodInfo;
+import org.jboss.profiler.shared.MethodRepository;
+
+/**
+ * @author Huijuan Shao <hjshao at hitachi.cn>
+ */
+public class DecorateFrameInfo implements Serializable {
+  private MethodRepository methodRepository;
+  private FrameInfo frameInfo;
+  private List<DecorateFrameInfo> children;
+  private String pbar;
+  private long alltime = 0;
+
+  public DecorateFrameInfo(FrameInfo frameInfo, MethodRepository methodRepository) {
+    this.frameInfo = frameInfo;
+    this.methodRepository = methodRepository;
+    alltime = frameInfo.getTotalTime();
+  }
+
+  public String getPbar() {
+    if (pbar == null) {
+      long i = frameInfo.getTotalTime() * 100 / alltime;
+      if (i > 100)
+        i = 100;
+      pbar = i + ".png";
+    }
+    return pbar;
+  }
+
+  public long getAlltime() {
+    return alltime;
+  }
+
+  public void setAlltime(long alltime) {
+    this.alltime = alltime;
+  }
+
+  public void setPbar(String pbar) {
+    this.pbar = pbar;
+  }
+
+  public MethodRepository getMethodRepository() {
+    return methodRepository;
+  }
+
+  public void setMethodRepository(MethodRepository methodRepository) {
+    this.methodRepository = methodRepository;
+  }
+
+  public FrameInfo getFrameInfo() {
+    return frameInfo;
+  }
+
+  public void setFrameInfo(FrameInfo frameInfo) {
+    this.frameInfo = frameInfo;
+  }
+
+  public List<DecorateFrameInfo> getChildren() {
+    if (children == null) {
+      List<FrameInfo> frames = frameInfo.getChildren();
+      if (frames == null)
+        return null;
+      children = new ArrayList<DecorateFrameInfo>();
+      for (FrameInfo frame : frames) {
+        DecorateFrameInfo dframeInfo = new DecorateFrameInfo(frame,
+                                                             methodRepository);
+        dframeInfo.alltime = alltime;
+        children.add(dframeInfo);
+      }
+    }
+    return children;
+  }
+
+  public String getMethod() {
+    return methodRepository.getInfo(frameInfo.getMethod()).getMethodName();
+  }
+  
+  @Override
+  public String toString() {
+    MethodInfo minfo = methodRepository.getInfo(frameInfo.getMethod());
+    DecimalFormat df = new DecimalFormat("#0.00");
+    long total = frameInfo.getTotalTime();
+    return df.format(Math.toPercent(total, alltime)) + "% - "
+      + df.format(Math.nanoToMilli(total)) + " ms - "
+      + frameInfo.getCount() + " inv. - " + minfo.getMethodName();
+  }
+}

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/LoadSnapshotBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/LoadSnapshotBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/LoadSnapshotBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -38,7 +38,10 @@
 public class LoadSnapshotBean implements Serializable {
   private String snapshotToLoad;	
   private static Snapshot snapshot = null;
-  
+	
+  private String threshold = "1.0";
+  private String path = LoadSnapshotBean.class.getResource("/").getFile() + "../../files/";
+
   public static Snapshot getSnapshot() {
     return snapshot;
   }
@@ -46,22 +49,30 @@
   public static void setSnapshot(Snapshot snapshot) {
     LoadSnapshotBean.snapshot = snapshot;
   }
+	
+  public String getThreshold() {
+    return threshold;
+  }
+	
+  public void setThreshold(String threshold) {
+    this.threshold = threshold;
+  }
   
   public String getSnapshotToLoad() {
     return snapshotToLoad;
   }
-
+  
   public void setSnapshotToLoad(String snapshotToLoad) {
     this.snapshotToLoad = snapshotToLoad;
   }
-  
+
   public List<SelectItem> getJPSs(){
     List<SelectItem> allSelectItems = null;
-    File tempFile=new File(".");
+    File tempFile = new File(path);
     String[] fileStr = tempFile.list();
     List<String> jpsFiles = new ArrayList<String>();
     allSelectItems = new ArrayList<SelectItem>();
-    for(int i = 0; i < fileStr.length; i++){
+    for (int i = 0; i <fileStr.length; i++) {
       if (fileStr[i].endsWith("jps")) {
         jpsFiles.add(fileStr[i]);
         allSelectItems.add(new SelectItem(fileStr[i]));
@@ -70,14 +81,13 @@
     return allSelectItems;
   }
   
-  public void analyzeAction(){
-    File file = new File(this.snapshotToLoad);
+  public void analyzeAction() {
+    File file = new File(path+this.snapshotToLoad);
     Snapshot snapshot;
     try {
       snapshot = SnapshotHelper.load(file);
-      LoadSnapshotBean.setSnapshot(snapshot); 
+      LoadSnapshotBean.setSnapshot(snapshot);
     } catch (IOException e) {
-      // TODO Auto-generated catch block
       e.printStackTrace();
     }
   }

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/MethodBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/MethodBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/MethodBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -46,7 +46,8 @@
   //the class info in which the methods will be shown.
   private static TimedClassInfo tci;
   private static List<CombinedFrameInfo> cfs;
-  
+  private int methodUnderThreshCount;
+
   public MethodBean() {
   }
   
@@ -67,6 +68,14 @@
     this.count = count;
   }
   
+  public int getMethodUnderThreshCount() {
+    return methodUnderThreshCount;
+  }
+  
+  public void setMethodUnderThreshCount(int methodUnderThreshCount) {
+    this.methodUnderThreshCount = methodUnderThreshCount;
+  }
+  
   public String getTotalTime() {
     return totalTime;
   }
@@ -84,7 +93,7 @@
   }
   
   public String getTPercent() {
-    return tPercent;
+    return tPercent; 
   }
   
   public void setTPercent(String percent) {
@@ -98,7 +107,7 @@
   public void setPrettyName(String prettyName) {
     this.prettyName = prettyName;
   }
-  
+
   public static TimedClassInfo getTci() {
     return tci;
   }
@@ -115,24 +124,28 @@
     MethodBean.cfs = cfs;
   }
   
-  public void setMethods() {
+  public void setMethods(){
+    methodUnderThreshCount = 0;
     if (cfs != null) {
       DecimalFormat df = new DecimalFormat("#0.00");
       Collections.sort(cfs, new CombinedFrameComparator(CombinedFrameComparator.TOTAL_TIME));
-      int j=0;
+      int j = 0;
       methods = new MethodBean[cfs.size()];
-      
-      for (CombinedFrameInfo cfi : cfs) {		
+      for (CombinedFrameInfo cfi : cfs) {
         methods[j++]= new MethodBean(cfi.getCount(),
                                      df.format(cfi.getTotalTime()),
                                      df.format(Math.toPercent(cfi.getTotalTime(), tci.getTotalTime())),
                                      df.format(cfi.getPercent()),
                                      cfi.getPrettyName());
+        if (cfi.getTotalTime() < BasicOptBean.getDigThreshold()) {
+          methodUnderThreshCount++;
+        }
       }
+      this.setMethodUnderThreshCount(methodUnderThreshCount);
     }
   }
   
-  public MethodBean[] getMethods(){
+  public MethodBean[] getMethods() {
     this.setMethods();
     return this.methods;
   }

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/OverviewBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/OverviewBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/OverviewBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -32,30 +32,35 @@
 import org.jboss.profiler.client.CombinedFrameComparator;
 import org.jboss.profiler.client.CombinedFrameInfo;
 import org.jboss.profiler.client.SnapshotUtil;
+import org.jboss.profiler.client.TimedClassComparator;
 import org.jboss.profiler.client.TimedClassInfo;
 import org.jboss.profiler.shared.AllocationComparator;
 import org.jboss.profiler.shared.AllocationInfo;
+import org.jboss.profiler.shared.ClassInfo;
 import org.jboss.profiler.shared.ThreadComparator;
 import org.jboss.profiler.shared.ThreadInfo;
 
 /**
- *@author Huijuan Shao <hjshao at hitachi.cn>
+ * @author Huijuan Shao <hjshao at hitachi.cn>
  */
 public class OverviewBean implements Serializable {
   private String title;
   private int packageUnderThreshCount;
+  private int hotspotsUnderThreshCount;
+  private int mosttimeUnderThreshCount;
+  private int waittimeUnderThreshCount;
   
   public String getTitle() {
     return title;
   }
-
+  
   public void setTitle(String title) {
     this.title = title;
   }
-
+  
   public String[] getTitles(){
-    String[] titles={
-      "Threads","Most Time","Hotspots","Allocations","classes"	
+    String[] titles= {
+      "Threads","Most Time","Hotspots","Allocations","classes"
     };
     return titles;
   }
@@ -63,25 +68,48 @@
   public int getPackageUnderThreshCount() {
     return packageUnderThreshCount;
   }
-
+  
   public void setPackageUnderThreshCount(int packageUnderThreshCount) {
     this.packageUnderThreshCount = packageUnderThreshCount;
   }
-
+  
+  public int getWaittimeUnderThreshCount() {
+    return waittimeUnderThreshCount;
+  }
+  
+  public void setWaittimeUnderThreshCount(int waittimeUnderThreshCount) {
+    this.waittimeUnderThreshCount = waittimeUnderThreshCount;
+  }
+  
   public List<AllocationInfo> getAllocations() {
     List<AllocationInfo> allocationList = null;
     if (LoadSnapshotBean.getSnapshot() != null) {
       Collections.sort(LoadSnapshotBean.getSnapshot().getAllocations(), new AllocationComparator());
       allocationList = LoadSnapshotBean.getSnapshot().getAllocations();
     }
-    
     return allocationList;
   }
   
-  public List<CombinedFrameInfo> getHotspots() {
+  public int getHotspotsUnderThreshCount() {
+    return hotspotsUnderThreshCount;
+  }
+  
+  public void setHotspotsUnderThreshCount(int hotspotsUnderThreshCount) {
+    this.hotspotsUnderThreshCount = hotspotsUnderThreshCount;
+  }
+  
+  public int getMosttimeUnderThreshCount() {
+    return mosttimeUnderThreshCount;
+  }
+  
+  public void setMosttimeUnderThreshCount(int mosttimeUnderThreshCount) {
+    this.mosttimeUnderThreshCount = mosttimeUnderThreshCount;
+  }
+  
+  public List<CombinedFrameInfo> getHotspots(){
     if (LoadSnapshotBean.getSnapshot() != null) {
-      SnapshotUtil su = new SnapshotUtil();
-      Map<String, List<CombinedFrameInfo>> info = su.getInformation(LoadSnapshotBean.getSnapshot());	  
+      SnapshotUtil su = new SnapshotUtil(BasicOptBean.getDigThreshold());
+      Map<String, List<CombinedFrameInfo>> info = su.getInformation(LoadSnapshotBean.getSnapshot());
       List<CombinedFrameInfo> hotspotsInfo = new ArrayList<CombinedFrameInfo>();
       Iterator it = info.values().iterator();
       while (it.hasNext()) {
@@ -89,21 +117,32 @@
         hotspotsInfo.addAll(l);
       }
       Collections.sort(hotspotsInfo,new CombinedFrameComparator(CombinedFrameComparator.TOTAL_TIME_AVG));
+      //build new array list above threshold
+      List<CombinedFrameInfo> thresholdHotspots = new ArrayList<CombinedFrameInfo>();
+      it = hotspotsInfo.iterator();
+      while (it.hasNext()) {
+        CombinedFrameInfo tempCFI=(CombinedFrameInfo) it.next();
+        if (tempCFI.getTotalTime() >= BasicOptBean.getDigThreshold()) {
+          thresholdHotspots.add(tempCFI);
+        }
+      }
       
-      return hotspotsInfo;
-    }	
+      this.hotspotsUnderThreshCount = hotspotsInfo.size() - thresholdHotspots.size();
+      if (thresholdHotspots.isEmpty()) {
+        return null;
+      } else {
+        return thresholdHotspots;
+      }
+    }
     return null;
   }
   
-  public List<CombinedFrameInfo> getMostTime(){
-    SnapshotUtil su = new SnapshotUtil();
-    
+  public List<CombinedFrameInfo> getMostTime() {
+    SnapshotUtil su = new SnapshotUtil(BasicOptBean.getDigThreshold());
     if (LoadSnapshotBean.getSnapshot() != null) {
       Map<String, List<CombinedFrameInfo>> info = su.getInformation(LoadSnapshotBean.getSnapshot());
       List<TimedClassInfo> classes = su.getTimedClasses(LoadSnapshotBean.getSnapshot().getClasses(), info);
-      
       List<CombinedFrameInfo> allMethods = new ArrayList<CombinedFrameInfo>();
-      
       Iterator it = info.values().iterator();
       while (it.hasNext()) {
         List<CombinedFrameInfo> l = (List<CombinedFrameInfo>)it.next();
@@ -111,61 +150,105 @@
       }
       
       Collections.sort(allMethods, new CombinedFrameComparator(CombinedFrameComparator.TOTAL_TIME));
-      return allMethods;
+      //build new array list above threshold
+      List<CombinedFrameInfo> thresholdMostTime = new ArrayList<CombinedFrameInfo>();
+      it = allMethods.iterator();
+      while (it.hasNext()) {
+        CombinedFrameInfo tempCFI = (CombinedFrameInfo)it.next();
+        if (tempCFI.getTotalTime()>=BasicOptBean.getDigThreshold()) {
+          thresholdMostTime.add(tempCFI);
+        }
+      }
+      this.mosttimeUnderThreshCount = allMethods.size() - thresholdMostTime.size();
+      if (thresholdMostTime.isEmpty()) {
+        return null;
+      } else {
+        return thresholdMostTime;
+      }
     }
-    return null;		  
+    return null;
   }
   
-  public List<ThreadInfo> getThreads(){		
+  public List<ThreadInfo> getThreads(){
     List<ThreadInfo> threads = null;
     if (LoadSnapshotBean.getSnapshot() != null) {
       Collections.sort(LoadSnapshotBean.getSnapshot().getThreads(), new ThreadComparator());
       threads = LoadSnapshotBean.getSnapshot().getThreads();
+      return threads;
     }
-    return threads;
+    return null;
   }
   
-  public List<CombinedFrameInfo> getPackages(){	
+  public List<CombinedFrameInfo> getPackages(){
     if (LoadSnapshotBean.getSnapshot() != null) {
-      SnapshotUtil su = new SnapshotUtil();
+      SnapshotUtil su = new SnapshotUtil(BasicOptBean.getDigThreshold());
       Map<String, List<CombinedFrameInfo>> info = su.getInformation(LoadSnapshotBean.getSnapshot());
       List<TimedClassInfo> classes = su.getTimedClasses(LoadSnapshotBean.getSnapshot().getClasses(), info);
-      
       Map<String, CombinedFrameInfo> packages = new HashMap<String, CombinedFrameInfo>();
-      
       Iterator it = info.entrySet().iterator();
       while (it.hasNext()) {
         Map.Entry entry = (Map.Entry)it.next();
         String key = (String)entry.getKey();
         List<CombinedFrameInfo> value = (List<CombinedFrameInfo>)entry.getValue();
-        
         for (CombinedFrameInfo cfi : value) {
-          String cn = cfi.getClassName();
-          cn = cn.replace('/', '.');
-          if (cn.lastIndexOf(".") != -1) {
-            cn = cn.substring(0, cn.lastIndexOf("."));
+          if (cfi.getTotalTime() > BasicOptBean.getDigThreshold()) {
+            String cn = cfi.getClassName();
+            cn = cn.replace('/', '.');
+            if (cn.lastIndexOf(".") != -1) {
+              cn = cn.substring(0, cn.lastIndexOf("."));
+            }
+            CombinedFrameInfo ci = packages.get(cn);
+            if (ci == null) {
+              ci = new CombinedFrameInfo(cn, cn);
+            }
+            ci.increaseTotalTime(cfi.getTotalTime());
+            ci.increasePercent(cfi.getPercent());
+            packages.put(cn, ci);
           }
-          
-          CombinedFrameInfo ci = packages.get(cn);
-          if (ci == null) {
-            ci = new CombinedFrameInfo(cn, cn);
-          }
-          ci.increaseTotalTime(cfi.getTotalTime());
-          ci.increasePercent(cfi.getPercent());
-          packages.put(cn, ci);
         }
       }
-      
       List<CombinedFrameInfo> result = new ArrayList<CombinedFrameInfo>(packages.values());
       Collections.sort(result, new CombinedFrameComparator(CombinedFrameComparator.TOTAL_TIME));
+      //build new array list above threshold
+      List<CombinedFrameInfo> thresholdPackages = new ArrayList<CombinedFrameInfo>();
+      it = result.iterator();
+      while (it.hasNext()) {
+        CombinedFrameInfo tempCFI = (CombinedFrameInfo) it.next();
+        if(tempCFI.getTotalTime() >= BasicOptBean.getDigThreshold()) {
+          thresholdPackages.add(tempCFI);
+        }
+      }
+      this.packageUnderThreshCount = result.size() - thresholdPackages.size();
       
-      int count = 0;
+      if (thresholdPackages.isEmpty()) {
+        return null;
+      } else {
+        return thresholdPackages;
+      }
+    }
+    return null;
+  }
+  
+  public List<TimedClassInfo> getClasses() {
+    List<TimedClassInfo> thresholdClasses = new ArrayList<TimedClassInfo>();
+    if (LoadSnapshotBean.getSnapshot() != null) {
+      SnapshotUtil su = new SnapshotUtil(BasicOptBean.getDigThreshold());
+      Map<String, List<CombinedFrameInfo>> info = su.getInformation(LoadSnapshotBean.getSnapshot());
+      List<TimedClassInfo> classes = su.getTimedClasses(LoadSnapshotBean.getSnapshot().getClasses(), info);
+      Collections.sort(classes, new TimedClassComparator(TimedClassComparator.WAIT_TIME));
       
-      int j=0;
+      //build new array list of wait time above threshold
+      thresholdClasses.clear();
+      Iterator<TimedClassInfo> it = classes.iterator();
+      while (it.hasNext()) {
+        TimedClassInfo tempTCI = it.next();
+        if (tempTCI.getWaitTime() >= BasicOptBean.getDigThreshold()) {
+          thresholdClasses.add(tempTCI);
+        }
+      }
       
-      this.packageUnderThreshCount = count;
-      return result;
+      this.waittimeUnderThreshCount = classes.size() - thresholdClasses.size();
     }
-    return null;
+    return thresholdClasses;
   }
 }

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ThreadHotspotBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ThreadHotspotBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/ThreadHotspotBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -40,15 +40,17 @@
 import org.jboss.profiler.client.Util;
 import org.jboss.profiler.shared.FrameInfo;
 import org.jboss.profiler.shared.Math;
+import org.jboss.profiler.shared.MethodInfo;
+import org.jboss.profiler.shared.MethodRepository;
 import org.jboss.profiler.shared.ThreadInfo;
+import org.jboss.profiler.shared.ThreadInfoProxy;
 
 /**
- *@author Huijuan Shao <hjshao at hitachi.cn>
+ * @author Huijuan Shao <hjshao at hitachi.cn>
  */
 public class ThreadHotspotBean implements Serializable {
   private String selectItem = null;
   private ThreadInfo selectThreadInfo = null;
-  
   private ArrayList<String> mainKeys;
   private ArrayList<String> subKeys;
   private ArrayList<CombinedFrameInfo> subValues;
@@ -60,7 +62,7 @@
   public String getSelectItem() {
     return selectItem;
   }
-
+  
   public void setSelectItem(String selectItem) {
     this.selectItem = selectItem;
   }
@@ -68,7 +70,7 @@
   public ThreadInfo getSelectThreadInfo() {
     return selectThreadInfo;
   }
-
+  
   public void setSelectThreadInfo(ThreadInfo selectThreadInfo) {
     this.selectThreadInfo = selectThreadInfo;
     this.selectItem = selectThreadInfo.getName();
@@ -85,7 +87,7 @@
   public ArrayList<String> getSubKeys() {
     return subKeys;
   }
-
+  
   public void setSubKeys(ArrayList<String> subKeys) {
     this.subKeys = subKeys;
   }
@@ -93,7 +95,7 @@
   public ArrayList<CombinedFrameInfo> getSubValues() {
     return subValues;
   }
-
+  
   public void setSubValues(ArrayList<CombinedFrameInfo> subValues) {
     this.subValues = subValues;
   }
@@ -111,13 +113,11 @@
     if (LoadSnapshotBean.getSnapshot() != null) {
       threadsList = LoadSnapshotBean.getSnapshot().getThreads();
     }
-    
     return threadsList;
   }
   
   public void selectionChanged(javax.faces.event.ValueChangeEvent evt){
     this.setSelectItem(((String)evt.getNewValue()));
-    
     //get the selected thread
     List<ThreadInfo> allThreads = this.getAllThreads();
     Iterator<ThreadInfo> it = allThreads.iterator();
@@ -130,25 +130,23 @@
     generateArrayFromMap(tmpThreadInfo);
   }
   
-  public List<SelectItem> getAllSelectItems() {
-    List<SelectItem> allSelectItems = null;
+  public List<SelectItem> getAllSelectItems(){
+    List<SelectItem> allSelectItems = new ArrayList<SelectItem>();
     List<ThreadInfo> threadsList = null;
     if (LoadSnapshotBean.getSnapshot() != null) {
       threadsList = LoadSnapshotBean.getSnapshot().getThreads();
-      allSelectItems = new ArrayList<SelectItem>(threadsList.size());
-      for (int i = 0; i<threadsList.size(); i++) {
+      //allSelectItems=new ArrayList<SelectItem>(threadsList.size());
+      for (int i = 0; i < threadsList.size(); i++) {
         allSelectItems.add(new SelectItem(threadsList.get(i).getName()));
       }
     }
     return allSelectItems;
   }
   
-  public void showMapInfo(ThreadInfo threadInfo){
+  public void showMapInfo(ThreadInfo threadInfo) {
     Map<String, Map<String, CombinedFrameInfo>> data = new HashMap<String, Map<String, CombinedFrameInfo>>();
-    
-    //only one thread information, not all threadList
     for (FrameInfo fi: threadInfo.getFrames()) {
-      getCallerInformation(fi, data);
+      getCallerInformation(LoadSnapshotBean.getSnapshot().getMethodRepository(), fi, data);
     }
     
     Iterator dit = data.entrySet().iterator();
@@ -158,12 +156,11 @@
       Map.Entry entry = (Map.Entry)dit.next();
       String key = (String)entry.getKey();
       Map<String, CombinedFrameInfo> value = (Map<String, CombinedFrameInfo>)entry.getValue();
-      
       Map<String, List<CombinedFrameInfo>> m = new HashMap<String, List<CombinedFrameInfo>>();
       Iterator vit = value.values().iterator();
+      
       while (vit.hasNext()) {
         CombinedFrameInfo cfi = (CombinedFrameInfo)vit.next();
-        
         List<CombinedFrameInfo> l = m.get(cfi.getClassName());
         if (l == null) {
           l = new ArrayList<CombinedFrameInfo>();
@@ -182,34 +179,33 @@
     }//show map information
   }
   
-  public void generateArrayFromMap(ThreadInfo threadInfo){
+  public void generateArrayFromMap(ThreadInfo threadInfo) {
     Map<String, Map<String, CombinedFrameInfo>> map = new HashMap<String, Map<String, CombinedFrameInfo>>();
     
     for (FrameInfo fi: threadInfo.getFrames()) {
-      getCallerInformation(fi, map);
+      getCallerInformation(LoadSnapshotBean.getSnapshot().getMethodRepository(),fi, map);
     }
     
-    HashMap<String,CombinedFrameInfo> newMap=new HashMap();
-    Set<String> set=map.keySet();
-    ArrayList<String> mainKeys=new ArrayList(set);
-    this.mainKeys=mainKeys;
+    HashMap<String,CombinedFrameInfo> newMap = new HashMap();
+    Set<String> set = map.keySet();
+    ArrayList<String> mainKeys = new ArrayList(set);
+    this.mainKeys = mainKeys;
     
-    ArrayList subKeys=new ArrayList();
-    ArrayList subValues=new ArrayList();
+    ArrayList subKeys = new ArrayList();
+    ArrayList subValues = new ArrayList();
     
     Iterator it = map.values().iterator();
     while(it.hasNext()){
       Map<String, CombinedFrameInfo> subMap=(Map<String, CombinedFrameInfo>) it.next();
-      Set entrySet=subMap.entrySet();
-      Iterator entryIt=entrySet.iterator();
-      while(entryIt.hasNext()){
-        Map.Entry<String, CombinedFrameInfo> entry=(Entry<String, CombinedFrameInfo>) entryIt.next();
+      Set entrySet = subMap.entrySet();
+      Iterator entryIt = entrySet.iterator();
+      while (entryIt.hasNext()) {
+        Map.Entry<String, CombinedFrameInfo> entry = (Entry<String, CombinedFrameInfo>)entryIt.next();
         subKeys.add(entry.getKey());
         subValues.add(entry.getValue());
         newMap.put(entry.getKey(), entry.getValue());
       }
     }
-    
     this.setSubKeys(subKeys);
     this.setSubValues(subValues);
     this.setNewMap(newMap);
@@ -217,24 +213,23 @@
   
   /**
    * Get caller information
-   * @param fi The frame
-   * @param data The data
-   */
-  public void getCallerInformation(FrameInfo fi, Map<String, Map<String, CombinedFrameInfo>> data) {
-    /*
-
-    TODO -- common implementation should be placed in the client
-
-    Map<String, CombinedFrameInfo> entry = data.get(fi.getMethod().getClassName());
+   *  @param mr The method repository
+   *  @param fi The frame
+   *  @param data The data
+   * */
+  protected void getCallerInformation(MethodRepository mr, FrameInfo fi, Map<String, Map<String, CombinedFrameInfo>> data) {
+    MethodInfo mi = mr.getInfo(fi.getMethod());
+    Map<String, CombinedFrameInfo> entry = data.get(mi.getClassName());
     if (entry == null) {
       entry = new HashMap<String, CombinedFrameInfo>();
-      data.put(fi.getMethod().getClassName(), entry);
+      data.put(mi.getClassName(), entry);
     }
     if (fi.getParent() != null) {
-      String parentName = Util.getPrettyName(fi.getParent().getMethod());
+      MethodInfo pmi = mr.getInfo(fi.getParent().getMethod());
+      String parentName = Util.getPrettyName(pmi);
       CombinedFrameInfo cfi = entry.get(parentName);
       if (cfi == null) {
-        cfi = new CombinedFrameInfo(Util.getPrettyName(fi.getMethod()), parentName);
+        cfi = new CombinedFrameInfo(Util.getPrettyName(mi), parentName);
         entry.put(parentName, cfi);
       }
       
@@ -244,10 +239,8 @@
     
     if (fi.getChildren() != null && fi.getChildren().size() > 0) {
       for (FrameInfo child : fi.getChildren()) {
-        getCallerInformation(child, data);
+        getCallerInformation(mr, child, data);
       }
     }
-
-    */
   }
 }

Deleted: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeFrameBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeFrameBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeFrameBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,55 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2007-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.profiler.client.web;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import org.jboss.profiler.shared.FrameInfo;
-
-/**
- *@author Huijuan Shao <hjshao at hitachi.cn>
- */
-public class TreeFrameBean implements Serializable {
-
-  private static List<FrameInfo> enterFrames = null;
-  private List<FrameInfo> srcRoots = null;
-  
-  public static List<FrameInfo> getEnterFrames() {
-    return enterFrames;
-  }
-  
-  public static void setEnterFrames(List<FrameInfo> enterFrames) {
-    TreeFrameBean.enterFrames = enterFrames;
-  }
-  
-  public synchronized List<FrameInfo> getSrcRoots() {
-    if (enterFrames == null)
-      return null;
-
-    srcRoots = new ArrayList<FrameInfo>(enterFrames.size());
-    for (int i = 0; i < enterFrames.size(); i++) {
-      srcRoots.add(enterFrames.get(i));
-    }
-    return srcRoots;
-  }
-}

Modified: branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeThreadBean.java
===================================================================
--- branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeThreadBean.java	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/org/jboss/profiler/client/web/TreeThreadBean.java	2009-04-26 15:55:43 UTC (rev 524)
@@ -21,25 +21,12 @@
  */
 package org.jboss.profiler.client.web;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
 import java.io.Serializable;
-import java.io.Writer;
-import java.text.DecimalFormat;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
-import javax.swing.tree.DefaultMutableTreeNode;
-
-import org.jboss.profiler.client.Util;
 import org.jboss.profiler.shared.FrameInfo;
-import org.jboss.profiler.shared.Math;
-import org.jboss.profiler.shared.Snapshot;
 import org.jboss.profiler.shared.ThreadInfo;
-import org.richfaces.model.TreeNode;
-import org.richfaces.model.TreeNodeImpl;
 
 /**
  * @author Huijuan Shao <hjshao at hitachi.cn>
@@ -47,36 +34,68 @@
 public class TreeThreadBean implements Serializable {
   //the id of selectedThread
   private long selectedThread;
+  private volatile LoadSnapshotBean loadSnapshotBean;
+  private List<FrameInfo> frames;
+  private FrameInfo frame;
   
+  public FrameInfo getFrame() {
+    return frame;
+  }
+  
+  public void setFrame(FrameInfo frame) {
+    this.frame = frame;
+  }
+  
+  public LoadSnapshotBean getLoadSnapshotBean() {
+    return loadSnapshotBean;
+  }
+  
+  public void setLoadSnapshotBean(LoadSnapshotBean loadSnapshotBean) {
+    this.loadSnapshotBean = loadSnapshotBean;
+  }
+  
   public TreeThreadBean() {
   }
   
   public long getSelectedThread() {
     return selectedThread;
   }
-
+  
   public void setSelectedThread(long selectedThread) {
     this.selectedThread = selectedThread;
   }
-
+  
   public List<ThreadInfo> getAllThreads(){
     List<ThreadInfo> threadsList = null;
-    if (LoadSnapshotBean.getSnapshot() != null) {
-      threadsList=LoadSnapshotBean.getSnapshot().getThreads();
+    if (loadSnapshotBean.getSnapshot() != null) {
+      threadsList = loadSnapshotBean.getSnapshot().getThreads();
     }
     return threadsList;
   }
   
   public void fireSelectedThread(){
     List<ThreadInfo> allthreads = this.getAllThreads();
-    ThreadInfo tmpThreadInfo=null;
-    for(int i = 0; i < allthreads.size(); i++) {
+    ThreadInfo tmpThreadInfo = null;
+    for (int i=0; i < allthreads.size(); i++) {
       tmpThreadInfo = allthreads.get(i);
-      if (tmpThreadInfo.getId() == this.getSelectedThread())
+      if (tmpThreadInfo.getId() == this.getSelectedThread()) 
         break;
     }
-    
-    List<FrameInfo> frames = tmpThreadInfo.getFrames();
-    TreeFrameBean.setEnterFrames(tmpThreadInfo.getFrames());
+    frames = tmpThreadInfo.getFrames();
+    //TreeFrameBean.setEnterFrames(tmpThreadInfo.getFrames());
   }
+  
+  public synchronized List<DecorateFrameInfo> getSrcRoots() {
+    if (frames == null)
+       return null;
+
+    ArrayList<DecorateFrameInfo> ret = new ArrayList<DecorateFrameInfo>();
+    for (FrameInfo frameInfo : frames)
+      ret.add(new DecorateFrameInfo(frameInfo,loadSnapshotBean.getSnapshot().getMethodRepository()));
+    return ret;
+  }
+  
+  public String getFrameInfo(){
+    return frame == null ? "" : frame.toString();
+  }
 }

Deleted: branches/JBossProfiler2/src/main/www/addclasspanel.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/addclasspanel.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/addclasspanel.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,63 +0,0 @@
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
-                xmlns:h="http://java.sun.com/jsf/html"
-                xmlns:f="http://java.sun.com/jsf/core"
-                xmlns:rich="http://richfaces.org/rich"
-                xmlns:a4j="http://richfaces.org/a4j"
-                xmlns:ui="http://java.sun.com/jsf/facelets">
-
-  <rich:modalPanel id="addClassPanel" width="350" height="250" onhide="false">
-    <a4j:region id="addClassRegion">
-      <a4j:form id="addClassFrom" ajaxSubmit="true" rendered="true">
-        <a4j:outputPanel layout="block">
-
-          <f:facet name="controls">
-            <h:panelGroup>
-              <h:graphicImage value="/images/modal/close.png" style="cursor:pointer" id="hidelink1"/>
-              <rich:componentControl for="addClassPanel" attachTo="hidelink1" operation="hide" event="onclick"/>
-            </h:panelGroup>
-          </f:facet>
-          <h:panelGroup>
-            <rich:panel>
-              <f:facet name="header">
-                <h:outputText value="Add Class to Intercept During Runtime"/>
-              </f:facet>
-
-              <h:outputText value="Class to add (e.g. org.jboss.*)"/>
-              <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-              <br/>
-
-              <h:inputText value="#{basicOptBean.addClass}"/>
-              <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-              <br/>
-
-              <h:outputText value="Choose the visibility for above class"/>
-              <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-              <br/>
-
-              <a4j:outputPanel layout="block" id="visibilitySelect">
-                <h:selectOneMenu value="#{basicOptBean.visibility}" style="width: 200px" lable="#{basicOptBean.visibility}">
-                  <a4j:support event="onchange" reRender="port,protocolSelect"/>
-                  <f:selectItems value="#{basicOptBean.visibilities}" />
-                </h:selectOneMenu>
-              </a4j:outputPanel>
-
-              <br/>
-
-              <a4j:commandButton id="addButton1"
-                                 value="add class"
-                                 action="#{basicOptBean.addClassAction}"
-                                 onclick="this.disable=true">
-                <rich:componentControl for="addClassPanel" attachTo="addButton1" operation="hide" event="onclick"/>
-              </a4j:commandButton>
-
-              <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-              <a4j:commandButton id="closebutton1" value="cancel">
-                  <rich:componentControl for="addClassPanel" attachTo="closebutton1" operation="hide" event="onclick"/>
-              </a4j:commandButton>
-            </rich:panel>
-          </h:panelGroup>
-        </a4j:outputPanel>
-      </a4j:form>
-    </a4j:region>
-  </rich:modalPanel>
-</ui:composition>
\ No newline at end of file

Modified: branches/JBossProfiler2/src/main/www/comparemethods.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/comparemethods.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/comparemethods.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,84 +1,75 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:a4j="http://richfaces.org/a4j"
-      xmlns:rich="http://richfaces.org/rich">
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:a4j="http://richfaces.org/a4j"
+	xmlns:rich="http://richfaces.org/rich">
 
-  <ui:composition template="/template/comparetemplate.xhtml">
-    <ui:define name="compareContent">
-      <h:form>
-        <h:outputText value="The methods #{compareSnapshotBean.snapshotsToCompare[0]} and #{compareSnapshotBean.snapshotsToCompare[1]} comparing results is: ">
-        <p></p>
 
-        <rich:datascroller align="left" for="compareSnapshotsTable" maxPages="20"/>
-          <rich:spacer height="30"/>
-
-          <rich:dataTable id="compareSnapshotsTable"
-                          rows="10"
-                          value="#{compareSnapshotBean.compareSnapshotBeans}"
-                          var="compareResult"
-                          width="500px"
-                          columnClasses="center"
-                          onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
-                          onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
-            <f:facet name="label">
-              <h:outputText value="Diff(Total Time)   Old(ms)   New(ms)   Diff(Invocations)   Old(#)   New(#)   Method"/>
-            </f:facet>
-
-            <rich:column style="width:500px" sortBy="#{compareResult.difftime}">
-              <f:facet name="header">
-                <h:outputText value="Diff(Total Time)"/>
-              </f:facet>
-              <h:outputText value="#{compareResult.difftime}"/>
-            </rich:column>
-
-            <rich:column style="width:500px" sortBy="#{compareResult.OTime}">
-              <f:facet name="header">
-                <h:outputText value="Old(ms)"/>
-              </f:facet>
-              <h:outputText value="#{compareResult.OTime}"/>
-            </rich:column>
-
-            <rich:column style="width:500px" sortBy="#{compareResult.NTime}">
-              <f:facet name="header">
-                <h:outputText value="New(ms)"/>
-              </f:facet>
-              <h:outputText value="#{compareResult.NTime}"/>
-            </rich:column>
-
-            <rich:column style="width:500px" sortBy="#{compareResult.diffCount}">
-              <f:facet name="header">
-                <h:outputText value="Diff(Invocations)"/>
-              </f:facet>
-              <h:outputText value="#{compareResult.diffCount}"/>
-            </rich:column>
-
-            <rich:column style="width:500px" sortBy="#{compareResult.OCount}">
-              <f:facet name="header">
-                <h:outputText value="Old(#)"/>
-              </f:facet>
-              <h:outputText value="#{compareResult.OCount}"/>
-            </rich:column>
-
-            <rich:column style="width:500px" sortBy="#{compareResult.NCount}">
-              <f:facet name="header">
-                <h:outputText value="New(#)"/>
-              </f:facet>
-              <h:outputText value="#{compareResult.NCount}"/>
-            </rich:column>
-
-            <rich:column style="width:500px" sortBy="#{compareResult.methodName}">
-              <f:facet name="header">
-                <h:outputText value="Method"/>
-              </f:facet>
-              <h:outputText value="#{compareResult.methodName}"/>
-            </rich:column>
-
-          </rich:dataTable>
-      </h:form>
+  <ui:composition template="/template/analyzetemplate.xhtml">
+    <ui:define name="analyzeContent">
+      <h:form>
+	    <h:outputText value="Compare two snapshots #{compareSnapshotBean.snapshotsToCompare[0]} and #{compareSnapshotBean.snapshotsToCompare[1]}."/>
+		<p></p>
+		<rich:datascroller align="left" for="compareSnapshotsTable" maxPages="20"/>
+		<rich:spacer height="30"/>
+			
+		<rich:dataTable id="compareSnapshotsTable" rows="16" value="#{compareSnapshotBean.compareSnapshotBeans}" var="compareResult" width="790px" columnClasses="center" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+		<f:facet name="label">
+		  <h:outputText value="Diff(Total Time)   Old(ms)   New(ms)   Diff(Invocations)   Old(#)   New(#)   Method"/>
+		</f:facet>
+			
+		<rich:column style="width:500px" sortBy="#{compareResult.difftime}">
+		<f:facet name="header">
+		  <h:outputText value="Diff(TotalTime)"/>
+	    </f:facet>
+		<h:outputText value="#{compareResult.difftime}"/>
+        </rich:column>
+            
+        <rich:column style="width:500px" sortBy="#{compareResult.OTime}"> 
+          <f:facet name="header"> 
+            <h:outputText value="Old(ms)"/>
+           </f:facet>
+           <h:outputText value="#{compareResult.OTime}"/>
+		</rich:column>
+		    
+		<rich:column style="width:500px" sortBy="#{compareResult.NTime}">
+		  <f:facet name="header">
+		    <h:outputText value="New(ms)"/>
+		  </f:facet>
+		  <h:outputText value="#{compareResult.NTime}"/>
+		</rich:column>
+		    
+		<rich:column style="width:500px" sortBy="#{compareResult.diffCount}"> 
+		  <f:facet name="header">
+		    <h:outputText value="Diff(Inv)"/>
+		  </f:facet>
+		  <h:outputText value="#{compareResult.diffCount}"/>
+		</rich:column>
+		    
+		<rich:column style="width:500px" sortBy="#{compareResult.OCount}">
+		  <f:facet name="header">
+		    <h:outputText value="Old(#)"/>
+		    </f:facet>
+		    <h:outputText value="#{compareResult.OCount}"/>
+		</rich:column>
+		    
+		<rich:column style="width:500px" sortBy="#{compareResult.NCount}">
+		  <f:facet name="header">
+		    <h:outputText value="New(#)"/>
+		  </f:facet>
+		  <h:outputText value="#{compareResult.NCount}"/>
+		</rich:column>
+		    
+		<rich:column style="width:500px" sortBy="#{compareResult.methodName}">
+		  <f:facet name="header">
+		    <h:outputText value="Method"/>
+		  </f:facet>
+		  <h:outputText value="#{compareResult.methodName}"/>
+		</rich:column>
+      </rich:dataTable>
+    </h:form>
     </ui:define>
-  </ui:composition>
-
+    </ui:composition>
 </html>
\ No newline at end of file

Modified: branches/JBossProfiler2/src/main/www/comparesnapshots.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/comparesnapshots.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/comparesnapshots.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -7,20 +7,18 @@
       xmlns:rich="http://richfaces.org/rich"
       xmlns:richfaces="http://richfaces.ajax4jsf.org/rich"
       xmlns:ajax="https://ajax4jsf.dev.java.net/ajax">
-
-  <ui:composition template="/template/comparetemplate.xhtml">
-  <ui:define name="compareContent">
-    <h:outputText value="Please choose two snapshots *.jps file for analyzing."/>
-    <p></p>
-
-    <h:selectManyListbox value="#{compareSnapshotBean.snapshotsToCompare}" style="height:300px;width:500px">
-      <f:selectItems value="#{compareSnapshotBean.JPSs}" />
-    </h:selectManyListbox>
-    <p></p>
-    <a4j:commandLink action="#{compareSnapshotBean.analyzeAction}" onclick="document.location.href='./comparemethods.xhtml'">
-      <h:outputText value="Compare the selected two snapshots" />
-    </a4j:commandLink>
-  </ui:define>
+  
+  <ui:composition template="/template/analyzetemplate.xhtml">
+    <ui:define name="analyzeContent">
+      <h:outputText value="Please choose two snapshots *.jps file for analyzing."/>
+      <p></p>
+      <h:selectManyListbox value="#{compareSnapshotBean.snapshotsToCompare}" style="height:300px;width:500px">
+	<f:selectItems value="#{compareSnapshotBean.JPSs}" />
+      </h:selectManyListbox>
+      <p></p>
+      <a4j:commandLink action="#{compareSnapshotBean.analyzeAction}" onclick="document.location.href='./comparemethods.xhtml'">
+	<h:outputText value="Compare the selected two snapshots" />
+      </a4j:commandLink>
+    </ui:define>
   </ui:composition>
-
 </html>

Added: branches/JBossProfiler2/src/main/www/connecterr.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/connecterr.xhtml	                        (rev 0)
+++ branches/JBossProfiler2/src/main/www/connecterr.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:a4j="http://richfaces.org/a4j"
+      xmlns:rich="http://richfaces.org/rich">
+  
+  <ui:composition template="/template/serveropttemplate.xhtml">
+    <ui:define name="optContent">
+      Can not get connection to remote JVM to be monitored and profiled:
+      <br></br>
+      host = <h:outputText value="#{basicOptBean.host}"> </h:outputText>
+      <br></br>
+      protocol = <h:outputText value="#{basicOptBean.protocol}"> </h:outputText>
+      <br></br>
+      port = <h:outputText value="#{basicOptBean.port}"> </h:outputText>
+      <br></br>
+      <br></br>
+      <a href="profilerstatus.xhtml"> Back to configure and re-connect!</a>
+    </ui:define>
+  </ui:composition>	
+</html>

Deleted: branches/JBossProfiler2/src/main/www/index.html
===================================================================
--- branches/JBossProfiler2/src/main/www/index.html	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/index.html	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,11 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    <meta http-equiv="refresh" content="0; url=listsnapshot.xhtml"/>
-    <title>JBoss Profiler 2</title>
-  </head>
-  <body>
-  </body>
-</html>

Modified: branches/JBossProfiler2/src/main/www/index.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/index.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/index.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,20 +0,0 @@
-<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
-                xmlns:ui="http://java.sun.com/jsf/facelets"
-                xmlns:jsp="http://java.sun.com/JSP/Page"
-                xmlns:f="http://java.sun.com/jsf/core"
-                xmlns:h="http://java.sun.com/jsf/html"
-                xmlns:rich="http://richfaces.ajax4jsf.org/rich"
-                template="/template/template.xhtml">
-
-  <ui:define name="centerContent">
-
-    <f:subview id="frontPage">
-      <h:form>
-
-      </h:form>
-    </f:subview>
-  </ui:define>
-</ui:composition>

Deleted: branches/JBossProfiler2/src/main/www/listsnapshot.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/listsnapshot.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/listsnapshot.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,97 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:a4j="http://richfaces.org/a4j"
-      xmlns:rich="http://richfaces.org/rich">
-
-  <ui:composition template="/template/head.xhtml">
-    <ui:define name="mainContent">
-      <h:panelGrid border="0" columns="2" columnClasses="wholecol" style="width: 150px">
-      <h:form>
-        <rich:panel style="background-color: AliceBlue; height: 915px; width: 150px; background-position: left center; padding-right: 1px; padding-left: 1px; padding-top: 1px; border-top-style: solid; margin-bottom: 1px; border-right-style: solid; padding-bottom: 1px; border-bottom-color: LightBlue; border-bottom-style: solid; margin-right: 1px; border-left-color: LightBlue; border-top-color: LightBlue; border-right-color: LightBlue; border-left-style: solid; margin-left: 1px; margin-top: 1px; font-size:32px" >
-          <h:outputLabel value="Snapshot Operations"/>
-          <p></p>
-          <h:commandLink action="${basicOptBean.takeSnapshot}">Take Snapshot</h:commandLink>
-          <p></p>
-          <a href="./listsnapshot.xhtml">List Snapshots</a>
-          <p></p>
-          <h:commandLink action="${basicOptBean.clearSnapshot}">Clear Snapshots</h:commandLink>
-        </rich:panel>
-      </h:form>
-
-      <a4j:region id="listSnapshotRegion">
-        <a4j:form  id="listSnapshotForm" ajaxSubmit="true" rendered="true">
-          <a4j:outputPanel id="listSnapshotPanel" layout="block">
-
-            <rich:panel style="height:919px;width:822px">
-              <h:outputText value="All the snapshots are listed here"/>
-                <h:form>
-                  <rich:panel>
-                    <rich:datascroller align="left" for="snapshotsTable" maxPages="20" reRender="sc2" id="sc1"/>
-                    <rich:spacer height="30"/>
-
-                    <rich:dataTable id="snapshotsTable"
-                                    rows="10"
-                                    value="#{basicOptBean.snapshots}"
-                                    var="snapshot"
-                                    width="500px"
-                                    columnClasses="center"
-                                    onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
-                                    onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
-                      <f:facet name="label">
-                        <h:outputText value="Snapshot start time --> stop time"/>
-                      </f:facet>
-
-                      <rich:column style="width:500px" sortBy="#{snapshot}"
-                                   onclick="document.location.href='./listsnapshot.xhtml'">
-                        <h:outputText value="#{snapshot}"/>
-                        <rich:toolTip direction="top-right" showDelay="500">
-                          <span style="white-space:nowrap"> Click to choose one snapshot for save!<br/></span>
-                        </rich:toolTip>
-                      </rich:column>
-
-                      <a4j:support event="onRowClick"
-                                   action="#{basicOptBean.selectSnapshotAction}"
-                                   reRender="listSnapshotPanel,selectedOutput">
-                        <a4j:actionparam name="selected" value="#{snapshot}" assignTo="#{basicOptBean.selectSnapshot}"/>
-                      </a4j:support>
-                    </rich:dataTable>
-                  </rich:panel>
-
-                  <rich:spacer height="30"/>
-
-                  <rich:panel id="savePanel" rendered="#{basicOptBean.panelShows}">
-                    <h:outputText id="selectedOutput" value="the selected snapshot is No.#{basicOptBean.selectSnapshot}"/>
-                    <p></p>
-                    <h:outputText value="Input the snapshot name. If it's blank, the name based on time is generated."/>
-                    <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-                    <br/>
-
-                    <h:inputText id="inputSaveName" value="#{basicOptBean.saveSnapshotName}"/>
-                    <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-                    <br/>
-                    <br/>
-
-                    <a4j:commandButton id="savebutton"
-                                       value="Save"
-                                       action="#{basicOptBean.selectSaveSnapshotAction}"
-                                       reRender="inputSaveName,saveEcho">
-                      <rich:componentControl for="saveSnapshotPanel" attachTo="savebutton" operation="hide" event="onclick"/>
-                    </a4j:commandButton>
-                    <p></p>
-
-                    <h:outputText id="saveEcho" value="#{basicOptBean.saveEcho}"/>
-                  </rich:panel>
-                </h:form>
-
-              </rich:panel>
-            </a4j:outputPanel>
-          </a4j:form>
-        </a4j:region>
-      </h:panelGrid>
-    </ui:define>
-  </ui:composition>
-
-</html>

Modified: branches/JBossProfiler2/src/main/www/loadhotspots.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/loadhotspots.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/loadhotspots.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -5,79 +5,72 @@
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich">
-
-  <ui:composition template="/template/loadtemplate.xhtml">
-    <ui:define name="loadContent">
-      <rich:tabPanel id="classTabPanel" width="40%" headerAlignment="left">
+  
+  <ui:composition template="/template/analyzetemplate.xhtml">
+    <ui:define name="analyzeContent">
+      <h:outputText value="One snapshot #{loadSnapshotBean.snapshotToLoad} is profiled. Threshold is #{basicOptBean.threshold}"/>
+      <rich:tabPanel id="classTabPanel" width="800px" headerAlignment="left">
         <rich:tab label="hotspot" styleClass="cc">
           <h:form>
             <rich:datascroller align="left" for="hotspots" maxPages="20"/>
             <rich:spacer height="30"/>
-            <rich:dataTable width="483"
-                            id="hotspots"
-                            rows="12"
-                            columnClasses="wholecol"
-                            value="#{overviewBean.hotspots}"
-                            var="hsb"
-                            onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
-                            onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+            <rich:dataTable width="483" id="hotspots" rows="25" columnClasses="wholecol" value="#{overviewBean.hotspots}" var="hsb" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+              
               <rich:column id="Count" sortBy="#{hsb.count}">
                 <f:facet name="header"><h:outputText value="Count"/></f:facet>
                 <h:outputText value="#{hsb.count}"/>
               </rich:column>
+              
               <rich:column id="MostTimeMs" sortBy="#{hsb.totalTime}">
                 <f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
                 <h:outputText value="#{hsb.totalTime}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
+              
               <rich:column id="Avg" sortBy="#{hsb.totalTime/hsb.count}">
                 <f:facet name="header"><h:outputText value="Average"/></f:facet>
                 <h:outputText value="#{hsb.totalTime/hsb.count}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
+              
               <rich:column id="Percentage" sortBy="#{hsb.percent}">
                 <f:facet name="header"><h:outputText value="Percentage"/></f:facet>
                 <h:outputText value="#{hsb.percent}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
+              
               <rich:column id="Method" sortBy="#{hsb.prettyName}" width="250">
                 <f:facet name="header"><h:outputText value="Method"/></f:facet>
                 <h:outputText value="#{hsb.prettyName}"/>
               </rich:column>
             </rich:dataTable>
+            <h:outputText value="#{overviewBean.mosttimeUnderThreshCount} most time below threshold #{basicOptBean.threshold}"></h:outputText>
           </h:form>
           <br/>
         </rich:tab>
-
+	
         <rich:tab label="package" styleClass="cc">
           <h:form>
             <rich:datascroller align="left" for="hotspots" maxPages="20"/>
             <rich:spacer height="30"/>
-            <rich:dataTable width="483"
-                            id="hotspots"
-                            rows="20"
-                            columnClasses="wholecol"
-                            value="#{overviewBean.packages}"
-                            var="pgb"
-                            onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
-                            onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+            <rich:dataTable width="483" id="package" rows="20" columnClasses="wholecol" value="#{overviewBean.packages}" var="pgb" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
               <rich:column id="Percentage" sortBy="#{pgb.percent}">
                 <f:facet name="header"><h:outputText value="Percentage"/></f:facet>
                 <h:outputText value="#{pgb.percent}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+              
               <rich:column id="TotalTime" sortBy="#{pgb.totalTime}">
                 <f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
                 <h:outputText value="#{pgb.totalTime}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+              
               <rich:column id="Packagename" sortBy="#{pgb.prettyName}">
                 <f:facet name="header"><h:outputText value="Package Name"/></f:facet>
                 <h:outputText value="#{pgb.prettyName}">
@@ -85,113 +78,97 @@
                 </h:outputText>
               </rich:column>
             </rich:dataTable>
+            
+            <h:outputText value="#{overviewBean.packageUnderThreshCount} package below threshold #{basicOptBean.threshold}"></h:outputText>
           </h:form>
           <br/>
         </rich:tab>
-
+        
         <rich:tab label="class/method">
-
           <h:outputText value="Please click one class for detailed method info."/>
           <h:form>
             <rich:datascroller align="left" for="classes" maxPages="20"/>
             <rich:spacer height="30"/>
-            <rich:dataTable width="483"
-                            id="classes"
-                            rows="20"
-                            columnClasses="wholecol"
-                            value="#{classBean.classes}"
-                            var="clazzb"
-                            onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
-                            onRowMouseOut="this.style.backgroundColor='#FFFFFF'"
-                            rowKeyVar="rowClassVar">
+            <rich:dataTable width="483" id="classes" rows="20" columnClasses="wholecol" value="#{classBean.classes}" var="clazzb" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'" rowKeyVar="rowClassVar">
               <rich:column sortBy="#{clazzb.className}">
                 <f:facet name="header"><h:outputText value="Class Name"/></f:facet>
                 <h:outputText value="#{clazzb.className}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{clazzb.type}">
                 <f:facet name="header"><h:outputText value="Type"/></f:facet>
                 <h:outputText value="#{clazzb.type}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{clazzb.totalTime}">
                 <f:facet name="header"><h:outputText value="Total Time"/></f:facet>
                 <h:outputText value="#{clazzb.totalTime}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{clazzb.waitTime}">
                 <f:facet name="header"><h:outputText value="Wait Time"/></f:facet>
                 <h:outputText value="#{clazzb.waitTime}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{clazzb.allocCount}">
                 <f:facet name="header"><h:outputText value="Invocations"/></f:facet>
                 <h:outputText value="#{clazzb.allocCount}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
-              <a4j:support event="onRowClick"
-                           action="#{classBean.fireMethodsInfo}"
-                           reRender="methodsDataTable,classOutputText">
-                <a4j:actionparam name="selected" value="#{clazzb.className}" assignTo="#{classBean.selectedClass}"/>
+	      
+              <a4j:support event="onRowClick" action="#{classBean.fireMethodsInfo}" reRender="methodsDataTable,classOutputText">
+                <a4j:actionparam name="selected" value="#{clazzb.className}" assignTo="#{classBean.selectedClass}">
+                </a4j:actionparam>
               </a4j:support>
             </rich:dataTable>
           </h:form>
-
+          
           <br/>
           <p></p>
-
-          <h:outputText id="classOutputText"
-                        value="Class #{classBean.selectedClass} is chosen,please see the methods info below!"/>
-
+	  
+          <h:outputText id="classOutputText" value="Class #{classBean.selectedClass} is chosen,please see the
+                                                    methods info below!"/>
           <h:form>
-            <rich:datascroller align="left" for="classes" maxPages="20"/>
+            <rich:datascroller align="left" for="methodsDataTable" maxPages="20"/>
             <rich:spacer height="30"/>
-            <rich:dataTable width="483"
-                            id="methodsDataTable"
-                            rows="20"
-                            columnClasses="wholecol"
-                            value="#{methodBean.methods}"
-                            var="methodb"
-                            onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
-                            onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+            <rich:dataTable width="483" id="methodsDataTable" rows="20" columnClasses="wholecol" value="#{methodBean.methods}" var="methodb" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
               <rich:column sortBy="#{methodb.count}">
                 <f:facet name="header"><h:outputText value="Counts"/></f:facet>
                 <h:outputText value="#{methodb.count}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{methodb.totalTime}">
                 <f:facet name="header"><h:outputText value="Total Time"/></f:facet>
                 <h:outputText value="#{methodb.totalTime}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{methodb.CPercent}">
                 <f:facet name="header"><h:outputText value="Class Percent"/></f:facet>
                 <h:outputText value="#{methodb.CPercent}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{methodb.TPercent}">
                 <f:facet name="header"><h:outputText value="Total Percent"/></f:facet>
                 <h:outputText value="#{methodb.TPercent}">
                   <f:convertNumber maxFractionDigits="2"></f:convertNumber>
                 </h:outputText>
               </rich:column>
-
+	      
               <rich:column sortBy="#{methodb.prettyName}">
                 <f:facet name="header"><h:outputText value="Method Name"/></f:facet>
                 <h:outputText value="#{methodb.prettyName}">
@@ -199,10 +176,11 @@
                 </h:outputText>
               </rich:column>
             </rich:dataTable>
+            <h:outputText value="#{methodBean.methodUnderThreshCount} methods below threshold #{basicOptBean.threshold}"></h:outputText>
           </h:form>
         </rich:tab>
       </rich:tabPanel>
     </ui:define>
   </ui:composition>
-
-</html>
\ No newline at end of file
+  
+</html>

Modified: branches/JBossProfiler2/src/main/www/loadoverview.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/loadoverview.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/loadoverview.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -5,143 +5,156 @@
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich">
-
-  <ui:composition template="/template/loadtemplate.xhtml">
-    <ui:define name="loadContent">
+  
+  <ui:composition template="/template/analyzetemplate.xhtml">
+    <ui:define name="analyzeContent">
+      <h:outputText value="One snapshot #{loadSnapshotBean.snapshotToLoad} is profiled. Threshold is #{basicOptBean.threshold}. "/>
       <h:panelGrid border="0" columns="2" columnClasses="col" style="color: Black; background-color: WhiteSmoke; left: auto; clear: left; font-size: 12px; margin-top: auto; margin-bottom: auto; margin-right: auto; margin-left: auto; bottom: auto; right: auto; background-position: left left; top: auto; vertical-align: top; background-attachment: scroll; background-repeat: repeat">
-        <f:facet name="header"><h:outputText value="Overview"/></f:facet>
-        <rich:panel style="middlepanel">
-          <f:facet name="header"><h:outputText value="Hotspots"/></f:facet>
-          <rich:scrollableDataTable value="#{overviewBean.hotspots}"
-                                    var="hsb"
-                                    id="HotSpot"
-                                    rows="0"
-                                    style="middlepanel"
-                                    height="200px"
-                                    width="360px">
-            <rich:column id="Count" sortBy="#{hsb.count}">
-              <f:facet name="header"><h:outputText value="Count"/></f:facet>
-              <h:outputText value="#{hsb.count}"/>
-            </rich:column>
-            <rich:column id="MostTimeMs" sortBy="#{hsb.totalTime}">
-              <f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
-              <h:outputText value="#{hsb.totalTime}">
-                <f:convertNumber maxFractionDigits="2"/>
-              </h:outputText>
-            </rich:column>
-            <rich:column id="Avg" sortBy="#{hsb.totalTime/hsb.count}">
-              <f:facet name="header"><h:outputText value="Average"/></f:facet>
-              <h:outputText value="#{hsb.totalTime/hsb.count}">
-                <f:convertNumber maxFractionDigits="2"/>
-              </h:outputText>
-            </rich:column>
-            <rich:column id="Percentage" sortBy="#{hsb.percent}">
-              <f:facet name="header"><h:outputText value="Percentage"/></f:facet>
-              <h:outputText value="#{hsb.percent}">
-                <f:convertNumber maxFractionDigits="2"/>
-              </h:outputText>
-            </rich:column>
-            <rich:column id="Method" sortBy="#{hsb.prettyName}" width="250">
-              <f:facet name="header"><h:outputText value="Method"/></f:facet>
-              <h:outputText value="#{hsb.prettyName}"/>
-            </rich:column>
-          </rich:scrollableDataTable>
-        </rich:panel>
-
-        <rich:panel style="middlepanel">
-          <f:facet name="header">
-            <h:outputText value="Most Time"/>
-          </f:facet>
-          <rich:scrollableDataTable value="#{overviewBean.mostTime}"
-                                    var="mts"
-                                    id="MostTime"
-                                    rows="0"
-                                    style="middlescroll"
-                                    width="360px"
-                                    height="200px">
-            <rich:column id="Count">
-              <f:facet name="header"><h:outputText value="Count"/></f:facet>
-              <h:outputText value="#{mts.count}">
-                <f:convertNumber maxFractionDigits="2"></f:convertNumber>
-              </h:outputText>
-            </rich:column>
-            <rich:column id="MostTimeMs">
-              <f:facet name="header"><h:outputText value="Most Time(ms)"/></f:facet>
-              <h:outputText value="#{mts.totalTime}">
-                <f:convertNumber maxFractionDigits="2"></f:convertNumber>
-              </h:outputText>
-            </rich:column>
-            <rich:column id="Percentage">
-              <f:facet name="header"><h:outputText value="Percent"/></f:facet>
-              <h:outputText value="#{mts.percent}">
-                <f:convertNumber maxFractionDigits="2"></f:convertNumber>
-              </h:outputText>
-            </rich:column>
-            <rich:column id="Method" width="500">
-              <f:facet name="header"><h:outputText value="Method"/></f:facet>
-              <h:outputText value="#{mts.prettyName}"/>
-            </rich:column>
-          </rich:scrollableDataTable>
-        </rich:panel>
-
-        <rich:panel style="middlepanel">
-          <f:facet name="header"><h:outputText value="Classes"/></f:facet>
-          <rich:scrollableDataTable value="#{classBean.classes}"
-                                    var="classb"
-                                    id="Classes"
-                                    rows="0"
-                                    style="middlescroll"
-                                    height="200px"
-                                    width="360px">
-            <rich:column id="ClassCname">
-              <f:facet name="header"><h:outputText value="Class Name"/></f:facet>
-              <h:outputText value="#{classb.className}"/>
-            </rich:column>
-            <rich:column id="ClassCtype">
-              <f:facet name="header"><h:outputText value="Type"/></f:facet>
-              <h:outputText value="#{classb.type}"/>
-            </rich:column>
-            <rich:column id="ClassCms">
-              <f:facet name="header"><h:outputText value="Ms"/></f:facet>
-              <h:outputText value="#{classb.totalTime}"/>
-            </rich:column>
-          </rich:scrollableDataTable>
-        </rich:panel>
-
-        <rich:panel style="middlepanel">
-          <f:facet name="header">
-            <h:outputText value="Threads Info"/>
-          </f:facet>
-          <rich:scrollableDataTable value="#{overviewBean.threads}" var="ths" id="Overview" rows="0" sortOrder="#{threadsBean.millionSeconds}" style="middlescroll" height="200px" width="360px">
-            <rich:column id="Threads">
-              <f:facet name="header"><h:outputText value="Threads"/></f:facet>
-              <h:outputText value="#{ths.name}"/>
-            </rich:column>
-            <rich:column id="Ms">
-              <f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
-              <h:outputText value="#{ths.totalTime/1000000}">
-                <f:convertNumber maxFractionDigits="2"></f:convertNumber>
-              </h:outputText>
-            </rich:column>
-          </rich:scrollableDataTable>
-        </rich:panel>
-
-        <rich:panel style="middlepanel">
-          <f:facet name="header"><h:outputText value="Allocations"/></f:facet>
-            <rich:scrollableDataTable value="#{overviewBean.allocations}" var="allob" id="Allocations" rows="0" style="middlescroll" height="200px" width="360px">
-              <rich:column id="AlloMethodName" width="250">
-                <f:facet name="header"><h:outputText value="Class Name"/></f:facet>
-                <h:outputText value="#{allob.className}"/>
-              </rich:column>
-              <rich:column id="AlloTimes">
-                <f:facet name="header"><h:outputText value="Times"/></f:facet>
-                <h:outputText value="#{allob.count}"/>
-              </rich:column>
-            </rich:scrollableDataTable>
-        </rich:panel>
-
+	<f:facet name="header">
+	  <h:outputText value="Overview"/>		
+	</f:facet>
+	
+	<rich:panel style="middlepanel">
+	  <f:facet name="header">
+	    <h:outputText value="Hotspots"/>		
+	  </f:facet>
+	  <rich:scrollableDataTable value="#{overviewBean.hotspots}" var="hsb" id="HotSpot" rows="0" style="middlepanel" height="200px" width="360px">
+	    <rich:column id="Count" sortBy="#{hsb.count}">
+	      <f:facet name="header"><h:outputText value="Count"/></f:facet>
+	      <h:outputText value="#{hsb.count}"/>
+	    </rich:column>
+	    <rich:column id="MostTimeMs" sortBy="#{hsb.totalTime}">
+	      <f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
+	      <h:outputText value="#{hsb.totalTime}">
+		<f:convertNumber maxFractionDigits="2"></f:convertNumber>
+	      </h:outputText>
+	    </rich:column>
+	    <rich:column id="Avg" sortBy="#{hsb.totalTime/hsb.count}">
+	      <f:facet name="header"><h:outputText value="Average"/></f:facet>
+	      <h:outputText value="#{hsb.totalTime/hsb.count}">
+		<f:convertNumber maxFractionDigits="2"></f:convertNumber>
+	      </h:outputText>
+	    </rich:column>
+	    <rich:column id="Percentage" sortBy="#{hsb.percent}">
+	      <f:facet name="header"><h:outputText value="Percentage"/></f:facet>
+	      <h:outputText value="#{hsb.percent}">
+		<f:convertNumber maxFractionDigits="2"></f:convertNumber>
+	      </h:outputText>
+	    </rich:column>
+	    <rich:column id="Method" sortBy="#{hsb.prettyName}" width="250">
+	      <f:facet name="header"><h:outputText value="Method"/></f:facet>
+	      <h:outputText value="#{hsb.prettyName}"/>
+	    </rich:column>
+	  </rich:scrollableDataTable>
+	  <h:outputText value="#{overviewBean.hotspotsUnderThreshCount} methods below threshold #{basicOptBean.threshold}"></h:outputText>
+	</rich:panel>				
+        
+	<rich:panel style="middlepanel">
+	  <f:facet name="header">
+	    <h:outputText value="Most Time"/>		
+	  </f:facet>
+	  <rich:scrollableDataTable value="#{overviewBean.mostTime}" var="mts" id="MostTime" rows="0" style="middlescroll" width="360px" height="200px">
+	    <rich:column id="Count">
+	      <f:facet name="header"><h:outputText value="Count"/></f:facet>
+	      <h:outputText value="#{mts.count}">
+		<f:convertNumber maxFractionDigits="2"></f:convertNumber>
+	      </h:outputText>
+	    </rich:column>
+	    <rich:column id="MostTimeMs">
+	      <f:facet name="header"><h:outputText value="Most Time(ms)"/></f:facet>
+	      <h:outputText value="#{mts.totalTime}">
+		<f:convertNumber maxFractionDigits="2"></f:convertNumber>
+	      </h:outputText>
+	    </rich:column>
+	    <rich:column id="Percentage">
+	      <f:facet name="header"><h:outputText value="Percent"/></f:facet>
+	      <h:outputText value="#{mts.percent}">
+		<f:convertNumber maxFractionDigits="2"></f:convertNumber>
+	      </h:outputText>
+	    </rich:column>
+	    <rich:column id="Method" width="500">
+	      <f:facet name="header"><h:outputText value="Method"/></f:facet>
+	      <h:outputText value="#{mts.prettyName}"/>
+	    </rich:column>
+	  </rich:scrollableDataTable>
+	  <h:outputText value="#{overviewBean.mosttimeUnderThreshCount} most time below threshold #{basicOptBean.threshold}"></h:outputText>
+	</rich:panel>		
+	
+	<rich:panel style="middlepanel">
+	  <f:facet name="header">
+	    <h:outputText value="Classes"/>		
+	  </f:facet>
+	  <rich:scrollableDataTable value="#{classBean.classes}" var="classb" id="Classes" rows="0" style="middlescroll" height="200px" width="360px">
+	    <rich:column id="ClassCname">
+	      <f:facet name="header"><h:outputText value="Class Name"/></f:facet>
+	      <h:outputText value="#{classb.className}"/>
+	    </rich:column>
+	    <rich:column id="ClassCtype">
+	      <f:facet name="header"><h:outputText value="Type"/></f:facet>
+	      <h:outputText value="#{classb.type}"/>
+	    </rich:column>
+	    <rich:column id="ClassCms">
+	      <f:facet name="header"><h:outputText value="Ms"/></f:facet>
+	      <h:outputText value="#{classb.totalTime}"/>
+	    </rich:column>
+	  </rich:scrollableDataTable>
+	</rich:panel>
+	
+	<rich:panel style="middlepanel">
+	  <f:facet name="header">
+	    <h:outputText value="Threads Info"/>		
+	  </f:facet>
+	  <rich:scrollableDataTable value="#{overviewBean.threads}" var="ths" id="Overview" rows="0" sortOrder="#{threadsBean.millionSeconds}" style="middlescroll" height="200px" width="360px">
+	    <rich:column id="Threads">
+	      <f:facet name="header"><h:outputText value="Threads"/></f:facet>
+	      <h:outputText value="#{ths.name}"/>
+	    </rich:column>
+	    <rich:column id="Ms">
+	      <f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
+	      <h:outputText value="#{ths.totalTime/1000000}">
+		<f:convertNumber maxFractionDigits="2"></f:convertNumber>
+	      </h:outputText>
+	    </rich:column>
+	  </rich:scrollableDataTable>
+	</rich:panel>
+	
+	<rich:panel style="middlepanel">
+	  <f:facet name="header">
+	    <h:outputText value="Allocations"/>		
+	  </f:facet>
+	  <rich:scrollableDataTable value="#{overviewBean.allocations}" var="allob" id="Allocations" rows="0" style="middlescroll" height="200px" width="360px">
+	    <rich:column id="AlloMethodName" width="250">
+	      <f:facet name="header"><h:outputText value="Class Name"/></f:facet>
+	      <h:outputText value="#{allob.className}"/>
+	    </rich:column>
+	    <rich:column id="AlloTimes">
+	      <f:facet name="header"><h:outputText value="Times"/></f:facet>
+	      <h:outputText value="#{allob.count}"/>
+	    </rich:column>
+	  </rich:scrollableDataTable>
+	  <h:outputText value="                                                                                           "></h:outputText>
+	</rich:panel>
+	
+	<rich:panel style="middlepanel">
+	  <f:facet name="header">
+	    <h:outputText value="Wait Time"/>		
+	  </f:facet>
+	  <rich:scrollableDataTable value="#{overviewBean.classes}" var="wt" id="WaitTime" rows="0" style="middlescroll" height="200px" width="360px">
+	    <rich:column width="250">
+	      <f:facet name="header"><h:outputText value="Class Name"/></f:facet>
+	      <h:outputText value="#{wt.className}"/>
+	    </rich:column>
+	    <rich:column>
+	      <f:facet name="header"><h:outputText value="Wait Time"/></f:facet>
+	      <h:outputText value="#{wt.waitTime}"/>
+	    </rich:column>
+	  </rich:scrollableDataTable>
+	  <h:outputText value="#{overviewBean.waittimeUnderThreshCount} most time below threshold #{basicOptBean.threshold}"></h:outputText>
+	</rich:panel>
+	
       </h:panelGrid>
     </ui:define>
   </ui:composition>
+  
+</html>
 
-</html>
\ No newline at end of file

Modified: branches/JBossProfiler2/src/main/www/loadsnapshot.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/loadsnapshot.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/loadsnapshot.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -5,21 +5,25 @@
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich"
-      xmlns:richfaces="http://richfaces.ajax4jsf.org/rich"
       xmlns:ajax="https://ajax4jsf.dev.java.net/ajax">
-
-  <ui:composition template="/template/loadtemplate.xhtml">
-    <ui:define name="loadContent">
+  
+  <ui:composition template="/template/analyzetemplate.xhtml">
+    <ui:define name="analyzeContent">
       <h:outputText value="Please choose one snapshot *.jps file for analyzing."/>
       <p></p>
       <h:selectOneListbox value="#{loadSnapshotBean.snapshotToLoad}" style="height:300px;width:500px">
         <f:selectItems value="#{loadSnapshotBean.JPSs}" />
       </h:selectOneListbox>
       <p></p>
+      <h:outputText value="Input inital the total time threshold in million seconds.">
+      </h:outputText>
+      <p></p>
+      <p></p>
       <a4j:commandLink action="#{loadSnapshotBean.analyzeAction}" onclick="document.location.href='./loadoverview.xhtml'">
-        <h:outputText value="Analyze this snapshot" />
+        <h:outputText value="Analyze this snapshot" /> 
       </a4j:commandLink>
     </ui:define>
   </ui:composition>
+  
+</html>
 
-</html>

Modified: branches/JBossProfiler2/src/main/www/loadthreadhotspots.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/loadthreadhotspots.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/loadthreadhotspots.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,68 +1,64 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:a4j="http://richfaces.org/a4j"
-      xmlns:rich="http://richfaces.org/rich">
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:a4j="http://richfaces.org/a4j"
+	xmlns:rich="http://richfaces.org/rich">
 
-  <ui:composition template="/template/loadtemplate.xhtml">
-    <ui:define name="loadContent">
-      <h:form>
-        <h:panelGrid columns="2">
-          <h:outputText value="Thread Selection:" style="width:150px"/>
-          <h:selectOneMenu value="#{threadHotspotBean.selectItem}"
-                           style="width: 500px"
-                           valueChangeListener="#{threadHotspotBean.selectionChanged}"
-                           label="#{threadHotspotBean.selectItem}">
-            <a4j:support event="onchange" reRender="selectedOutput,callerTable"/>
-            <f:selectItems value="#{threadHotspotBean.allSelectItems}" />
-          </h:selectOneMenu>
-        </h:panelGrid>
+	<ui:composition template="/template/analyzetemplate.xhtml">
+		<ui:define name="analyzeContent">
+		<h:outputText value="One snapshot #{loadSnapshotBean.snapshotToLoad} is profiled. Threshold is #{basicOptBean.threshold}. "/>
+		<h:form>
+		
+		<h:panelGrid columns="2">
+		
+		<h:outputText value="Thread Selection:" style="width:150px"/>	
+		<h:selectOneMenu value="#{threadHotspotBean.selectItem}" style="width: 500px" valueChangeListener="#{threadHotspotBean.selectionChanged}"
+			lable="#{threadHotspotBean.selectItem}">
+			<a4j:support event="onchange" reRender="selectedOutput,callerTable">
+    		</a4j:support>
+    		<f:selectItems value="#{threadHotspotBean.allSelectItems}" />
+		</h:selectOneMenu>
+    	</h:panelGrid>
+    	
+    	<h:outputText id="selectedOutput" value="the selected thread is #{threadHotspotBean.selectItem}"/>
+    	</h:form>	
+    	
+		<rich:separator height="1" style="background-color: white"/>
+		<h:form>
+        <rich:scrollableDataTable id="callerTable" value="#{threadHotspotBean.subKeys}" style="middlescroll" var="key" width="800px" columnClasses="center" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+ 		 	<rich:column style="width:200px" sortBy="#{key}"> 
+            	<f:facet name="header"><h:outputText value="caller"/></f:facet>
+                <h:outputText value="#{key}"/>
+            </rich:column>
+            
+            <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].className}">
+            	<f:facet name="header"><h:outputText value="callee"/></f:facet>
+                <h:outputText value="#{threadHotspotBean.newMap[key].className}"/> 
+            </rich:column>
+            
+            <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].totalTime}">
+            	<f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
+                <h:outputText value="#{threadHotspotBean.newMap[key].totalTime}">
+                	<f:convertNumber maxFractionDigits="2"/>
+                </h:outputText> 
+            </rich:column>
+            
+            <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].totalTime/threadHotspotBean.newMap[key].count}">
+            	<f:facet name="header"><h:outputText value="Average Time(ms)"/></f:facet>
+                <h:outputText value="#{threadHotspotBean.newMap[key].totalTime/threadHotspotBean.newMap[key].count}">
+                	<f:convertNumber maxFractionDigits="2"/>
+                </h:outputText>
+            </rich:column>
+            
+            <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].count}">
+            	<f:facet name="header"><h:outputText value="Invocations"/></f:facet>
+                <h:outputText value="#{threadHotspotBean.newMap[key].count}"/> 
+            </rich:column>
 
-        <h:outputText id="selectedOutput" value="the selected thread is #{threadHotspotBean.selectItem}"/>
-      </h:form>
-
-      <rich:separator height="1" style="background-color: white"/>
-      <h:form>
-        <rich:dataTable id="callerTable"
-                        value="#{threadHotspotBean.subKeys}"
-                        var="key"
-                        width="300px"
-                        columnClasses="center" rows="25"
-                        onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
-                        onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
-          <rich:column style="width:200px" sortBy="#{key}">
-            <f:facet name="header"><h:outputText value="caller"/></f:facet>
-            <h:outputText value="#{key}"/>
-          </rich:column>
-
-          <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].className}">
-            <f:facet name="header"><h:outputText value="callee"/></f:facet>
-            <h:outputText value="#{threadHotspotBean.newMap[key].className}"/>
-          </rich:column>
-
-          <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].totalTime}">
-            <f:facet name="header"><h:outputText value="Total Time(ms)"/></f:facet>
-            <h:outputText value="#{threadHotspotBean.newMap[key].totalTime}">
-              <f:convertNumber maxFractionDigits="2"/>
-            </h:outputText>
-          </rich:column>
-
-          <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].totalTime/threadHotspotBean.newMap[key].count}">
-            <f:facet name="header"><h:outputText value="Average Time(ms)"/></f:facet>
-            <h:outputText value="#{threadHotspotBean.newMap[key].totalTime/threadHotspotBean.newMap[key].count}">
-              <f:convertNumber maxFractionDigits="2"/>
-            </h:outputText>
-          </rich:column>
-
-          <rich:column style="width:150px" sortBy="#{threadHotspotBean.newMap[key].count}">
-            <f:facet name="header"><h:outputText value="Invocations"/></f:facet>
-            <h:outputText value="#{threadHotspotBean.newMap[key].count}"/>
-          </rich:column>
-
-        </rich:dataTable>
-      </h:form>
-    </ui:define>
-  </ui:composition>
+        </rich:scrollableDataTable>  
+    	</h:form>
+	</ui:define>
+	</ui:composition>
 </html>
\ No newline at end of file

Modified: branches/JBossProfiler2/src/main/www/loadthreadtree.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/loadthreadtree.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/loadthreadtree.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -5,26 +5,19 @@
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich">
-
-  <ui:composition template="/template/loadtemplate.xhtml">
-    <ui:define name="loadContent">
+  
+  <ui:composition template="/template/analyzetemplate.xhtml">
+    <ui:define name="analyzeContent">
       <f:facet name="header">
-        <h:outputText value="Threads tree"/>            
+        <h:outputText value="Threads tree"/>		
       </f:facet>
-      
+      <h:outputText value="One snapshot #{loadSnapshotBean.snapshotToLoad} is profiled. Threshold is #{basicOptBean.threshold}."/>
       <rich:panel id="threadPanel">
+        
         <h:form>
           <rich:datascroller align="left" for="threads" maxPages="20"/>
           <rich:spacer height="30"/>
-          <rich:dataTable width="483"
-                          id="threads"
-                          rows="20"
-                          columnClasses="wholecol"
-                          value="#{treeThreadBean.allThreads}"
-                          var="threadInfoB" 
-                          onRowMouseOver="this.style.backgroundColor='#F1F1F1'" 
-                          onRowMouseOut="this.style.backgroundColor='#FFFFFF'" 
-                          rowKeyVar="rowClassVar">
+          <rich:dataTable width="483" id="threads" rows="20" columnClasses="wholecol" value="#{treeThreadBean.allThreads}" var="threadInfoB" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'" rowKeyVar="rowClassVar">
             <f:facet name="header">
               <rich:columnGroup>
                 <h:column>
@@ -44,7 +37,7 @@
                 </h:column>
               </rich:columnGroup>
             </f:facet>
-            
+	    
             <h:column>
               <h:outputText value="#{threadInfoB.id}"/>
             </h:column>
@@ -61,9 +54,7 @@
               <h:outputText value="#{threadInfoB.groups}"/>
             </h:column>
             
-            <a4j:support event="onRowClick" 
-                         action="#{treeThreadBean.fireSelectedThread}" 
-                         reRender="threadOutputText,threadTree">
+            <a4j:support event="onRowClick" action="#{treeThreadBean.fireSelectedThread}" reRender="threadOutputText,threadTree">
               <a4j:actionparam name="selected" value="#{threadInfoB.id}" assignTo="#{treeThreadBean.selectedThread}">
               </a4j:actionparam>
               <rich:toolTip direction="top-right" showDelay="500">
@@ -71,25 +62,26 @@
               </rich:toolTip>
             </a4j:support>
           </rich:dataTable>
-          
+	  
         </h:form>
-      </rich:panel>     
+      </rich:panel>	
       
-      <br/>     
+      <br/>	
       <h:outputText id="threadOutputText" value="Thread #{treeThreadBean.selectedThread} is chosen,please see the
-                                                 threads info below!"/> 
+                                                 threads info below!"/>	
       
-      <rich:panel>              
+      <rich:panel>		
         <h:form>    
-          <h:form>    
-            <rich:tree id="threadTree" style="width:300px" switchType="ajax" stateAdvisor="#{treeDemoStateAdvisor}">
-              <rich:recursiveTreeNodesAdaptor roots="#{treeFrameBean.srcRoots}" var="item" nodes="#{item.children}">
-              </rich:recursiveTreeNodesAdaptor>
-            </rich:tree>
-          </h:form>
-          
+          <rich:tree id="threadTree" style="width:300px" switchType="ajax" stateAdvisor="#{treeDemoStateAdvisor}">
+            <rich:recursiveTreeNodesAdaptor roots="#{treeThreadBean.srcRoots}" var="item" nodes="#{item.children}">
+              <rich:treeNode iconLeaf="/images/treeicon.gif" icon="/images/treeicon.gif" >
+                <img src="images/pbar/#{item.pbar}" alt="#{item.frameInfo.totalTime*100/item.alltime}%"/>&nbsp;
+                <h:outputText value="#{item}"/>
+              </rich:treeNode>
+            </rich:recursiveTreeNodesAdaptor>
+          </rich:tree>
         </h:form>
-      </rich:panel>     
+      </rich:panel>	
       
     </ui:define>
   </ui:composition>

Added: branches/JBossProfiler2/src/main/www/profilersnapshot.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/profilersnapshot.xhtml	                        (rev 0)
+++ branches/JBossProfiler2/src/main/www/profilersnapshot.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:a4j="http://richfaces.org/a4j"
+      xmlns:rich="http://richfaces.org/rich">
+  
+  <ui:composition template="/template/serveropttemplate.xhtml">
+    <ui:define name="optContent">
+      <a4j:region id="listSnapshotRegion">
+        <a4j:form  id="listSnapshotForm" ajaxSubmit="true" rendered="true"> 
+          <a4j:outputPanel id="listSnapshotPanel" layout="block">
+            <h:outputText value="All the snapshots are listed here"/>    
+            <h:form>
+              <rich:panel>
+                <rich:datascroller align="left" for="snapshotsTable" maxPages="20" reRender="sc2" id="sc1"/>
+                <rich:spacer height="30"/>
+                
+                <rich:dataTable id="snapshotsTable" rows="10" value="#{basicOptBean.snapshots}" var="snapshot" width="500px" columnClasses="center" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+                  <f:facet name="label"> 
+                    <h:outputText value="Snapshot start time --> stop time"/>
+                  </f:facet>
+                  
+                  <rich:column style="width:500px" sortBy="#{snapshot}" onclick="document.location.href='./listSnapshot.xhtml'"> 
+                    <h:outputText value="#{snapshot}"/>
+                    <rich:toolTip direction="top-right" showDelay="500">
+                      <span style="white-space:nowrap"> Click to choose one snapshot for save!<br/></span>
+                    </rich:toolTip>
+                  </rich:column>
+                  
+                  <a4j:support event="onRowClick" action="#{basicOptBean.selectSnapshotAction}" reRender="listSnapshotPanel,selectedOutput">
+                    <a4j:actionparam name="selected" value="#{snapshot}" assignTo="#{basicOptBean.selectSnapshot}">
+                    </a4j:actionparam>
+                  </a4j:support>
+                </rich:dataTable>
+              </rich:panel>
+	      
+              <rich:spacer height="30"/>
+              <rich:panel id="savePanel" rendered="#{basicOptBean.panelShows}">
+                <h:outputText id="selectedOutput" value="the selected snapshot is No.#{basicOptBean.selectSnapshot}"/>
+		
+                <p></p>
+                <h:outputText value="Input the snapshot name. If it's blank, the name based on time is generated."/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>
+        	
+                <h:inputText id="inputSaveName" value="#{basicOptBean.saveSnapshotName}"/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>			
+                <br/>
+		
+                <a4j:commandButton id="savebutton" value="Save" action="#{basicOptBean.selectSaveSnapshotAction}" reRender="inputSaveName,saveEcho">
+                  <rich:componentControl for="saveSnapshotPanel" attachTo="savebutton" operation="hide" event="onclick"/>
+                </a4j:commandButton>
+                <p>
+                </p>
+		
+                <h:outputText id="saveEcho" value="#{basicOptBean.saveEcho}"/>
+              </rich:panel>
+            </h:form>
+          </a4j:outputPanel>
+        </a4j:form>
+      </a4j:region>	
+    </ui:define>
+  </ui:composition>
+</html>

Added: branches/JBossProfiler2/src/main/www/profilerstatus.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/profilerstatus.xhtml	                        (rev 0)
+++ branches/JBossProfiler2/src/main/www/profilerstatus.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:a4j="http://richfaces.org/a4j"
+      xmlns:rich="http://richfaces.org/rich">
+  
+  <ui:composition template="/template/serveropttemplate.xhtml">
+    <ui:define name="optContent">
+      <rich:panel>
+        <a4j:region id="connectRegion">
+          <a4j:form id="connectForm" ajaxSubmit="true" rendered="true"> 
+            <a4j:outputPanel layout="block">
+              <f:facet name="controls">
+                <h:panelGroup>
+                  <h:graphicImage value="/images/modal/close.png" style="cursor:pointer" id="hidelink"/>
+                  <rich:componentControl for="connectPanel" attachTo="hidelink" operation="hide" event="onclick"/>
+                </h:panelGroup>
+              </f:facet>
+              <h:panelGroup>
+                <rich:panel>
+                  <f:facet name="header">
+                    <h:outputText value="Connection Configuration for Remote Java Application"/>
+                  </f:facet>
+                  <h:outputText value="host"/>
+                  <br/>
+                  <h:inputText id="inputhost" value="#{basicOptBean.host}" size="20">
+                    <a4j:support event="onkeyup" rendered="inputhost"/>
+                  </h:inputText>
+                  <br/>
+        	  
+                  <h:outputText value="protocol"/>
+                  <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                  <br/>
+		  
+                  <a4j:outputPanel id="protocolSelect" ajaxRendered="true">
+                    <h:selectOneMenu value="#{basicOptBean.protocol}" style="width: 200px" valueChangeListener="#{basicOptBean.protocolChanged}"
+                                     label="#{basicOptBean.protocol}">
+                      <a4j:support event="change" reRender="protocolSelect" />   
+                      <f:selectItems value="#{basicOptBean.protocols}" /> 			
+                    </h:selectOneMenu>
+                    <br/>
+		    
+                    <h:outputText value="port"/>
+                    <br/>
+                    <h:inputText id="portvalue" value="#{basicOptBean.port}" size="20">
+                      <f:validateLongRange minimum="1" maximum="65535"></f:validateLongRange>
+                    </h:inputText>
+                  </a4j:outputPanel>
+                  
+                  <br/>
+                  <h:outputText value="threshold"/>
+                  <br/>
+                  <h:inputText value="#{basicOptBean.threshold}" size="20">
+                    <f:validateDoubleRange maximum="100" minimum="0"></f:validateDoubleRange>
+                  </h:inputText>
+                  <br/>
+		  
+                  <h:outputText value="plugin.1"/>
+                  <br/>
+                  <h:inputText value="#{basicOptBean.plugin}" size="30">
+                    <f:validateLength maximum="100"/>
+                  </h:inputText>
+		  
+                  <br/>
+                  <br/>
+		  
+                  <a4j:commandButton id="connectbutton" value="connect" action="#{basicOptBean.connect}" onclick="this.disable=true">
+                    <rich:componentControl for="connectPanel" attachTo="connectbutton" operation="hide" event="onclick"/>
+                  </a4j:commandButton>
+		  
+                </rich:panel>
+              </h:panelGroup>
+            </a4j:outputPanel>
+          </a4j:form>
+        </a4j:region>
+      </rich:panel>
+      <p>
+      </p>
+      
+      <rich:panel>
+        <h:panelGrid columns="2" title="jboss-profiler.properties">
+          <h:outputText value="Operations" style="bg-color:"/>
+          <h:outputText value="Description"/>
+	  
+          <h:outputLink reRender="operationoutput">
+            Start Profiler
+            <a4j:support event="onclick" action="#{basicOptBean.clickStart}" reRender="operationoutput" />
+          </h:outputLink>
+          <h:outputText value="start profiler in the server."/>
+	  
+          <h:outputLink reRender="operationoutput">
+            Stop Profiler
+            <a4j:support event="onclick" action="#{basicOptBean.clickStop}" reRender="operationoutput" />
+          </h:outputLink>
+          <h:outputText value="Stop profiler in the server."/>
+	  
+          <h:outputLink reRender="operationoutput">
+            Enable Profiler
+            <a4j:support event="onclick" action="#{basicOptBean.clickEnable}" reRender="operationoutput" />
+          </h:outputLink>
+          <h:outputText value="Enable profiler in the server. "/>
+	  
+          <h:outputLink reRender="operationoutput">
+            Disable Profiler
+            <a4j:support event="onclick" action="#{basicOptBean.clickDisable}" reRender="operationoutput" />
+          </h:outputLink>
+          <h:outputText value="Disable profiler in the server."/>
+	  
+          <h:outputLink reRender="operationoutput">
+            Garbage Collection
+            <a4j:support event="onclick" action="#{basicOptBean.gc}" reRender="operationoutput" />
+          </h:outputLink>
+          <h:outputText value="Begins Garbage Collection in the server."/>
+        </h:panelGrid>
+        <p></p>
+        <h:outputText id="operationoutput" value="Operation: #{basicOptBean.lastestOpts}"></h:outputText>
+      </rich:panel>
+    </ui:define>
+  </ui:composition>
+  
+</html>

Deleted: branches/JBossProfiler2/src/main/www/removeclasspanel.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/removeclasspanel.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/removeclasspanel.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,51 +0,0 @@
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
-                xmlns:h="http://java.sun.com/jsf/html"
-                xmlns:f="http://java.sun.com/jsf/core"
-                xmlns:rich="http://richfaces.org/rich"
-                xmlns:a4j="http://richfaces.org/a4j"
-                xmlns:ui="http://java.sun.com/jsf/facelets">
-
-  <rich:modalPanel id="removeClassPanel" width="350" height="250" onhide="false">
-    <a4j:region id="removeClassAddRegion">
-      <a4j:form id="removeClassForm" ajaxSubmit="true" rendered="true">
-        <a4j:outputPanel layout="block">
-
-          <f:facet name="controls">
-            <h:panelGroup>
-              <h:graphicImage value="/images/modal/close.png" style="cursor:pointer" id="hidelink2"/>
-              <rich:componentControl for="removeClassPanel" attachTo="hidelink2" operation="hide" event="onclick"/>
-            </h:panelGroup>
-          </f:facet>
-          <h:panelGroup>
-            <rich:panel>
-              <f:facet name="header">
-                <h:outputText value="Remove Class to Intercept During Runtime"/>
-              </f:facet>
-
-              <h:outputText value="Class to remove (e.g. org.jboss.*)"/>
-              <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-              <br/>
-
-              <h:inputText value="#{basicOptBean.removeClass}"/>
-              <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-              <br/>
-              <br/>
-
-              <a4j:commandButton id="removebutton"
-                                 value="Remove"
-                                 action="#{basicOptBean.removeClassAction}"
-                                 onclick="this.disable=true">
-                <rich:componentControl for="removeClassPanel" attachTo="removebutton" operation="hide" event="onclick"/>
-              </a4j:commandButton>
-
-              <rich:spacer width="50" height="20" title="Here is a spacer..."/>
-              <a4j:commandButton id="closebutton2" value="close">
-                <rich:componentControl for="removeClassPanel" attachTo="closebutton2" operation="hide" event="onclick"/>
-              </a4j:commandButton>
-            </rich:panel>
-          </h:panelGroup>
-        </a4j:outputPanel>
-      </a4j:form>
-    </a4j:region>
-  </rich:modalPanel>
-</ui:composition>
\ No newline at end of file

Added: branches/JBossProfiler2/src/main/www/snapshotconfig.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/snapshotconfig.xhtml	                        (rev 0)
+++ branches/JBossProfiler2/src/main/www/snapshotconfig.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:a4j="http://richfaces.org/a4j"
+	  xmlns:rich="http://richfaces.org/rich">
+
+  <ui:composition template="/template/serveropttemplate.xhtml">
+    <ui:define name="optContent">
+      <a4j:region id="configSnapshotRegion">
+        <a4j:form id="addClassFrom" ajaxSubmit="true" rendered="true"> 
+          <a4j:outputPanel layout="block">
+            <f:facet name="controls">
+            </f:facet>
+            <h:panelGroup>
+              <rich:panel>
+                <f:facet name="header">
+                  <h:outputText value="Add Class to Intercept During Runtime"/>
+                </f:facet>
+                <h:outputText value="Class to add (e.g. org.jboss.*)"/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>
+                <h:inputText value="#{basicOptBean.addClass}"/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>
+		
+                <h:outputText value="Choose the visibility for above class"/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>
+		
+                <a4j:outputPanel layout="block" id="visibilitySelect">
+                  <h:selectOneMenu value="#{basicOptBean.visibility}" style="width: 200px" lable="#{basicOptBean.visibility}">
+                    <a4j:support event="onchange" reRender="port,protocolSelect">
+                    </a4j:support>
+                    <f:selectItems value="#{basicOptBean.visibilities}" />
+                  </h:selectOneMenu>
+                </a4j:outputPanel>
+                
+                <br/>
+		
+                <a4j:commandButton id="addButton1" value="add class" action="#{basicOptBean.addClassAction}" onclick="this.disable=true" reRender="interceptClassesList">
+                  <rich:componentControl for="addClassPanel" attachTo="addButton1" operation="hide" event="onclick"/>
+                </a4j:commandButton>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+		
+              </rich:panel>
+            </h:panelGroup>
+          </a4j:outputPanel>
+        </a4j:form>
+      </a4j:region>
+      
+      <a4j:region id="removeClassAddRegion">
+        <a4j:form id="removeClassForm" ajaxSubmit="true" rendered="true"> 
+          <a4j:outputPanel layout="block">
+	    
+            <f:facet name="controls">
+              <h:panelGroup>
+                <h:graphicImage value="/images/modal/close.png" style="cursor:pointer" id="hidelink2"/>
+                <rich:componentControl for="removeClassPanel" attachTo="hidelink2" operation="hide" event="onclick"/>
+              </h:panelGroup>
+            </f:facet>
+            <h:panelGroup>
+              <rich:panel>
+                <f:facet name="header">
+                  <h:outputText value="Remove Class to Intercept During Runtime"/>
+                </f:facet>
+        	
+                <h:outputText value="Class to remove (e.g. org.jboss.*)"/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>
+        	
+                <h:inputText value="#{basicOptBean.removeClass}"/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>			
+                <br/>
+		
+                <a4j:commandButton id="removebutton" value="Remove" action="#{basicOptBean.removeClassAction}" onclick="this.disable=true" reRender="interceptClassesList">
+                  <rich:componentControl for="removeClassPanel" attachTo="removebutton" operation="hide" event="onclick"/>
+                </a4j:commandButton>
+		
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+		
+              </rich:panel>
+            </h:panelGroup>
+          </a4j:outputPanel>
+        </a4j:form>
+      </a4j:region>
+      
+      <h:panelGroup>
+        <rich:panel>
+          <f:facet name="header">
+            <h:outputText value="All the Classes to be Intecepted During Runtime"/>
+          </f:facet>
+          
+          <rich:dataList id="interceptClassesList" value="#{basicOptBean.interceptClassList}" var="clazz" rows="10">
+            <h:outputText value="#{clazz}"/><br/>
+          </rich:dataList>
+          <p></p>
+	  
+          <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+        </rich:panel>
+      </h:panelGroup>
+      
+    </ui:define>
+  </ui:composition>
+</html>

Added: branches/JBossProfiler2/src/main/www/snapshotoperations.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/snapshotoperations.xhtml	                        (rev 0)
+++ branches/JBossProfiler2/src/main/www/snapshotoperations.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:a4j="http://richfaces.org/a4j"
+      xmlns:rich="http://richfaces.org/rich">
+  
+  <ui:composition template="/template/serveropttemplate.xhtml">
+    <ui:define name="optContent">
+      <h:form>
+        <h:commandLink action="${basicOptBean.takeSnapshot}"> Take Snapshot
+          <a4j:support event="onclick" reRender="listSnapshotRegion"></a4j:support>
+        </h:commandLink>
+        <p>
+        </p>
+        <h:commandLink action="${basicOptBean.clearSnapshot}">  Clear Snapshots
+          <a4j:support event="onclick" reRender="listSnapshotRegion"></a4j:support>
+        </h:commandLink>
+        <p></p>
+      </h:form>
+      <a4j:region id="listSnapshotRegion">
+        <a4j:form  id="listSnapshotForm" ajaxSubmit="true" rendered="true"> 
+          <a4j:outputPanel id="listSnapshotPanel" layout="block">
+            <h:outputText value="All the snapshots are listed here"/>    
+            <h:form>
+              <rich:panel>
+                <rich:datascroller align="left" for="snapshotsTable" maxPages="20" reRender="sc2" id="sc1"/>
+                <rich:spacer height="30"/>
+                <rich:dataTable id="snapshotsTable" rows="10" value="#{basicOptBean.snapshots}" var="snapshot" width="500px" columnClasses="center" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'">
+                  <f:facet name="label"> 
+                    <h:outputText value="Snapshot start time --> stop time"/>
+                  </f:facet>
+                  
+                  <rich:column style="width:500px" sortBy="#{snapshot}" onclick="document.location.href='./snapshotoperations.xhtml'"> 
+                    <h:outputText value="#{snapshot}"/>
+                    <rich:toolTip direction="top-right" showDelay="500">
+                      <span style="white-space:nowrap"> Click to choose one snapshot for save!<br/></span>
+                    </rich:toolTip>
+                  </rich:column>
+                  
+                  <a4j:support event="onRowClick" action="#{basicOptBean.selectSnapshotAction}" reRender="listSnapshotPanel,savePanel,selectedOutput">
+                    <a4j:actionparam name="selected" value="#{snapshot}" assignTo="#{basicOptBean.selectSnapshot}">
+                    </a4j:actionparam>
+                  </a4j:support>
+                </rich:dataTable>
+              </rich:panel>
+	      
+              <rich:spacer height="30"/>
+              <rich:panel id="savePanel" rendered="#{basicOptBean.panelShows}">
+                <h:outputText id="selectedOutput" value="the selected snapshot is No.#{basicOptBean.selectSnapshot}"/>
+                <p></p>
+                <h:outputText value="Input the snapshot name. If it's blank, the name based on time is generated."/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>
+                <h:inputText id="inputSaveName" value="#{basicOptBean.saveSnapshotName}"/>
+                <rich:spacer width="50" height="20" title="Here is a spacer..."/>
+                <br/>			
+                <br/>
+		
+                <a4j:commandButton id="savebutton" value="Save" action="#{basicOptBean.selectSaveSnapshotAction}" reRender="inputSaveName,saveEcho">
+                  <rich:componentControl for="saveSnapshotPanel" attachTo="savebutton" operation="hide" event="onclick"/>
+                </a4j:commandButton>
+                <p>
+                </p>
+                <h:outputText id="saveEcho" value="#{basicOptBean.saveEcho}"/>
+              </rich:panel>
+            </h:form>
+          </a4j:outputPanel>
+        </a4j:form>
+      </a4j:region>	
+    </ui:define>	
+  </ui:composition>
+</html>

Added: branches/JBossProfiler2/src/main/www/template/analyzetemplate.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/template/analyzetemplate.xhtml	                        (rev 0)
+++ branches/JBossProfiler2/src/main/www/template/analyzetemplate.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:a4j="http://richfaces.org/a4j"
+      xmlns:rich="http://richfaces.org/rich">
+  
+  <ui:composition template="/template/head.xhtml">
+    <ui:define name="mainContent">
+      
+      <h:panelGrid border="0" columns="2" columnClasses="wholecol" style="width: 150px">
+	<rich:panel style="background-color: AliceBlue; height: 915px; width: 150px; background-position: left center; padding-right: 1px; padding-left: 1px; padding-top: 1px; border-top-style: solid; margin-bottom: 1px; border-right-style: solid; padding-bottom: 1px; border-bottom-color: LightBlue; border-bottom-style: solid; margin-right: 1px; border-left-color: LightBlue; border-top-color: LightBlue; border-right-color: LightBlue; border-left-style: solid; margin-left: 1px; margin-top: 1px; font-size:32px" >
+	  <h:outputLabel value="Snapshot Analyzer"/>
+    	  <rich:panelMenu style="width:135px"  mode="ajax"
+        		  iconExpandedGroup="disc" iconCollapsedGroup="disc" 
+        		  iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right" 
+       			  iconCollapsedTopGroup="chevronDown" iconCollapsedTopPosition="right" >
+       	    <rich:panelMenuGroup label="Analyze One Snapshot" expanded="true">
+              <rich:panelMenuItem label="Select Snapshot" onclick="document.location.href='./loadsnapshot.xhtml'">
+                <f:param name="current" value="Server Config"/>
+              </rich:panelMenuItem>
+              <rich:panelMenuItem label="Snapshot Overview" onclick="document.location.href='./loadoverview.xhtml'">
+                <f:param name="current" value="Server Config"/>
+              </rich:panelMenuItem>
+              <rich:panelMenuItem label="Methods Hotspots" onclick="document.location.href='./loadhotspots.xhtml'">
+                <f:param name="current" value="Server Config"/>
+              </rich:panelMenuItem>
+              <rich:panelMenuItem label="Threads Tree" onclick="document.location.href='./loadthreadtree.xhtml'">
+                <f:param name="current" value="Server Config"/>
+              </rich:panelMenuItem>
+              <rich:panelMenuItem label="Threads Caller" onclick="document.location.href='./loadthreadhotspots.xhtml'">
+                <f:param name="current" value="Server Config"/>
+              </rich:panelMenuItem>
+            </rich:panelMenuGroup>
+            
+            <rich:panelMenuGroup label="Compare Two Snapshots" expanded="true">
+              <rich:panelMenuItem label="Select Snapshots" onclick="document.location.href='./comparesnapshots.xhtml'">
+                <f:param name="current" value="Profiler Status"/>
+              </rich:panelMenuItem>
+              <rich:panelMenuItem label="Comare Snapshots" onclick="document.location.href='./comparemethods.xhtml'">
+                <f:param name="current" value="Profiler Status"/>
+              </rich:panelMenuItem>
+            </rich:panelMenuGroup>
+	    
+	  </rich:panelMenu>
+	</rich:panel>
+	<rich:panel style="height:919px;width: 822px">
+	  <ui:insert name="analyzeContent"></ui:insert>
+	</rich:panel>
+      </h:panelGrid>
+    </ui:define>
+  </ui:composition>
+
+</html>

Deleted: branches/JBossProfiler2/src/main/www/template/comparetemplate.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/template/comparetemplate.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/template/comparetemplate.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:a4j="http://richfaces.org/a4j"
-      xmlns:rich="http://richfaces.org/rich">
-
-  <ui:composition template="/template/head.xhtml">
-    <ui:define name="mainContent">
-
-      <h:panelGrid border="0" columns="2" columnClasses="wholecol" style="width: 150px">
-        <rich:panel style="background-color: AliceBlue; height: 915px; width: 150px; background-position: left center; padding-right: 1px; padding-left: 1px; padding-top: 1px; border-top-style: solid; margin-bottom: 1px; border-right-style: solid; padding-bottom: 1px; border-bottom-color: LightBlue; border-bottom-style: solid; margin-right: 1px; border-left-color: LightBlue; border-top-color: LightBlue; border-right-color: LightBlue; border-left-style: solid; margin-left: 1px; margin-top: 1px; font-size:32px" >
-          <h:outputLabel value="Compare Operations"/>
-          <p>
-          </p>
-          <a href="comparemethods.xhtml">Methods Compare</a>
-          <p>
-          </p>
-        </rich:panel>
-        <rich:panel style="height:919px;width: 822px">
-          <ui:insert name="compareContent"/>
-        </rich:panel>
-      </h:panelGrid>
-    </ui:define>
-  </ui:composition>
-
-</html>

Modified: branches/JBossProfiler2/src/main/www/template/head.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/template/head.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/template/head.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -5,75 +5,36 @@
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
-  <title>Insert title here</title>
-</head>
-<body>
-
-  <style type="text/css">
-    .wholecol {
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
+    <title>JBoss Profiler 2</title>
+  </head>
+  <body>
+    
+    <style type="text/css">
+      .wholecol {
       padding:10px;
       padding: 0px 30px 0px 0px;
       vertical-align: top;
-    }
-  </style>
-
-<f:view>
-  <h:form>
-    <ui:include src="/addclasspanel.xhtml"></ui:include>
-    <ui:include src="/removeclasspanel.xhtml"></ui:include>
-    <rich:toolBar>
-      <rich:dropDownMenu id="dropDownMenu">
-        <f:facet name="label">
-          <h:panelGroup>
-            <h:outputText value="Operations for Server"/>
-          </h:panelGroup>
-        </f:facet>
-        <rich:menuItem id="addClassMenuItem" value="add classes" submitMode="none">
-          <rich:componentControl for="addClassPanel" attachTo="addClassMenuItem" operation="show" event="onclick"/>
-        </rich:menuItem>
-        <rich:menuItem id="removeClassMenuItem" value="remove classes" submitMode="none">
-          <rich:componentControl for="removeClassPanel" attachTo="removeClassMenuItem" operation="show" event="onclick"/>
-        </rich:menuItem>
-        <rich:menuSeparator/>
-
-        <rich:menuItem submitMode="ajax" value="startProfile" action="#{basicOptBean.clickStart}" reRender="optoutput"/>
-        <rich:menuItem submitMode="ajax" value="stopProfile" action="#{basicOptBean.clickStart}" reRender="optoutput"/>
-        <rich:menuItem submitMode="ajax" value="enableProfile" action="#{basicOptBean.clickEnable}" reRender="optoutput"/>
-        <rich:menuItem submitMode="ajax" value="disableProfile" action="#{basicOptBean.clickEnable}" reRender="optoutput"/>
-        <rich:menuSeparator/>
-
-        <rich:menuItem submitMode="ajax" value="gc" action="#{basicOptBean.gc}" reRender="optoutput"/>
-        <rich:menuSeparator/>
-
-        <rich:menuItem submitMode="ajax"
-                       value="runtime snapshots operations"
-                       onclick="document.location.href='./listsnapshot.xhtml'"
-                       reRender="optoutput"/>
-
-      </rich:dropDownMenu>
-      <rich:separator width="500" height="50"></rich:separator>
-
-      <rich:dropDownMenu>
-        <f:facet name="label">
-          <h:panelGroup>
-            <h:outputText value="Analyze Snapshots"/>
-          </h:panelGroup>
-        </f:facet>
-        <rich:menuItem submitMode="ajax"
-                       value="load one snapshot"
-                       reRender="optoutput"
-                       onclick="document.location.href='./loadsnapshot.xhtml'"/>
-        <rich:menuItem submitMode="ajax" value="compare snapshots" reRender="optoutput"
-                       onclick="document.location.href='./comparesnapshots.xhtml'"/>
-      </rich:dropDownMenu>
-    </rich:toolBar>
-    <h:outputText id="optoutput" value=" #{basicOptBean.lastestOpts}"></h:outputText>
-  </h:form>
-
-  <ui:insert name="mainContent">
-  </ui:insert>
-
-</f:view></body>
+      }
+    </style>
+    
+    
+    <f:view>
+      <h:form>
+	<ui:include src="/addclasspanel.xhtml"></ui:include>
+	<ui:include src="/removeclasspanel.xhtml"></ui:include>
+	<rich:toolBar>	
+	  <a href="profilerstatus.xhtml"> Operations</a>
+	  <rich:separator width="500" height="50"></rich:separator>
+          
+	  <a href="loadsnapshot.xhtml">  Analyze Snapshots</a>
+	</rich:toolBar>
+      </h:form>
+      
+      <ui:insert name="mainContent">
+      </ui:insert>
+      
+    </f:view>
+  </body>
 </html>

Deleted: branches/JBossProfiler2/src/main/www/template/loadtemplate.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/template/loadtemplate.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/template/loadtemplate.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,35 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:a4j="http://richfaces.org/a4j"
-      xmlns:rich="http://richfaces.org/rich">
-
-  <ui:composition template="/template/head.xhtml">
-    <ui:define name="mainContent">
-
-      <h:panelGrid border="0" columns="2" columnClasses="wholecol" style="width: 150px">
-        <rich:panel style="background-color: AliceBlue; height: 915px; width: 150px; background-position: left center; padding-right: 1px; padding-left: 1px; padding-top: 1px; border-top-style: solid; margin-bottom: 1px; border-right-style: solid; padding-bottom: 1px; border-bottom-color: LightBlue; border-bottom-style: solid; margin-right: 1px; border-left-color: LightBlue; border-top-color: LightBlue; border-right-color: LightBlue; border-left-style: solid; margin-left: 1px; margin-top: 1px; font-size:32px" >
-          <h:outputLabel value="View one Snapshot"/>
-          <p>
-          </p>
-          <a href="loadoverview.xhtml">Overview</a>
-          <p>
-          </p>
-          <a href="loadhotspots.xhtml">Methods Hot Spots</a>
-          <p>
-          </p>
-          <a href="loadthreadtree.xhtml">Threads Tree</a>
-          <p>
-          </p>
-          <a href="loadthreadhotspots.xhtml">Threads Caller</a>
-        </rich:panel>
-        <rich:panel style="height:919px;width: 822px">
-          <ui:insert name="loadContent"></ui:insert>
-        </rich:panel>
-      </h:panelGrid>
-    </ui:define>
-  </ui:composition>
-
-</html>

Added: branches/JBossProfiler2/src/main/www/template/serveropttemplate.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/template/serveropttemplate.xhtml	                        (rev 0)
+++ branches/JBossProfiler2/src/main/www/template/serveropttemplate.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:a4j="http://richfaces.org/a4j"
+      xmlns:rich="http://richfaces.org/rich">
+  
+  <ui:composition template="/template/head.xhtml">
+    <ui:define name="mainContent">
+      
+      <h:panelGrid border="0" columns="2" columnClasses="wholecol" style="width: 150px">
+	<rich:panel style="background-color: AliceBlue; height: 915px; width: 150px; background-position: left center; padding-right: 1px; padding-left: 1px; padding-top: 1px; border-top-style: solid; margin-bottom: 1px; border-right-style: solid; padding-bottom: 1px; border-bottom-color: LightBlue; border-bottom-style: solid; margin-right: 1px; border-left-color: LightBlue; border-top-color: LightBlue; border-right-color: LightBlue; border-left-style: solid; margin-left: 1px; margin-top: 1px; font-size:32px" >
+	  <h:outputLabel value="Operations on Agent"/>
+    	  <rich:panelMenu style="width:135px"  mode="ajax"
+        		  iconExpandedGroup="disc" iconCollapsedGroup="disc" 
+        		  iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right" 
+       			  iconCollapsedTopGroup="chevronDown" iconCollapsedTopPosition="right" >
+            
+            <rich:panelMenuGroup label="Operate Profiler Agent" expanded="true">
+              <rich:panelMenuItem label="Config and Agent Status" onclick="document.location.href='./profilerstatus.xhtml'">
+                <f:param name="current" value="Config and Agent Status"/>
+              </rich:panelMenuItem>
+            </rich:panelMenuGroup>
+            
+	    <rich:panelMenuGroup label="Operate Snapshots" expanded="true">
+	      <rich:panelMenuItem label="Snapshot Config" onclick="document.location.href='./snapshotconfig.xhtml'">
+		<f:param name="current" value="Add/remove Class"/>
+	      </rich:panelMenuItem>
+	      <rich:panelMenuItem label="Snapshot Operations" onclick="document.location.href='./snapshotoperations.xhtml'">
+		<f:param name="current" value="Take Snapshot"/>
+	      </rich:panelMenuItem>
+	    </rich:panelMenuGroup>
+	    
+	  </rich:panelMenu>
+	</rich:panel>
+	<rich:panel style="height:919px;width: 822px">
+	  <ui:insert name="optContent"></ui:insert>
+	</rich:panel>
+      </h:panelGrid>
+    </ui:define>
+  </ui:composition>
+  
+</html>

Deleted: branches/JBossProfiler2/src/main/www/template/template.xhtml
===================================================================
--- branches/JBossProfiler2/src/main/www/template/template.xhtml	2009-04-20 12:41:54 UTC (rev 523)
+++ branches/JBossProfiler2/src/main/www/template/template.xhtml	2009-04-26 15:55:43 UTC (rev 524)
@@ -1,48 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:jsp="http://java.sun.com/JSP/Page"
-      xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:h="http://java.sun.com/jsf/html"
-      xmlns:rich="http://richfaces.ajax4jsf.org/rich">
-
-<head>
-  <title>JBoss Profiler 2</title>
-  <meta name="description" content="The JBoss Profiler 2"/>
-  <meta name="keywords" content="jboss, profiler"/>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <meta http-equiv="Expires" content="-1" />
-  <link rel="stylesheet" type="text/css" href="/css/style.css" />
-</head>
-
-<f:view contentType="text/html">
-
-  <body>
-    <table>
-      <tr>
-        <td colspan="2">
-          <h1><h:outputText escape="false" value="#{messages['header']}" /></h1>
-        </td>
-      </tr>
-
-      <tr>
-        <td class="leftPanel"></td>
-
-        <td class="centerPanel">
-          <table width="100%">
-            <tr>
-              <td class="dataContent">
-                <f:subview id="content">
-                  <ui:insert name="centerContent"/>
-                </f:subview>
-              </td>
-            </tr>
-          </table>
-        </td>
-      </tr>
-    </table>
-  </body>
-</f:view>
-</html>




More information about the jboss-cvs-commits mailing list