Author: rmannibucau
Date: Thu Nov 24 12:58:43 2011
New Revision: 1205810

URL: http://svn.apache.org/viewvc?rev=1205810&view=rev
Log:
adding tomee-webapp-ng

Added:
    openejb/trunk/sandbox/tomee-webapp-ng/
    openejb/trunk/sandbox/tomee-webapp-ng/pom.xml
    openejb/trunk/sandbox/tomee-webapp-ng/src/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/css/
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/css/bootstrap.css
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/images/
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/images/mock.png 
  (with props)
    openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/js/
    
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/js/widgets.js
    openejb/trunk/sandbox/tomee-webapp-ng/src/test/
    openejb/trunk/sandbox/tomee-webapp-ng/src/test/java/

Added: openejb/trunk/sandbox/tomee-webapp-ng/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/pom.xml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/pom.xml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/pom.xml Thu Nov 24 12:58:43 2011
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>tomee-webapp-ng</groupId>
+  <artifactId>tomee-webapp-ng</artifactId>
+  <version>1.0.0-beta-2-SNAPSHOT</version>
+  <packaging>war</packaging>
+
+  <repositories>
+    <repository>
+      <id>primefaces</id>
+      <name>PrimeFaces repository</name>
+      <url>http://repository.primefaces.org/</url>
+    </repository>
+  </repositories>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.primefaces</groupId>
+      <artifactId>primefaces</artifactId>
+      <version>3.0.M4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.primefaces.themes</groupId>
+      <artifactId>rocket</artifactId>
+      <version>1.0.2</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>tomee-webapp</artifactId>
+      <version>4.0.0-beta-2-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina</artifactId>
+      <version>7.0.21</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <defaultGoal>package</defaultGoal>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-war-plugin</artifactId>
+        <version>2.1.1</version>
+        <configuration>
+          <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>com.googlecode.t7mp</groupId>
+        <artifactId>maven-t7-plugin</artifactId>
+        <version>0.9.7</version>
+        <configuration>
+          <tomcatHttpPort>1234</tomcatHttpPort>
+          <tomcatShutdownPort>13245</tomcatShutdownPort>
+          <tomcatVersion>7.0.21</tomcatVersion>
+          <webapps>
+            <webappArtifact>
+              <groupId>org.apache.openejb</groupId>
+              <artifactId>tomee-webapp</artifactId>
+              <version>4.0.0-beta-2-SNAPSHOT</version>
+              <contextPath>openejb</contextPath>
+            </webappArtifact>
+          </webapps>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,73 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.primefaces.model.DefaultTreeNode;
+import org.primefaces.model.TreeNode;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+import javax.naming.NamingException;
+import java.util.List;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbHelper")
+@ApplicationScoped
+public class EJBHelper {
+    public static final String EMPTY_NODE_TYPE = "empty";
+    public static final String EJB_NODE_TYPE = "ejb";
+    public static final String APPLICATION_NODE_TYPE = "application";
+    public static final String ROOT_NODE_TYPE = "root";
+
+    private static final ContainerSystem CONTAINER_SYSTEM = 
SystemInstance.get().getComponent(ContainerSystem.class);
+
+    public TreeNode getEJB() throws NamingException {
+        final TreeNode root = new DefaultTreeNode(ROOT_NODE_TYPE, "/", null);
+        for (AppContext appContext : CONTAINER_SYSTEM.getAppContexts()) {
+            final String appName = appContext.getId();
+            final TreeNode appNode = new 
DefaultTreeNode(APPLICATION_NODE_TYPE, appName, root);
+            final List<BeanContext> contexts = appContext.getBeanContexts();
+            if (!contexts.isEmpty()) {
+                for (BeanContext beanContext : appContext.getBeanContexts()) {
+                    if 
(beanContext.getBeanClass().equals(BeanContext.Comp.class)) {
+                        continue;
+                    }
+
+                    final EJBInfo info = new EJBInfo(appName, (String) 
beanContext.getDeploymentID(), beanContext.getBeanClass().getName());
+                    new DefaultTreeNode(EJB_NODE_TYPE, info, appNode);
+                }
+            } else {
+                new DefaultTreeNode(EMPTY_NODE_TYPE, "no ejb", appNode);
+            }
+        }
+        return root;
+    }
+
+    public static class EJBInfo {
+        private String app;
+        private String name;
+        private String classname;
+
+        public EJBInfo(final String app, final String name, final String 
classname) {
+            this.app = app;
+            this.name = name;
+            this.classname = classname;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getClassname() {
+            return classname;
+        }
+
+        public String getApp() {
+            return app;
+        }
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,81 @@
+package org.apache.tomee.webapp.jsf;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.tomee.webapp.jsf.JSFHelper.param;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.method;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbInvocationHelper")
+@SessionScoped
+public class EJBInvocationHelper implements Serializable {
+    @Inject @Named("invocation") @SessionScoped private Invocation invocation;
+    private List<ParameterInfo> methodParameters;
+
+    public List<ParameterInfo> getMethodParameters() {
+        if (methodParameters == null) {
+            final String app = param("app");
+            final String name = param("name");
+            final String rawId = param("methodId");
+
+            methodParameters = new ArrayList<ParameterInfo>();
+            if (app == null || name == null || rawId == null) {
+                return methodParameters;
+            }
+
+            invocation.setApp(app);
+            invocation.setName(name);
+            invocation.setId(Long.parseLong(rawId));
+
+            final Method mtd = method(invocation.getApp(), 
invocation.getName(), invocation.getId());
+            if (mtd != null) {
+                for (Class<?> parameter : mtd.getParameterTypes()) {
+                    methodParameters.add(new 
ParameterInfo(parameter.getName().replace("java.lang.", "")));
+                }
+            }
+        }
+        return methodParameters;
+    }
+
+    public String submit() {
+        invocation.getMethodParameters().clear();
+        for (ParameterInfo info : methodParameters) {
+            invocation.getMethodParameters().add(info.getValue());
+        }
+        methodParameters.clear();
+        methodParameters = null;
+        return "ejb-invoker?faces-redirect=true";
+    }
+
+
+
+    public static class ParameterInfo {
+        private String value;
+        private String type;
+
+        public ParameterInfo(String type) {
+            this.type = type;
+            this.value = null;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public String getValue() {
+            return value;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,86 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.InterfaceType;
+import org.apache.openejb.assembler.classic.JndiBuilder;
+import org.apache.xbean.recipe.RecipeHelper;
+
+import javax.enterprise.context.SessionScoped;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.baseClass;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.bean;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.method;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbInvokerHelper")
+public class EJBInvokerHelper {
+    @Inject @Named("invocation") @SessionScoped private Invocation invocation;
+
+    public String getInvoke() {
+        if (invocation.isReady()) {
+            FacesContext.getCurrentInstance().addMessage(null, new 
FacesMessage("invoke this EJB from EJB view, session was lost"));
+            return "can't do invokation";
+        }
+
+        Object o = result();
+        if (o == null) {
+            return null;
+        }
+        return o.toString();
+    }
+
+    private Object result() {
+        final BeanContext context = bean(invocation.getApp(), 
invocation.getName());
+        final Class<?> itf = baseClass(context);
+        final InterfaceType type = context.getInterfaceType(itf);
+        final String jndi = 
"openejb:Deployment/".concat(JndiBuilder.format(invocation.getName(), 
itf.getName(), type));
+        final Object bean;
+        try {
+            bean = new InitialContext().lookup(jndi);
+        } catch (NamingException e) {
+            return exceptionToStr(e);
+        }
+
+        final Method mtd = method(invocation.getApp(), invocation.getName(), 
invocation.getId());
+        try {
+            return mtd.invoke(bean, getArgs(invocation.getMethodParameters(), 
mtd.getParameterTypes()));
+        } catch (InvocationTargetException e) {
+            return exceptionToStr(e.getCause());
+        } catch (Exception e) {
+            return exceptionToStr(e);
+        }
+    }
+
+    private String exceptionToStr(Throwable e) {
+        StringWriter writer = new StringWriter();
+        e.printStackTrace(new PrintWriter(writer));
+        return writer.toString().replace("\n", "<br/>");
+    }
+
+    private Object[] getArgs(List<String> methodParameters, Class<?>[] types) {
+        Object[] obj = new Object[methodParameters.size()];
+        int i = 0;
+        for (String p : methodParameters) {
+            obj[i] = convert(p, types[i]);
+            i++;
+        }
+        return obj;
+    }
+
+    private Object convert(String p, Class<?> type) {
+        return RecipeHelper.convert(type, p, true);
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,54 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.inject.Named;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.tomee.webapp.jsf.JSFHelper.param;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.app;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.baseClass;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.methods;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbMethodsHelper")
+public class EJBMethodsHelper {
+    private List<OpenEJBHelper.MethodInfo> dataTable;
+
+    public void init() {
+        final String app = param("app");
+        final String name = param("name");
+
+        if (app == null || name == null) {
+            FacesContext.getCurrentInstance().addMessage(null, new 
FacesMessage("app and ejb name are mandatory"));
+        }
+
+        final AppContext appContext = app(app);
+        if (appContext != null) {
+            dataTable = new ArrayList<OpenEJBHelper.MethodInfo>();
+            for (BeanContext beanContext : appContext.getBeanContexts()) {
+                if (beanContext.getDeploymentID().equals(name)) {
+                    dataTable = methods(baseClass(beanContext));
+                }
+            }
+        }
+    }
+
+
+    public List<OpenEJBHelper.MethodInfo> getDataTable() {
+        if (dataTable == null) {
+            init();
+        }
+        return dataTable;
+    }
+
+    public void setDataTable(List<OpenEJBHelper.MethodInfo> dataTable) {
+        this.dataTable = dataTable;
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,51 @@
+package org.apache.tomee.webapp.jsf;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Named;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author rmannibucau
+ */
+@Named("invocation")
+@SessionScoped
+public class Invocation implements Serializable {
+    private String app;
+    private String name;
+    private long id;
+    private List<String> methodParameters = new ArrayList<String>();
+
+    public String getApp() {
+        return app;
+    }
+
+    public void setApp(String app) {
+        this.app = app;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public List<String> getMethodParameters() {
+        return methodParameters;
+    }
+
+    public boolean isReady() {
+        return app != null && name != null && id > 0;
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,16 @@
+package org.apache.tomee.webapp.jsf;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * @author rmannibucau
+ */
+public final class JSFHelper {
+    private JSFHelper() {
+        // no-op
+    }
+
+    public static String param(String name) {
+        return 
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(name);
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,141 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.ModuleContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.primefaces.model.DefaultTreeNode;
+import org.primefaces.model.TreeNode;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static 
org.apache.tomee.webapp.jsf.JndiHelper.JndiTreeHelper.runOnJndiTree;
+
+/**
+ * @author rmannibucau
+ */
+@Named
+@ApplicationScoped
+public class JndiHelper {
+    public static final String CONTEXT_NODE_TYPE = "context";
+    public static final String LEAF_NODE_TYPE = "leaf";
+    public static final String APPLICATION_NODE_TYPE = "application";
+    public static final String MODULE_NODE_TYPE = "module";
+    public static final String ROOT_NODE_TYPE = "root";
+
+    private static final ContainerSystem CONTAINER_SYSTEM = 
SystemInstance.get().getComponent(ContainerSystem.class);
+
+    public TreeNode getJndi() throws NamingException {
+        final TreeNode root = new DefaultTreeNode(ROOT_NODE_TYPE, "/", null);
+
+        for (AppContext appContext : CONTAINER_SYSTEM.getAppContexts()) {
+            final TreeNode appNode = new 
DefaultTreeNode(APPLICATION_NODE_TYPE, appContext.getId(), root);
+
+            // is there a simpler way?
+            // id = guarantee unity
+            final Map<String, ModuleContext> modules = new HashMap<String, 
ModuleContext>();
+            for (BeanContext beanContext : appContext.getBeanContexts()) {
+                if 
(!beanContext.getBeanClass().equals(BeanContext.Comp.class)) {
+                    final ModuleContext moduleContext = 
beanContext.getModuleContext();
+                    modules.put(moduleContext.getUniqueId(), moduleContext);
+                }
+            }
+
+            for (ModuleContext module : modules.values()) {
+                final TreeNode moduleNode = new 
DefaultTreeNode(MODULE_NODE_TYPE, appContext.getId(), appNode);
+                addSubContext(module.getModuleJndiContext(), "module", 
moduleNode);
+            }
+
+            addSubContext(appContext.getAppJndiContext(), "app", appNode);
+            addSubContext(appContext.getGlobalJndiContext(), "global", 
appNode);
+        }
+
+        return root;
+    }
+
+    private static void addSubContext(final Context context, final String 
subContext, final TreeNode parent) throws NamingException {
+        final TreeNode subNode = new DefaultTreeNode("context", subContext, 
parent);
+        runOnJndiTree((Context) context.lookup(subContext), subNode);
+    }
+
+    protected static class JndiTreeHelper {
+        private Context context;
+        private String path;
+
+        private JndiTreeHelper(Context ctx, String name) {
+            path = name;
+            context = ctx;
+        }
+
+        private TreeNode runOnTree(final TreeNode root) {
+            final NamingEnumeration<Binding> ne;
+            try {
+                ne = context.listBindings(path);
+            } catch (NamingException e) {
+                return root;
+            }
+
+            while (ne.hasMoreElements()) {
+                final Binding current;
+                try {
+                    current = ne.next();
+                } catch (NamingException nnfe) {
+                    continue;
+                }
+
+                final String name = current.getName();
+                final String fullName = path.concat("/").concat(name);
+                final Object obj = current.getObject();
+
+                if (obj != null && obj instanceof Context) {
+                    runOnJndiTree(context, new 
DefaultTreeNode(CONTEXT_NODE_TYPE, name, root), fullName);
+                } else {
+                    new DefaultTreeNode(LEAF_NODE_TYPE, new Leaf(name, 
value(context, fullName)), root);
+                }
+            }
+            return root;
+        }
+
+        private static Object value(Context context, String fullName) {
+            try {
+                return context.lookup(fullName);
+            } catch (NamingException nnfe) {
+                return null;
+            }
+        }
+
+        private static TreeNode runOnJndiTree(final Context ctx, final 
TreeNode root, final String prefix) {
+            return new JndiTreeHelper(ctx, prefix).runOnTree(root);
+        }
+
+        public static TreeNode runOnJndiTree(final Context ctx, final TreeNode 
root) {
+            return new JndiTreeHelper(ctx, "").runOnTree(root);
+        }
+
+        public static class Leaf {
+            private String name;
+            private Object value;
+
+            public Leaf(String name, Object value) {
+                this.name = name;
+                this.value = value;
+            }
+
+            public String getName() {
+                return name;
+            }
+
+            public Object getValue() {
+                return value;
+            }
+        }
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
 (added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
 Thu Nov 24 12:58:43 2011
@@ -0,0 +1,104 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author rmannibucau
+ */
+public final class OpenEJBHelper {
+    private static final ContainerSystem CONTAINER_SYSTEM = 
SystemInstance.get().getComponent(ContainerSystem.class);
+
+    public static AppContext app(final String name) {
+        for (AppContext appContext : CONTAINER_SYSTEM.getAppContexts()) {
+            final String appName = appContext.getId();
+            if (appName.equals(name)) {
+                return appContext;
+            }
+        }
+        return null;
+    }
+
+    public static BeanContext bean(final String app, final String name) {
+        AppContext appCtx = app(app);
+        if (appCtx == null) {
+            return null;
+        }
+        for (BeanContext ctx : appCtx.getBeanContexts()) {
+            if (ctx.getDeploymentID().equals(name)) {
+                return ctx;
+            }
+        }
+        return null;
+    }
+
+    public static Method method(final String app, final String name, final 
long id) {
+        final BeanContext bean = bean(app, name);
+        if (bean != null) {
+            final Collection<MethodInfo> methods = methods(baseClass(bean));
+            for (OpenEJBHelper.MethodInfo method : methods) {
+                if (method.getId() == id) {
+                    return method.getMethod();
+                }
+            }
+        }
+        return null;
+    }
+
+    public static Class<?> baseClass(BeanContext beanContext) {
+        if (beanContext.isLocalbean()) {
+            return beanContext.getBeanClass();
+        } else if (beanContext.getBusinessLocalInterfaces().size() > 0) {
+            return beanContext.getBusinessLocalInterface();
+        } else if (beanContext.getBusinessRemoteInterface() != null) {
+            return beanContext.getBusinessRemoteInterface();
+        }
+        return beanContext.getBeanClass();
+    }
+
+    public static List<MethodInfo> methods(Class<?> beanClass) {
+        final List<MethodInfo> methods = new ArrayList<MethodInfo>();
+        Class<?> current = beanClass;
+        do {
+            for (Method method : current.getDeclaredMethods()) {
+                methods.add(new MethodInfo(method.toGenericString()
+                    .replace(beanClass.getName().concat("."), "")
+                    .replace("java.lang.", ""),
+                    method.hashCode(), method));
+            }
+            current = current.getSuperclass();
+        } while (current != null && !current.equals(Object.class));
+        return methods;
+    }
+
+    public static class MethodInfo {
+        private String signature;
+        private long id;
+        private Method method;
+
+        public MethodInfo(String signature, long id, Method mtd) {
+            this.signature = signature;
+            this.id = id;
+            this.method = mtd;
+        }
+
+        public String getSignature() {
+            return signature;
+        }
+
+        public long getId() {
+            return id;
+        }
+
+        public Method getMethod() {
+            return method;
+        }
+    }
+}

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml 
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml 
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://java.sun.com/xml/ns/javaee";
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd";>
+</beans>

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties 
(added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties 
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2010 Joerg Bellmann <[email protected]>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# OpenEJB logs
+#
+log4j.rootLogger = INFO, stdout
+log4j.appender.stdout = org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout = org.apache.log4j.SimpleLayout
+

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml?rev=1205810&view=auto
==============================================================================
--- 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml 
(added)
+++ 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml 
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,44 @@
+<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:p="http://primefaces.org/ui";>
+  <h:head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <h:outputStylesheet library="css" name="bootstrap.css"/>
+    <h:outputScript library="js" name="widgets.js" target="head"/>
+
+    <title>Apache TomEE Admin | <ui:insert name="title"/></title>
+  </h:head>
+  <h:body>
+    <div class="topbar">
+      <div class="fill">
+        <div class="container">
+          <a class="brand" href="http://openejb.apache.org/";>Apache OpenEJB 
&amp;TomEE Website</a>
+          <ul class="nav">
+            <li><h:link value="Home" outcome="index"/></li>
+            <li><h:link value="Jndi Tree" outcome="jndi"/></li>
+            <li><h:link value="EJB" outcome="ejb"/></li>
+          </ul>
+        </div>
+      </div>
+    </div>
+
+    <div class="container">
+      <ui:insert name="content"/>
+
+      <footer>
+        <p>
+          Copyright &#169; 2011 The Apache Software Foundation, Licensed under 
the Apache License, Version 2.0.
+          Apache and the Apache feather logo are trademarks of The Apache 
Software Foundation.
+        </p>
+      </footer>
+    </div>
+
+    <p:dock>
+      <p:menuitem value="Website" icon="/resources/images/mock.png" 
url="http://openejb.apache.org/"/>
+      <p:menuitem value="Home" icon="/resources/images/mock.png" 
url="/index.xhtml"/>
+      <p:menuitem value="Jndi" icon="/resources/images/mock.png" 
url="/jndi.xhtml"/>
+      <p:menuitem value="EJB" icon="/resources/images/mock.png" 
url="/ejb.xhtml"/>
+  </p:dock>
+  </h:body>
+</html>
\ No newline at end of file

Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml 
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml Thu 
Nov 24 12:58:43 2011
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+     Licensed to the Apache Software Foundation (ASF) under one or more
+     contributor license agreements.  See the NOTICE file distributed with
+     this work for additional information regarding copyright ownership.
+     The ASF licenses this file to You under the Apache License, Version 2.0
+     (the "License"); you may not use this file except in compliance with
+     the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+  -->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
+         metadata-complete="false"
+         version="2.5">
+  <display-name>TomEE Webapp</display-name>
+
+  <context-param>
+    <param-name>primefaces.THEME</param-name>
+    <param-value>rocket</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+    <param-value>.xhtml</param-value>
+  </context-param>
+
+  <servlet>
+    <servlet-name>Faces Servlet</servlet-name>
+    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>Faces Servlet</servlet-name>
+    <url-pattern>*.xhtml</url-pattern>
+  </servlet-mapping>
+
+  <welcome-file-list>
+    <welcome-file>index.xhtml</welcome-file>
+  </welcome-file-list>
+</web-app>

Added: 
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml 
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml 
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,27 @@
+<ui:composition template="WEB-INF/template.xhtml"
+                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";>
+  <ui:define name="title">Method invocation configuration</ui:define>
+  <ui:define name="content">
+    <h:form>
+      <h:dataTable value="#{ejbInvocationHelper.methodParameters}" 
var="methodInfo">
+        <h:column>
+          <f:facet name="header">
+            <h:outputText value="Type" />
+          </f:facet>
+          <h:outputText value="#{methodInfo.type}" />
+        </h:column>
+        <h:column>
+          <f:facet name="header">
+            <h:outputText value="Value" />
+          </f:facet>
+          <h:inputText value="#{methodInfo.value}" />
+        </h:column>
+      </h:dataTable>
+      <h:messages />
+      <h:commandButton action="#{ejbInvocationHelper.submit}" value="Submit" />
+    </h:form>
+  </ui:define>
+</ui:composition>

Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml 
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml Thu 
Nov 24 12:58:43 2011
@@ -0,0 +1,9 @@
+<ui:composition template="WEB-INF/template.xhtml"
+                xmlns="http://www.w3.org/1999/xhtml";
+                xmlns:h="http://java.sun.com/jsf/html";
+                xmlns:ui="http://java.sun.com/jsf/facelets";>
+  <ui:define name="title">Method invocation</ui:define>
+  <ui:define name="content">
+    <h:outputText value="Result: #{ejbInvokerHelper.invoke}" />
+  </ui:define>
+</ui:composition>

Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml 
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml Thu 
Nov 24 12:58:43 2011
@@ -0,0 +1,20 @@
+<ui:composition template="WEB-INF/template.xhtml"
+                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";>
+  <ui:define name="title"><h:outputText value="#{param.name} 
Methods"/></ui:define>
+  <ui:define name="content">
+    <ul>
+      <ui:repeat var="method" value="#{ejbMethodsHelper.dataTable}">
+          <li>
+            <h:link outcome="ejb-invocation?faces-redirect=true" 
styleClass="method" value="#{method.signature}">
+              <f:param name="app" value="#{param.app}" />
+              <f:param name="name" value="#{param.name}" />
+              <f:param name="methodId" value="#{method.id}" />
+            </h:link>
+          </li>
+      </ui:repeat>
+    </ul>
+  </ui:define>
+</ui:composition>

Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml Thu Nov 24 
12:58:43 2011
@@ -0,0 +1,27 @@
+<ui:composition template="WEB-INF/template.xhtml"
+                xmlns="http://www.w3.org/1999/xhtml";
+                xmlns:h="http://java.sun.com/jsf/html";
+                xmlns:ui="http://java.sun.com/jsf/facelets";
+                xmlns:f="http://java.sun.com/jsf/core";
+                xmlns:p="http://primefaces.org/ui";>
+  <ui:define name="title"> EJB(s)</ui:define>
+  <ui:define name="content">
+    <p:tree value="#{ejbHelper.EJB}" var="node" dynamic="true" 
style="width:100%;">
+      <p:treeNode type="root">
+        <h:outputText value="#{node}" styleClass="root" />
+      </p:treeNode>
+      <p:treeNode type="empty">
+        <h:outputText value="#{node}" styleClass="empty" />
+      </p:treeNode>
+      <p:treeNode type="application">
+        <h:outputText value="#{node}" styleClass="application" />
+      </p:treeNode>
+      <p:treeNode type="ejb">
+        <h:link outcome="ejb-methods" value="#{node.name} (#{node.classname})">
+          <f:param name="app" value="#{node.app}"/>
+          <f:param name="name" value="#{node.name}"/>
+        </h:link>
+      </p:treeNode>
+    </p:tree>
+  </ui:define>
+</ui:composition>

Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml Thu Nov 
24 12:58:43 2011
@@ -0,0 +1,8 @@
+<ui:composition template="WEB-INF/template.xhtml"
+        xmlns="http://www.w3.org/1999/xhtml";
+        xmlns:ui="http://java.sun.com/jsf/facelets";>
+  <ui:define name="title">Home</ui:define>
+  <ui:define name="content">
+    This is the TomEE Admin webapp.
+  </ui:define>
+</ui:composition>

Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml Thu Nov 24 
12:58:43 2011
@@ -0,0 +1,26 @@
+<ui:composition template="WEB-INF/template.xhtml"
+                xmlns="http://www.w3.org/1999/xhtml";
+                xmlns:h="http://java.sun.com/jsf/html";
+                xmlns:ui="http://java.sun.com/jsf/facelets";
+                xmlns:p="http://primefaces.org/ui";>
+  <ui:define name="title"> Jndi Tree(s)</ui:define>
+  <ui:define name="content">
+    <p:tree value="#{jndiHelper.jndi}" var="node" dynamic="true" 
style="width:100%;">
+      <p:treeNode type="root">
+        <h:outputText value="#{node}" styleClass="root" />
+      </p:treeNode>
+      <p:treeNode type="application">
+        <h:outputText value="#{node}" styleClass="application" />
+      </p:treeNode>
+      <p:treeNode type="module">
+        <h:outputText value="#{node}" styleClass="module" />
+      </p:treeNode>
+      <p:treeNode type="context">
+        <h:outputText value="#{node}" styleClass="context" />
+      </p:treeNode>
+      <p:treeNode type="leaf">
+        <h:outputText value="#{node.name} > #{node.value}" styleClass="leaf" />
+      </p:treeNode>
+    </p:tree>
+  </ui:define>
+</ui:composition>


Reply via email to