User: andreas 
  Date: 00/09/28 22:56:20

  Added:       examples/ejb/src/com/dreambean/ejx/ejb
                        AssemblyDescriptor.java CMPField.java
                        ContainerTransaction.java EjbFileManager.java
                        EjbFileManagerFactory.java EjbJar.java
                        EjbJarViewer.java EjbReference.java
                        EnterpriseBean.java EnterpriseBeans.java
                        Entity.java EnvironmentEntry.java Method.java
                        MethodPermission.java ResourceReference.java
                        SecurityRole.java SecurityRoleReference.java
                        Session.java ejb.dfPackage
  Log:
  Move up to the examples/<plugin-name>/etc directory
  
  Revision  Changes    Path
  1.1                  
ejx/examples/ejb/src/com/dreambean/ejx/ejb/AssemblyDescriptor.java
  
  Index: AssemblyDescriptor.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.awt.BeanContextViewer;
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class AssemblyDescriptor
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
     
     Customizer c;
      /** @link aggregation */
  
     /*#SecurityRole lnkSecurityRole;*/
      /** @link aggregation */
  
     /*#ContainerTransaction lnkContainerTransaction;*/
      /** @link aggregation */
  
     /*#MethodPermission lnkMethodPermission;*/
      
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void createSecurityRole(String name)
        throws IOException, ClassNotFoundException
     {
        addSecurityRole().setName(name);
     }
  
     public SecurityRole addSecurityRole()
        throws IOException, ClassNotFoundException
     {
        return (SecurityRole)instantiateChild("com.dreambean.ejx.ejb.SecurityRole");
     }
  
     public void createMethodPermission(String description)
        throws IOException, ClassNotFoundException
     {
        addMethodPermission().setDescription(description);
     }
        
     public MethodPermission addMethodPermission()
        throws IOException, ClassNotFoundException
     {
        return 
(MethodPermission)instantiateChild("com.dreambean.ejx.ejb.MethodPermission");
     }
  
     public void createContainerTransaction(String description)
        throws IOException, ClassNotFoundException
     {
                addContainerTransaction().setDescription(description);
     }
        
     public ContainerTransaction addContainerTransaction()
        throws IOException, ClassNotFoundException
     {
        return 
(ContainerTransaction)instantiateChild("com.dreambean.ejx.ejb.ContainerTransaction");
     }
  
     public Iterator iterator()
        {
                return Util.sortByClass(super.iterator());
        }
        
     public Iterator getSecurityRoles()
     {
        return Util.getChildrenByClass(super.iterator(),SecurityRole.class);
     }
     
     public Iterator getMethodPermissions()
     {
        return Util.getChildrenByClass(super.iterator(),MethodPermission.class);
     }
  
     public Iterator getContainerTransactions()
     {
        return Util.getChildrenByClass(super.iterator(),ContainerTransaction.class);
     }
        
  /*   public Set getRoles(Method m)
     {
        // Find allowed roles for given method
        Set roles = new HashSet();
        Iterator methodPermissions = getMethodPermissions();
        while (methodPermissions.hasNext())
        {
           MethodPermission mp = (MethodPermission)methodPermissions.next();
           
           // Check if method is in this MP
           TreeModel methods = mp.getMethods();
           TreeNode root = methods.getRoot
           if (methods.getRoot
        }
     }
  */
  
     // BeanContextContainerProxy implementation ----------------------
     public Component getComponent()
     {
        if (c == null)
        {
           c = new BeanContextViewer();
           c.setObject(this);
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
        throws Exception
     {
        Element assemblyDescriptor = doc.createElement("assembly-descriptor");
        XMLManager.addOptionalAttribute(assemblyDescriptor,"id",id);
        
        for (Iterator enum = getSecurityRoles(); enum.hasNext();)
        {
           
assemblyDescriptor.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getMethodPermissions(); enum.hasNext();)
        {
           
assemblyDescriptor.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getContainerTransactions(); enum.hasNext();)
        {
           
assemblyDescriptor.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        return assemblyDescriptor;
     }
     
     public void importXml(Element elt)
        throws Exception
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("security-role"))
           {
              addSecurityRole().importXml((Element)n);
           } else if (name.equals("method-permission"))
           {
              addMethodPermission().importXml((Element)n);
           } else if (name.equals("container-transaction"))
           {
              addContainerTransaction().importXml((Element)n);
           }
        }
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/CMPField.java
  
  Index: CMPField.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.awt.GenericCustomizer;
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class CMPField
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String fieldName = "";
        
        Customizer c;
  
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
     
     public void setFieldName(String n) { fieldName = n; }
     public String getFieldName() { return fieldName; }
  
     public void removeField()
     {
        getBeanContext().remove(this);
     }
        
     // BeanContextChildComponentProxy implementation -----------------
     public java.awt.Component getComponent()
     {
        if (c == null)
        {
            c = new GenericCustomizer(false,this);
        }
        return (java.awt.Component)c;
     }
        
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element cmpfield = doc.createElement("cmp-field");
        XMLManager.addOptionalAttribute(cmpfield,"id",id);
        
        XMLManager.addOptionalElement(cmpfield,"description",getDescription());
        XMLManager.addElement(cmpfield,"field-name",getFieldName());
        
        return cmpfield;
     }
     
     public void importXml(Element elt)
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("field-name"))
           {
              setFieldName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } 
  
        }
     }
     
     public String toString()
     {
        return (fieldName.equals("")) ? "CMP Field           " : fieldName;
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  
ejx/examples/ejb/src/com/dreambean/ejx/ejb/ContainerTransaction.java
  
  Index: ContainerTransaction.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  import javax.swing.tree.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class ContainerTransaction
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String txAttribute = "NotSupported";
     TreeModel method;
        HashMap ejbs;
     
        DefaultMutableTreeNode root;
        BeanContext rootCtx;
     
     Customizer c;
     
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
     
     public void setTransactionAttribute(String ta) { txAttribute = ta; }
     public String getTransactionAttribute() { return txAttribute; }
  
     public void setMethods(TreeModel m) { method = m; }
     public TreeModel getMethods() { return method; }
        
  /*    public boolean appliesTo(java.lang.reflect.Method method)
        {
                
        }
  */
  
        public void removeContainerTransaction()
        {
                getBeanContext().remove(this);
        }
  
     public String toString()
     {
        return (description.equals("")) ? "Container transaction        " : 
description;
     }
        
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
        throws Exception
     {
        Element containertransaction = doc.createElement("container-transaction");
        XMLManager.addOptionalAttribute(containertransaction,"id",id);
        
        
XMLManager.addOptionalElement(containertransaction,"description",getDescription());
  
        // Methods
        getMethods(); // Make sure that tree is loaded, as it is lazyloaded. May 
become corrupt otherwise!!
        Iterator beanEnum = rootCtx.iterator();
        while(beanEnum.hasNext())
        {
                Method bean = (Method)beanEnum.next();
                if (bean.isSelected())
                {
                containertransaction.appendChild(bean.exportXml(doc));
                } else
                {
                      Iterator intfEnum = bean.iterator();
                      while(intfEnum.hasNext())
                        {
                                Method intf = (Method)intfEnum.next();
                                if (intf.isSelected())
                                {
                                containertransaction.appendChild(intf.exportXml(doc));
                                } else
                                {
                                      Iterator methodEnum = intf.iterator();
                                      while(methodEnum.hasNext())
                                        {
                                                Method method = 
(Method)methodEnum.next();
                                                if (method.isSelected())
                                                {
                                                
containertransaction.appendChild(method.exportXml(doc));
                                                } else
                                                {
                                                }
                                        }
                                }
                        }
                }
        }
        
        // Add transaction attribute
        
XMLManager.addElement(containertransaction,"trans-attribute",getTransactionAttribute());
        
        return containertransaction;
     }
     
     public void importXml(Element elt)
        throws Exception
     {
        id = elt.getAttribute("id");
  
        // Load methods
        try
        {
  /*         
           // Build tree from bean list
           Hashtable ejbs = new Hashtable();
           root = new DefaultMutableTreeNode(rootCtx = new Method("Root"));
           BeanContext ejbJar = getBeanContext().getBeanContext();
           Iterator enum = ejbJar.iterator();
           while (enum.hasNext())
           {
              Object obj = enum.next();
              if (obj instanceof EnterpriseBeans)
              {
                 Iterator beans = ((EnterpriseBeans)obj).iterator();
                 while (beans.hasNext())
                 {
                    obj = beans.next();
                    if (obj instanceof Entity)
                    {
                       addEntity((Entity)obj, ejbs);
                    } else if (obj instanceof Session)
                    {
                       addSession((Session)obj, ejbs);
                    }
                 }
              }
           }
           method = new DefaultTreeModel(root);
  */         
           // Set selected nodes from XML
           NodeList nl = elt.getChildNodes();
           for (int i = 0; i < nl.getLength(); i++)
           {
              Node n = nl.item(i);
              String name = n.getNodeName();
              
              if (name.equals("method"))
              {
                 // Get EJB name
                 Element en = 
(Element)((Element)n).getElementsByTagName("ejb-name").item(0);
                 String ejbName = XMLManager.getString(en);
                 
                 // Find Method
                 Method m = (Method)ejbs.get(ejbName);
                 if (m != null)
                 {
                    try
                    {
                       m.importXml((Element)n);
                    } catch (Exception ex)
                    {
                       ex.printStackTrace();
                    }
                 }
              }
           }
        } catch (Throwable ee)
        {
           ee.printStackTrace();
        }
        
        
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("trans-attribute"))
           {
              setTransactionAttribute(n.hasChildNodes() ? 
n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           }
        }
     }
     
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
     protected void initializeBeanContextResources()
     {
        // Get methods
        // Build tree from bean list
        ejbs = new HashMap();
        root = new DefaultMutableTreeNode(rootCtx = new Method("Root"));
        EjbJar ejbJar = (EjbJar)getBeanContext().getBeanContext();
        Iterator beans = ((EnterpriseBeans)ejbJar.getEnterpriseBeans()).iterator();
        while (beans.hasNext())
        {
           Object obj = beans.next();
           if (obj instanceof Entity)
           {
              addEntity((Entity)obj, ejbs);
           } else if (obj instanceof Session)
           {
              addSession((Session)obj, ejbs);
           }
        }
        method = new DefaultTreeModel(root);
     }
      
     // Private -------------------------------------------------------
        private void addEntity(Entity ent, HashMap ejbs)
        {
                DefaultMutableTreeNode node;
                DefaultMutableTreeNode remote;
                DefaultMutableTreeNode home;
                Method bean = new Method(ent.getEjbName());
                node = new DefaultMutableTreeNode(bean);
                Method beanHome = new Method(ent.getEjbName(),"Home");
                home = new DefaultMutableTreeNode(beanHome);
                bean.add(beanHome);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(ent.getHome());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(ent.getEjbName(),methods[i]);
                                home.add(new DefaultMutableTreeNode(beanMethod));
                                beanHome.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(home);
                Method beanRemote = new Method(ent.getEjbName(),"Remote");
                remote = new DefaultMutableTreeNode(beanRemote);
                bean.add(beanRemote);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(ent.getRemote());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(ent.getEjbName(),methods[i]);
                                remote.add(new DefaultMutableTreeNode(beanMethod));
                                beanRemote.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(remote);
                ejbs.put(ent.getEjbName(),bean);
                rootCtx.add(bean);
                root.add(node);
        }
  
        private void addSession(Session sess, HashMap ejbs)
        {
                DefaultMutableTreeNode node;
                DefaultMutableTreeNode remote;
                DefaultMutableTreeNode home;
                Method bean = new Method(sess.getEjbName());
                node = new DefaultMutableTreeNode(bean);
                Method beanHome = new Method(sess.getEjbName(),"Home");
                home = new DefaultMutableTreeNode(beanHome);
                bean.add(beanHome);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(sess.getHome());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(sess.getEjbName(),methods[i]);
                                home.add(new DefaultMutableTreeNode(beanMethod));
                                beanHome.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(home);
                Method beanRemote = new Method(sess.getEjbName(),"Remote");
                remote = new DefaultMutableTreeNode(beanRemote);
                bean.add(beanRemote);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(sess.getRemote());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(sess.getEjbName(),methods[i]);
                                remote.add(new DefaultMutableTreeNode(beanMethod));
                                beanRemote.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(remote);
                ejbs.put(sess.getEjbName(),bean);
                rootCtx.add(bean);
                root.add(node);
        }
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/EjbFileManager.java
  
  Index: EjbFileManager.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.awt.event.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.net.*;
  import java.util.*;
  import java.util.zip.*;
  import javax.swing.*;
  
  import org.w3c.dom.*;
  
  import com.dreambean.awt.*;
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  import com.dreambean.ejx.FileManager;
  import com.dreambean.ejx.FileManagerFactory;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class EjbFileManager
        extends BeanContextServicesSupport
        implements FileManager
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
        XMLManager xm;
     File file;
     Component comp;
     
     EjbJar ejbJar;
     
     EjbFileManagerFactory fact;
     
     ClassLoader cl;
      
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
     EjbFileManager(EjbFileManagerFactory f)
        {
                fact = f;
        }
        
     // Public --------------------------------------------------------
     public EjbJar getEjbJar()
        {
                return ejbJar;
        }
  
     public EjbJar load(URL file)
        throws Exception
     {
        // Create classloader
        {
           URL fileUrl = file;
           if (fileUrl.toString().endsWith("ejb-jar.xml"))
              fileUrl = new 
File(fileUrl.getFile()).getParentFile().getParentFile().toURL();
              
           cl = new URLClassLoader(new URL[] { fileUrl }, 
Thread.currentThread().getContextClassLoader());
        }
           
        Document doc;
        
        ejbJar = new EjbJar();
        add(ejbJar);
  
        // XML file
        if (file.getFile().endsWith(".xml"))
        {
           Reader in = new InputStreamReader(file.openStream());
           doc = xm.load(in);
           in.close();
        } else if (file.getFile().endsWith(".jar")) // JAR file
        {
           InputStream ejbXml = 
getClassLoader().getResourceAsStream("META-INF/ejb-jar.xml");
           if (ejbXml == null)
           {
              // We want to use this file, but it doesn't contain the XML file yet 
(i.e. it's a JAR without the ejb-jar.xml file)
              return ejbJar;
           }
           Reader in = new BufferedReader(new InputStreamReader(ejbXml));
           doc = xm.load(in);
           in.close();
        } else
        {
           // Load from directory
           InputStream ejbXml = 
getClassLoader().getResourceAsStream("META-INF/ejb-jar.xml");
           Reader in = new BufferedReader(new InputStreamReader(ejbXml));
           doc = xm.load(in);
           ejbXml.close();
        }
        
        ejbJar.importXml(doc.getDocumentElement());
        
        return ejbJar;
     }
     
     // FileManager implementation ------------------------------------
     public boolean isChanged()
        {
                return true;
        }
        
        public void createNew()
        {
                ejbJar = new EjbJar();
                add(ejbJar);
        }
        
     public void load(File file)
        throws Exception
     {
        setFile(file);
        
        // Copy to prevent locking by load if we want to save later on
        if (file.toString().endsWith(".jar"))
        {
           File tmp = File.createTempFile("ejbjar",".jar");
           tmp.deleteOnExit();
           FileInputStream fin = new FileInputStream(file);
           byte[] bytes = new byte[(int)file.length()];
           fin.read(bytes);
           FileOutputStream fout = new FileOutputStream(tmp);
           fout.write(bytes);
           fin.close();
           fout.close();
           file = tmp;
        }
        
        load(file.toURL());
     }
     
        public void save(File f)
                throws Exception
        {
        // Prepare XML document
                Document doc = xm.create();
        doc.appendChild(ejbJar.exportXml(doc));
  
                // Save to file
        if (f.toString().endsWith(".jar"))
        {
           // Save to existing file
           if (f.exists())
           {
              // Store XML
              ByteArrayOutputStream out = new ByteArrayOutputStream();
              Writer w = new OutputStreamWriter(out);
              xm.save(doc,w);
              w.close();
              byte[] arr = out.toByteArray();
              
              Util.insertFileIntoZip(f, "META-INF/ejb-jar.xml", arr);
           } else
           {
              ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(f));
              
              zipOut.putNextEntry(new ZipEntry("META-INF/ejb-jar.xml"));
              
              ByteArrayOutputStream out = new ByteArrayOutputStream();
              Writer w = new OutputStreamWriter(out);
              xm.save(doc,w);
              w.close();
              byte[] arr = out.toByteArray();
              zipOut.write(arr);
              zipOut.closeEntry();
              zipOut.close();
           }
           
           setFile(f);
        }
        else if (f.toString().endsWith(".xml"))
        {
           FileWriter out = new FileWriter(f);
           xm.save(doc,out);
           out.close();
           
           setFile(f);
        } else
                {
                        // Check extension and add if possible
                        String name = f.getName();
                        if (name.indexOf(".") == -1)
                        {
                                name += ".xml";
                                save(new File(f.getParent(),name));
                        } else
                        {
                                JOptionPane.showMessageDialog(null, "Unknown filetype. 
File has not been saved!", "Save", JOptionPane.ERROR_MESSAGE);
                        }
                }
        
        }
        
        public File getFile()
        {
                return file;
        }
  
        public void setFile(File f)
        {
                File old = file;
                file = f;
                firePropertyChange("File",old,file);
        }
        
        public FileManagerFactory getFactory() { return fact; }
        
        public Component getComponent()
        {
                if (comp == null)
                {
                        comp = ejbJar.getComponent();
                }
                return comp;
        }
     
     public ClassLoader getClassLoader()
     {
        return cl;
     }
  
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
        protected void initializeBeanContextResources()
        {
                try
                {
                        xm = 
(XMLManager)((BeanContextServices)getBeanContext()).getService(this,this,XMLManager.class,null,this);
                } catch (Exception e)
                {
                        e.printStackTrace();
                }
        }
        
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  
ejx/examples/ejb/src/com/dreambean/ejx/ejb/EjbFileManagerFactory.java
  
  Index: EjbFileManagerFactory.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.io.File;
  import javax.swing.filechooser.FileFilter;
  
  import com.dreambean.ejx.FileManager;
  import com.dreambean.ejx.FileManagerFactory;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class EjbFileManagerFactory
        extends FileFilter
        implements FileManagerFactory
  {
     // Constants -----------------------------------------------------
      
     // Static --------------------------------------------------------
  
     // Public --------------------------------------------------------
  
     // FileFilter implementation -------------------------------------
        public boolean accept(File f)
        {
                return (f.getName().endsWith("ejb-jar.xml") || 
f.getName().endsWith(".jar"))
                                        || f.isDirectory();
        }
        
        public String getDescription() { return toString(); }
  
     // FileManagerFactory implementation -----------------------------
     public FileManager createFileManager()
        {
                return new EjbFileManager(this);
        }
     
     public FileFilter getFileFilter()
        {
                return this;
        }
        
        public String toString()
        {
                return "EJB 1.1 XML";
        }
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/EjbJar.java
  
  Index: EjbJar.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class EjbJar
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     protected String id = "";
     
     protected String description = "";
     protected String displayName = "";
     protected String smallIcon = "";
     protected String largeIcon = "";
     protected String clientjar = "";
     
     protected EnterpriseBeans eb;
     protected AssemblyDescriptor ad;
     
     protected Customizer c;
     
     // Static --------------------------------------------------------
     
     // Constructors --------------------------------------------------
     public EjbJar()
     {
        createAssemblyDescriptor();
        createEnterpriseBeans();
     }
     
     // Public --------------------------------------------------------
     public String getDescription() { return description; }
     public void setDescription(String d) { description = d; }
  
     public String getDisplayName() { return displayName; }
     public void setDisplayName(String dn) { displayName = dn; }
  
     public String getSmallIcon() { return smallIcon; }
     public void setSmallIcon(String si) { smallIcon = si; }
  
     public String getLargeIcon() { return largeIcon; }
     public void setLargeIcon(String li) { largeIcon= li; }
  
     public String getClientJar() { return clientjar; }
     public void setClientJar(String cj) { clientjar = cj; }
     
     public EnterpriseBeans getEnterpriseBeans() { return eb; }
     public AssemblyDescriptor getAssemblyDescriptor() { return ad; }
  
        public Iterator iterator()
        {
                return Util.sortByClass(super.iterator());
        }
     
     // BeanContextChildComponentProxy implementation -----------------
     public java.awt.Component getComponent()
     {
        if (c == null)
        {
           c = new EjbJarViewer();
           c.setObject(this);
        }
                
        return (java.awt.Component)c;
     }
     
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
        throws Exception
     {
        Element ejbjar = doc.createElement("ejb-jar");
        XMLManager.addOptionalAttribute(ejbjar,"id",id);
        
        XMLManager.addOptionalElement(ejbjar,"description",getDescription());
        XMLManager.addOptionalElement(ejbjar,"display-name",getDisplayName());
        XMLManager.addOptionalElement(ejbjar,"small-icon",getSmallIcon());
        XMLManager.addOptionalElement(ejbjar,"large-icon",getLargeIcon());
        
        ejbjar.appendChild(eb.exportXml(doc));
        
        if (ad.size() > 0)
           ejbjar.appendChild(ad.exportXml(doc));
        
        XMLManager.addOptionalElement(ejbjar,"ejb-client-jar",getClientJar());
        
        return ejbjar;
     }
     
     public void importXml(Element elt)
        throws Exception
     {
        // id
        id = elt.getAttribute("id");
        
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("display-name"))
           {
              setDisplayName(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("small-icon"))
           {
              setSmallIcon(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("large-icon"))
           {
              setLargeIcon(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("ejb-client-jar"))
           {
              setClientJar(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("enterprise-beans"))
           {
              eb.importXml((Element)n);
           } else if (name.equals("assembly-descriptor"))
           {
              ad.importXml((Element)n);
           }
        }
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
     protected void createEnterpriseBeans()
     {
        eb = new EnterpriseBeans();
        add(eb);
     }
     
     protected void createAssemblyDescriptor()
     {
        ad = new AssemblyDescriptor();
        add(ad);
     }
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/EjbJarViewer.java
  
  Index: EjbJarViewer.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.beans.Customizer;
  import javax.swing.JPanel;
  import javax.swing.JTabbedPane;
  
  import com.dreambean.awt.GenericCustomizer;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class EjbJarViewer
     extends JTabbedPane
        implements Customizer
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     
     // Static --------------------------------------------------------
     
     // Constructors --------------------------------------------------
     
     // Customizer implementation  ------------------------------------
        public void setObject(Object obj)
        {
                EjbJar ejbJar = (EjbJar)obj;
                
                // Init UI
                addTab("EJB Jar", new GenericCustomizer(ejbJar));
                addTab("Enterprise beans", ejbJar.getEnterpriseBeans().getComponent());
                addTab("Assembly descriptor", 
ejbJar.getAssemblyDescriptor().getComponent());
        }
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/EjbReference.java
  
  Index: EjbReference.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class EjbReference
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable, 
PropertyChangeListener
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String name = "";
     String type = "Entity";
     String home = "";
     String remote = "";
     String link = "";
  
     Customizer c;
     
     PropertyChangeSupport ps = new PropertyChangeSupport(this);
     
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
     public EjbReference()
        {
                addPropertyChangeListener(this);
        }
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
  
     public void setName(String n) { String old = name; name = n; 
ps.firePropertyChange("Name",old,name);}
     public String getName() { return name; }
  
     public void setType(String t) { String old = type; type = t; 
ps.firePropertyChange("Type",old,type);}
     public String getType() { return type; }
  
     public void setHome(String h) { String old = home; home = h; 
ps.firePropertyChange("Home",old,home);}
     public String getHome() { return home; }
  
     public void setRemote(String r) { String old = remote; remote = r; 
ps.firePropertyChange("Remote",old,remote);}
     public String getRemote() { return remote; }
  
     public void setLink(String l) { String old = link; link = l; 
ps.firePropertyChange("Link",old,link);}
     public String getLink() { return link; }
  
     public void removeEjbReference()
     {
        getBeanContext().remove(this);
     }
        
     // PropertyChange ------------------------------------------------
        public void addPropertyChangeListener(PropertyChangeListener listener)
        {
                ps.addPropertyChangeListener(listener);
        }
        
        public void addPropertyChangeListener(String propertyName, 
PropertyChangeListener listener)
        {
                ps.addPropertyChangeListener(propertyName, listener);
        }
  
        public void removePropertyChangeListener(PropertyChangeListener listener)
        {
                ps.removePropertyChangeListener(listener);
        }
        
        public void removePropertyChangeListener(String propertyName, 
PropertyChangeListener listener)
        {
                ps.removePropertyChangeListener(propertyName, listener);
        }
  
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element ejbref = doc.createElement("ejb-ref");
                XMLManager.addOptionalAttribute(ejbref,"id",id);
  
        XMLManager.addOptionalElement(ejbref,"description",getDescription());
        XMLManager.addElement(ejbref,"ejb-ref-name",getName());
        XMLManager.addElement(ejbref,"ejb-ref-type",getType());
        XMLManager.addElement(ejbref,"home",getHome());
        XMLManager.addElement(ejbref,"remote",getRemote());
        XMLManager.addOptionalElement(ejbref,"ejb-link",getLink());
        
        return ejbref;
     }
     
     public void importXml(Element elt)
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("ejb-ref-name"))
           {
              setName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("ejb-ref-type"))
           {
              setType(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("home"))
           {
              setHome(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("remote"))
           {
              setRemote(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("ejb-link"))
           {
              setLink(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } 
        }
     }
     
     public String toString()
     {
        return (name.equals("")) ? "EJB Reference   " : name;
     }
      
        public void propertyChange(PropertyChangeEvent evt)
        {
                if (evt.getPropertyName().equals("Link"))
                {
           // Create link
           EnterpriseBeans eb = (EnterpriseBeans)getBeanContext().getBeanContext();
           
           try
           {
              EnterpriseBean bean = 
(EnterpriseBean)eb.getEjb((String)evt.getNewValue());
              if (bean instanceof Session)
                 setType("Session");
              else
                 setType("Entity");
              
              setHome(bean.getHome());
              setRemote(bean.getRemote());
              setName("ejb/"+evt.getNewValue());
           } catch (IllegalArgumentException e)
           {
              // No such bean
           }
          
                } else if (evt.getPropertyName().equals("Name"))
        {
           // Figure out which bean to link to
           String val = (String)evt.getNewValue();
           if (val.lastIndexOf("/") != -1)
              val = val.substring(val.lastIndexOf("/")+1);
              
           EnterpriseBeans eb = (EnterpriseBeans)getBeanContext().getBeanContext();
           
           try
           {
              EnterpriseBean bean = (EnterpriseBean)eb.getEjb(val);
              
              // Found bean with this name - set it as link
              setLink(val);
           } catch (IllegalArgumentException e)
           {
              // No such bean
           }
        }
  
        }
        
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/EnterpriseBean.java
  
  Index: EnterpriseBean.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public interface EnterpriseBean
     extends BeanContextChild
  {
     // Constants -----------------------------------------------------
      
     // Public --------------------------------------------------------
     public void setEjbName(String n);
     public String getEjbName();
  
     public void setHome(String h);
     public String getHome();
     
     public void setRemote(String r);
     public String getRemote();
  
     public void setEjbClass(String e);
     public String getEjbClass();
        
     public Iterator getResourceReferences();
     public Iterator getEjbReferences();
     public Iterator getSecurityRoleReferences();
     public Iterator getEnvironmentEntries();
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/EnterpriseBeans.java
  
  Index: EnterpriseBeans.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  import java.lang.reflect.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.awt.BeanContextViewer;
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class EnterpriseBeans
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     Customizer c;
        
      /** @link aggregation */
  
     /*#Entity lnkEntity;*/
      /** @link aggregation */
  
     /*#Session lnkSession;*/
      
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void createEntity(String name)
        throws IOException, ClassNotFoundException
     {
        addEntity().setEjbName(name);
     }
     public void createSession(String name)
        throws IOException, ClassNotFoundException
     {
        addSession().setEjbName(name);
     }
  
     public Entity addEntity()
        throws IOException, ClassNotFoundException
     {
                System.out.println("Create entity");
        return (Entity)instantiateChild("com.dreambean.ejx.ejb.Entity");
     }
  
     public Session addSession()
        throws IOException, ClassNotFoundException
     {
        return (Session)instantiateChild("com.dreambean.ejx.ejb.Session");
     }
     
     public EnterpriseBean getEjb(String name)
        {
                Iterator enum = super.iterator();
                while(enum.hasNext())
                {
                        EnterpriseBean ejb = (EnterpriseBean)enum.next();
                        if (ejb.getEjbName().equals(name))
                                return ejb;
                }
                throw new IllegalArgumentException("No such bean");
        }
  
     public Iterator iterator()
        {
                return Util.sortByClass(super.iterator());
        }
     
     public Iterator getSessions()
     {
        return Util.getChildrenByClass(super.iterator(), Session.class);
     }
     
     public Iterator getEntities()
     {
        return Util.getChildrenByClass(super.iterator(), Entity.class);
     }
     
     /**
      *   This is a wizard-style method that tries to find all CMP-fields in 
EntityBeans.
      *
      */
     public void findCMPFields(String idName)
     {
        Iterator entities = getEntities();
        while (entities.hasNext())
        {
           Entity entity = (Entity)entities.next();
           
           // Check if container-managed
           if (entity.getPersistenceType().equals("Bean"))
              continue;
           
           // Build comma-separated list of current fields prefixed with "," and 
suffixed with ","
           Iterator currentFields = entity.getCMPFields();
           String list = ",";
           while(currentFields.hasNext())
           {
              list += ((CMPField)currentFields.next()).getFieldName() + ",";
           }
           
           ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext()).getClassLoader();
           try
           {
              Class clazz = cl.loadClass(entity.getEjbClass());
              Field[] fields = clazz.getFields();
              for (int i = 0; i < fields.length; i++)
              {
                 String fieldName = fields[i].getName();
                 
                 // Check so that it doesn't exist yet - we don't want duplicates
                 if (list.indexOf(","+fieldName+",") == -1)
                    entity.createCMPField(fieldName);
                 
                 // Check for id-field
                 if (fieldName.equals(idName) && 
entity.getPrimaryKeyField().equals(""))
                 {
                    entity.setPrimaryKeyField(idName);
                    entity.setPrimaryKeyClass(fields[i].getType().getName());
                 }
              }
           } catch (Throwable e)
           {
              e.printStackTrace();
           }
           
        }
        
     }
     
     public void addEnvironmentEntry(String name, String type, String value)
        throws Exception
     {
        Iterator beans = iterator();
        while (beans.hasNext())
        {
           Object bean = beans.next();
           if (bean instanceof Entity)
           {
              Entity entity = (Entity)bean;
              EnvironmentEntry entry = entity.addEnvironmentEntry();
              entry.setName(name);
              entry.setType(type);
              entry.setValue(value);
           } else if (bean instanceof Session)
           {
              Session session = (Session)bean;
              EnvironmentEntry entry = session.addEnvironmentEntry();
              entry.setName(name);
              entry.setType(type);
              entry.setValue(value);
           }
        }
     }
     
     public void updateEnvironmentEntry(String name, String value)
        throws Exception
     {
        Iterator beans = iterator();
        while (beans.hasNext())
        {
           EnterpriseBean bean = (EnterpriseBean)beans.next();
           Iterator entries = bean.getEnvironmentEntries();
           while (entries.hasNext())
           {
              EnvironmentEntry entry = (EnvironmentEntry)entries.next();
              if (entry.getName().equals(name))
              {
                 entry.setValue(value);
                 break;
              }
           }
        }
     }
     
     // BeanContextContainerProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
            c = new BeanContextViewer();
                         c.setObject(this);
        }
                
        return (Component)c;
     }
     
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
        throws Exception
     {
        Element enterprisebeans = doc.createElement("enterprise-beans");
        XMLManager.addOptionalAttribute(enterprisebeans,"id",id);
        
        // Not necessary, but write beans in "type order" anyway
        for (Iterator enum = getSessions(); enum.hasNext();)
        {
           
enterprisebeans.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getEntities(); enum.hasNext();)
        {
           
enterprisebeans.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        return enterprisebeans;
     }
     
     public void importXml(Element elt)
        throws Exception
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("entity"))
           {
              addEntity().importXml((Element)n);
           } else if (name.equals("session"))
           {
              addSession().importXml((Element)n);
           }
        }
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/Entity.java
  
  Index: Entity.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.awt.GenericCustomizer;
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class Entity
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable, 
PropertyChangeListener, EnterpriseBean
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String displayName= "";
     String description = "";
     String smallIcon = "";
     String largeIcon = "";
     String ejbName = "";
     String home = "";
     String remote = "";
     String ejbClass = "";
     String persistenceType = "Bean";
     String primaryKeyField = "";
     String primaryKeyClass = "";
     String reentrant = "False";
  
     Customizer c;
     
      /** @link aggregation 
       * @clientCardinality 1
       * @supplierCardinality **/
  
     /*#CMPField lnkCMPField;*/
      /** @link aggregation */
  
     /*#ResourceReference lnkResourceReference;*/
      /** @link aggregation */
  
     /*#EjbReference lnkEjbReference;*/
      /** @link aggregation */
  
     /*#SecurityRoleReference lnkSecurityRoleReference;*/
      /** @link aggregation */
  
     /*#EnvironmentEntry lnkEnvironmentEntry;*/
     
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
     public Entity()
        {
                addPropertyChangeListener(this);
        }
      
     // Public --------------------------------------------------------
     public void setDisplayName(String d) { displayName = d; }
     public String getDisplayName() { return displayName; }
     
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
  
     public String getSmallIcon() { return smallIcon; }
     public void setSmallIcon(String si) { smallIcon = si; }
  
     public String getLargeIcon() { return largeIcon; }
     public void setLargeIcon(String li) { largeIcon= li; }
  
     public void setEjbName(String n) { String old = ejbName; ejbName = n; 
pcSupport.firePropertyChange("EjbName",old,ejbName); }
     public String getEjbName() { return ejbName; }
  
     public void setHome(String h) { String old = home; home = h; 
pcSupport.firePropertyChange("Home",old,home); }
     public String getHome() { return home; }
     
     public void setRemote(String r) { String old = remote; remote = r; 
pcSupport.firePropertyChange("Remote",old,remote); }
     public String getRemote() { return remote; }
  
     public void setEjbClass(String e) { String old = ejbClass; ejbClass = e; 
pcSupport.firePropertyChange("EjbClass",old,ejbClass);}
     public String getEjbClass() { return ejbClass; }
  
     public void setPersistenceType(String p) { persistenceType = p; }
     public String getPersistenceType() { return persistenceType; }
  
     public void setPrimaryKeyField(String f) { String old = primaryKeyField; 
primaryKeyField = f; 
pcSupport.firePropertyChange("PrimaryKeyField",old,primaryKeyField);}
     public String getPrimaryKeyField() { return primaryKeyField; }
     
     public void setPrimaryKeyClass(String p) { String old = primaryKeyClass; 
primaryKeyClass = p; 
pcSupport.firePropertyChange("PrimaryKeyClass",old,primaryKeyClass);}
     public String getPrimaryKeyClass() { return primaryKeyClass; }
     
     public void setReentrant(String r) { reentrant = r; }
     public String getReentrant() { return reentrant; }
     
     public void createEnvironmentEntry(String name)
        throws Exception
     {
        addEnvironmentEntry().setName(name);
     }
  
     public EnvironmentEntry addEnvironmentEntry()
        throws Exception
     {
        return 
(EnvironmentEntry)instantiateChild("com.dreambean.ejx.ejb.EnvironmentEntry");
     }
     
     public void createEjbReference(String name)
        throws Exception
     {
        addEjbReference().setName(name);
     }
        
     public EjbReference addEjbReference()
        throws Exception
     {
        return (EjbReference)instantiateChild("com.dreambean.ejx.ejb.EjbReference");
     }
     
     public void createResourceReference(String name, String type)
        throws Exception
     {
        ResourceReference ref = addResourceReference();
                ref.setName(name);
           ref.setType(type);
     }
        
     public ResourceReference addResourceReference()
        throws Exception
     {
        return 
(ResourceReference)instantiateChild("com.dreambean.ejx.ejb.ResourceReference");
     }
     
     public void createSecurityRoleReference(String name)
        throws Exception
     {
        addSecurityRoleReference().setName(name);
     }
        
     public SecurityRoleReference addSecurityRoleReference()
        throws Exception
     {
        return 
(SecurityRoleReference)instantiateChild("com.dreambean.ejx.ejb.SecurityRoleReference");
     }
     
     public void createCMPField(String name)
        throws Exception
     {
        addCMPField().setFieldName(name);
     }
  
     public CMPField addCMPField()
        throws Exception
     {
        return (CMPField)instantiateChild("com.dreambean.ejx.ejb.CMPField");
     }
  
     public Iterator iterator()
        {
                return Util.sortByClass(super.iterator());
        }
        
     public Iterator getCMPFields()
     {
        return Util.getChildrenByClass(super.iterator(),CMPField.class);
     }
     
     public Iterator getResourceReferences()
     {
        return Util.getChildrenByClass(super.iterator(),ResourceReference.class);
     }
     
     public Iterator getEjbReferences()
     {
        return Util.getChildrenByClass(super.iterator(),EjbReference.class);
     }
     
     public Iterator getSecurityRoleReferences()
     {
        return Util.getChildrenByClass(super.iterator(),SecurityRoleReference.class);
     }
     
     public Iterator getEnvironmentEntries()
     {
        return Util.getChildrenByClass(super.iterator(),EnvironmentEntry.class);
     }
        
     public void removeEntity()
     {
        getBeanContext().remove(this);
     }
        
     // PropertyChange ------------------------------------------------
        public void addPropertyChangeListener(PropertyChangeListener listener)
        {
                pcSupport.addPropertyChangeListener(listener);
        }
        
        public void removePropertyChangeListener(PropertyChangeListener listener)
        {
                pcSupport.removePropertyChangeListener(listener);
        }
        
     // BeanContextChildComponentProxy implementation -----------------
     public java.awt.Component getComponent()
     {
        if (c == null)
        {
            c = new GenericCustomizer(false,this);
        }
        return (java.awt.Component)c;
     }
     
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
        throws Exception
     {
        Element entity = doc.createElement("entity");
        XMLManager.addOptionalAttribute(entity,"id",id);
        
        XMLManager.addOptionalElement(entity,"description",getDescription());
        XMLManager.addOptionalElement(entity,"display-name",getDisplayName());
        XMLManager.addOptionalElement(entity,"small-icon",getSmallIcon());
        XMLManager.addOptionalElement(entity,"large-icon",getLargeIcon());
        XMLManager.addElement(entity,"ejb-name",getEjbName());
        XMLManager.addElement(entity,"home",getHome());
        XMLManager.addElement(entity,"remote",getRemote());
        XMLManager.addElement(entity,"ejb-class",getEjbClass());
        XMLManager.addElement(entity,"persistence-type",getPersistenceType());
        XMLManager.addElement(entity,"prim-key-class",getPrimaryKeyClass());
        XMLManager.addElement(entity,"reentrant",getReentrant());
        
        for (Iterator enum = getCMPFields(); enum.hasNext();)
        {
           entity.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        XMLManager.addOptionalElement(entity,"primkey-field",getPrimaryKeyField());
  
        for (Iterator enum = getEnvironmentEntries(); enum.hasNext();)
        {
           entity.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getEjbReferences(); enum.hasNext();)
        {
           entity.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getSecurityRoleReferences(); enum.hasNext();)
        {
           entity.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getResourceReferences(); enum.hasNext();)
        {
           entity.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        return entity;
     }
     
     public void importXml(Element elt)
        throws Exception
     {
        removePropertyChangeListener(this);
        
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("display-name"))
           {
              setDisplayName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : 
"");
           } else if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("small-icon"))
           {
              setSmallIcon(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("large-icon"))
           {
              setLargeIcon(n.hasChildNodes() ? XMLManager.getString(n) : "");
           }  else if (name.equals("ejb-name"))
           {
              setEjbName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("home"))
           {
              setHome(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("remote"))
           {
              setRemote(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("ejb-class"))
           {
              setEjbClass(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("persistence-type"))
           {
              setPersistenceType(n.hasChildNodes() ? n.getFirstChild().getNodeValue() 
: "");
           } else if (name.equals("prim-key-class"))
           {
              setPrimaryKeyClass(n.hasChildNodes() ? n.getFirstChild().getNodeValue() 
: "");
           } else if (name.equals("primkey-field"))
           {
              setPrimaryKeyField(n.hasChildNodes() ? n.getFirstChild().getNodeValue() 
: "");
           } else if (name.equals("reentrant"))
           {
              setReentrant(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("env-entry"))
           {
              addEnvironmentEntry().importXml((Element)n);
           } else if (name.equals("cmp-field"))
           {
              addCMPField().importXml((Element)n);
           } else if (name.equals("ejb-ref"))
           {
              addEjbReference().importXml((Element)n);
           } else if (name.equals("resource-ref"))
           {
              addResourceReference().importXml((Element)n);
           } else if (name.equals("security-role-ref"))
           {
              addSecurityRoleReference().importXml((Element)n);
           }
        }
        
        addPropertyChangeListener(this);
     }
     
     public String toString()
     {
        return (displayName.equals("")) ? (ejbName.equals("") ? "Entity           " : 
ejbName) : displayName;
     }
      
        public void propertyChange(PropertyChangeEvent evt)
        {
                // Try to be smart!
                if (evt.getPropertyName().equals("Remote"))
                {
           if (getHome().equals(""))
           {
              // Set home
              try
              {
                 ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                 Class clazz = cl.loadClass(getRemote()+"Home");
                 if (javax.ejb.EJBHome.class.isAssignableFrom(clazz))
                    setHome(getRemote()+"Home");
              } catch (Throwable e)
              {
                 // Didn't work..
              }
           }
           
           if (getEjbClass().equals(""))
           {
              // Set bean, EJB spec style
              try
              {
                 ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                 Class clazz = cl.loadClass(getRemote()+"Bean");
                 if (javax.ejb.EntityBean.class.isAssignableFrom(clazz))
                 {
                    setEjbClass(getRemote()+"Bean");
                    return;
                 }
              } catch (Throwable e)
              {
                 // Didn't work..
              }
     
              // Set bean, J2EE RI style
              try
              {
                 ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                 Class clazz = cl.loadClass(getRemote()+"EJB");
                 if (javax.ejb.EntityBean.class.isAssignableFrom(clazz))
                 {
                    setEjbClass(getRemote()+"EJB");
                    return;
                 }
              } catch (Throwable e)
              {
                 // Didn't work..
              }
              
              // Set bean, Rickard style :-)
              try
              {
                 // Example:
                 // Remote = com.mycompany.interfaces.Foo
                 // Bean   = com.mycompany.beans.FooBean
                 
                 ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                 String remoteName = 
getRemote().substring(getRemote().lastIndexOf(".")+1);
                 String packageName = getRemote().substring(0, 
getRemote().lastIndexOf("."));
                 packageName = getRemote().substring(0, packageName.lastIndexOf(".")) 
+ ".beans.";
                 String beanName = packageName+remoteName+"Bean";
                 Class clazz = cl.loadClass(beanName);
                 if (javax.ejb.EntityBean.class.isAssignableFrom(clazz))
                 {
                    setEjbClass(beanName);
                    return;
                 }
              } catch (Throwable e)
              {
                 // Didn't work..
              }
           }
                }
        }
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/EnvironmentEntry.java
  
  Index: EnvironmentEntry.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.awt.GenericCustomizer;
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class EnvironmentEntry
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable, 
VetoableChangeListener
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String name = "";
     String type = "java.lang.String";
     String value = "";
  
     Customizer c;
  
     PropertyChangeSupport ps = new PropertyChangeSupport(this);
     VetoableChangeSupport vs = new VetoableChangeSupport(this);
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
     public EnvironmentEntry()
        {
                addVetoableChangeListener(this);
        }
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
     
     public void setName(String n) { name = n; }
     public String getName() { return name; }
     
     public void setType(String t) { type = t; }
     public String getType() { return type; }
  
     public void setValue(String v) throws PropertyVetoException { 
vs.fireVetoableChange("Value",value,v); String old = value; value = v; 
ps.firePropertyChange("Value",old,value); }
     public String getValue() { return value; }
  
     public void removeEntry()
     {
        getBeanContext().remove(this);
     }
        
     // PropertyChange ------------------------------------------------
        public void addPropertyChangeListener(PropertyChangeListener listener)
        {
                ps.addPropertyChangeListener(listener);
        }
        
        public void addPropertyChangeListener(String propertyName, 
PropertyChangeListener listener)
        {
                ps.addPropertyChangeListener(propertyName, listener);
        }
  
        public void removePropertyChangeListener(PropertyChangeListener listener)
        {
                ps.removePropertyChangeListener(listener);
        }
        
        public void removePropertyChangeListener(String propertyName, 
PropertyChangeListener listener)
        {
                ps.removePropertyChangeListener(propertyName, listener);
        }
     
     // VetoableChange ------------------------------------------------
        public void addVetoableChangeListener(VetoableChangeListener listener)
        {
                vs.addVetoableChangeListener(listener);
        }
        
        public void addVetoableChangeListener(String propertyName, 
VetoableChangeListener listener)
        {
                vs.addVetoableChangeListener(propertyName, listener);
        }
  
        public void removeVetoableChangeListener(VetoableChangeListener listener)
        {
                vs.removeVetoableChangeListener(listener);
        }
        
        public void removeVetoableChangeListener(String propertyName, 
VetoableChangeListener listener)
        {
                vs.removeVetoableChangeListener(propertyName, listener);
        }
  
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element enventry= doc.createElement("env-entry");
        XMLManager.addOptionalAttribute(enventry,"id",id);
        
        XMLManager.addOptionalElement(enventry,"description",getDescription());
        XMLManager.addElement(enventry,"env-entry-name",getName());
        XMLManager.addElement(enventry,"env-entry-type",getType());
        XMLManager.addOptionalElement(enventry,"env-entry-value",getValue());
        
        return enventry;
     }
     
     public void importXml(Element elt)
        throws Exception
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("env-entry-name"))
           {
              setName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("env-entry-type"))
           {
              setType(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("env-entry-value"))
           {
              setValue(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           }
        }
     }
     
     public String toString()
     {
        return (name.equals("")) ? "Environment entry" : name;
     }
  
        public void vetoableChange(PropertyChangeEvent evt)
                throws PropertyVetoException
        {
                // Check format
                if (evt.getPropertyName().equals("Value"))
                {
                        if (type.equals("java.lang.Boolean"))
                        {
                                if (!new 
Boolean((String)evt.getNewValue()).toString().equals(evt.getNewValue()))
                                        throw new PropertyVetoException("Invalid 
format",evt);
                        } else if (type.equals("java.lang.Integer"))
                        {
                                try
                                {
                                        new Integer((String)evt.getNewValue());
                                } catch (NumberFormatException e)
                                {
                                        throw new PropertyVetoException("Invalid 
format",evt);
                                }
                        }
                }
        }
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/Method.java
  
  Index: Method.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  
  import com.dreambean.ejx.xml.XMLManager;
  import com.dreambean.ejx.xml.XmlExternalizable;
  import com.dreambean.ejx.Util;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class Method
        extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String ejbName = "";
     String methodInterface = "";
     String methodName = "";
     String[] params = null;
     
     boolean selected = false;
  
     Customizer c;
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
     public Method(String n, java.lang.reflect.Method m)
        {
                setEjbName(n);
                setMethodName(m.getName());
                
                if (javax.ejb.EJBObject.class.isAssignableFrom(m.getDeclaringClass()))
                        setMethodInterface("Remote");
                else
                        setMethodInterface("Home");
                        
                Class[] paramTypes = m.getParameterTypes();
                params = new String[paramTypes.length];
                for (int i = 0; i < params.length; i++)
                        params[i] = paramTypes[i].getName();
        }
            
     public Method(String n, String intf)
        {
                setEjbName(n);
                setMethodName("*");
                setMethodInterface(intf);
        }
  
     public Method(String n)
        {
                setEjbName(n);
                setMethodInterface("");
                setMethodName("*");
        }
        
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
  
     public void setEjbName(String n) { ejbName = n; }
     public String getEjbName() { return ejbName; }
     
     public void setMethodInterface(String intf) { methodInterface = intf; }
     public String getMethodInterface() { return methodInterface; }
     
     public void setParams (String[] p) { params = p; }
     public String[] getParams() { return params; }
     
     public void setMethodName(String n) { methodName = n; }
     public String getMethodName() { return methodName; }
     
     public void setSelected(boolean s) 
     { 
        selected = s; 
        
        if (selected)
        {
                Iterator c = iterator();
                while(c.hasNext())
                {
                        Method m = (Method)c.next();
                        m.setSelected(true);
                }
        } else
        {
                if (getBeanContext() != null)
                        ((Method)getBeanContext()).setSelected(false);
        }
        }
     public boolean isSelected() { return selected; }
  
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element method = doc.createElement("method");
        XMLManager.addOptionalAttribute(method,"id",id);
        
        XMLManager.addOptionalElement(method,"description",getDescription());
        XMLManager.addElement(method,"ejb-name",getEjbName());
        XMLManager.addOptionalElement(method,"method-intf",getMethodInterface());
        XMLManager.addElement(method,"method-name",getMethodName());
        
        if (params != null)
        {
                Element mP = doc.createElement("method-params");
                for (int i = 0; i < params.length; i++)
                        XMLManager.addElement(mP,"method-param",params[i]);
                method.appendChild(mP);
        }
        
        return method;
     }
     
     public void importXml(Element elt)
     {
        id = elt.getAttribute("id");
  
        Vector p = new Vector();
        String mn = "";
        String mi = "";
        
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("method-name"))
           {
                mn = XMLManager.getString(n);
           } else if (name.equals("method-intf"))
           {
                mi = XMLManager.getString(n);
           } else if (name.equals("method-params"))
                {
                      NodeList pl = n.getChildNodes();
                      for (int j = 0; j < pl.getLength(); j++)
                      {
                        p.addElement(XMLManager.getString(pl.item(j)));
                      }
                }
        }
        
        // Compare
        if (methodInterface.equals("")) // Bean
        {
                if (mi.equals(""))
                {
                        if (mn.equals("*")) // Select entire bean
                        {
                                setSelected(true);
                                return;
                        } else
                        {
                                // Select methods in Remote or Home
                        }
                } else  
                {
                        // Select methods in Remote and Home
                }
        } else
        { // Remote/Home or leaf method
                if (methodName.equals("*")) // Remote/Home
                {
                        if (mi.equals("")) // Select in both Remote and Home
                        {
                                if (mn.equals("*"))
                                {
                                        setSelected(true);
                                        return;
                                } else
                                {
                                        // Select method in this interface
                                }
                        } else if (mi.equals(methodInterface)) // Right XML
                        {
                                if (mn.equals("*"))
                                {
                                        setSelected(true);
                                        return;
                                } else
                                {
                                        // Select method in this interface
                                }
                        } else
                        {
                                return; // Wrong interface, do nothing
                        }
                } else // Leaf method
                {
                        if (mn.equals(methodName)) // Right method
                        {
                                if (p.size() == 0)
                                {
                                        // No parameters given, ok
                                        setSelected(true);
                                        return;
                                } else if (p.size() == params.length)
                                {
                                        for (int i = 0; i < params.length; i++)
                                        {
                                                if (!p.elementAt(i).equals(params[i]))
                                                        return; // Wrong parameter
                                        }
                                        setSelected(true); // Same method!
                                }
                        }
                                return; // Either way, we're done with this element
                }  
        }
        
        // Propagate to children (when in bean or interface)
        Iterator enum = iterator();
        while(enum.hasNext())
        {
                Method m = (Method)enum.next();
                m.importXml(elt);
        }
     }
     public String toString()
     {
        if (methodInterface.equals(""))
                return ejbName;
        else if (methodName.equals("*"))
                return methodInterface;
        else
                return methodName;
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/MethodPermission.java
  
  Index: MethodPermission.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.*;
  
  import javax.swing.*;
  import javax.swing.tree.*;
  import javax.swing.table.*;
  
  import com.dreambean.awt.*;
  import com.dreambean.ejx.xml.*;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class MethodPermission
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     TreeModel method;
        HashMap roleMap;
        HashMap ejbs;
        
        DefaultMutableTreeNode root;
     BeanContext rootCtx;
     
     Customizer c;
      /** @link aggregation */
  
     /*#PermissionRole lnkPermissionRole;*/
      /** @link aggregation */
  
     /*#Method lnkMethod;*/
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
     
     public void setMethods(TreeModel m) { method = m; }
     public TreeModel getMethods() { return method; }
     
  //   public void setRoles(Collection m) { roles = (DefaultTableModel)m; }
     public Collection getRoles() { return roleMap.values(); }
        
     public void removeMethodPermission()
     {
        getBeanContext().remove(this);
     }
     
     public String toString()
     {
        return (description.equals("")) ? "Method permission        " : description;
     }
        
     // PropertyChange ------------------------------------------------
     public void addPropertyChangeListener(PropertyChangeListener listener)
     {
        pcSupport.addPropertyChangeListener(listener);
     }
     
     public void removePropertyChangeListener(PropertyChangeListener listener)
     {
        pcSupport.removePropertyChangeListener(listener);
     }
        
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element methodpermission = doc.createElement("method-permission");
        XMLManager.addOptionalAttribute(methodpermission,"id",id);
        
        XMLManager.addOptionalElement(methodpermission,"description",getDescription());
        
        // Rolenames
                Iterator enum = roleMap.values().iterator();
                while (enum.hasNext())
        {
                        JCheckBox checkBox = (JCheckBox)enum.next();
                        
                if (checkBox.isSelected())
                XMLManager.addElement(methodpermission,"role-name",checkBox.getText());
        }
        
        // Methods
        Iterator beanEnum = rootCtx.iterator();
        while(beanEnum.hasNext())
        {
                Method bean = (Method)beanEnum.next();
                if (bean.isSelected())
                {
                methodpermission.appendChild(bean.exportXml(doc));
                } else
                {
                      Iterator intfEnum = bean.iterator();
                      while(intfEnum.hasNext())
                        {
                                Method intf = (Method)intfEnum.next();
                                if (intf.isSelected())
                                {
                                methodpermission.appendChild(intf.exportXml(doc));
                                } else
                                {
                                      Iterator methodEnum = intf.iterator();
                                      while(methodEnum.hasNext())
                                        {
                                                Method method = 
(Method)methodEnum.next();
                                                if (method.isSelected())
                                                {
                                                
methodpermission.appendChild(method.exportXml(doc));
                                                } else
                                                {
                                                }
                                        }
                                }
                        }
                }
        }
  
        return methodpermission;
     }
     
     public void importXml(Element elt)
     {
        id = elt.getAttribute("id");
  
        // Set selected methods from XML
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("method"))
           {
              // Get EJB name
              Element en = 
(Element)((Element)n).getElementsByTagName("ejb-name").item(0);
              String ejbName = XMLManager.getString(en);
              
              // Find Method
              Method m = (Method)ejbs.get(ejbName);
              if (m != null)
              {
                 try
                 {
                    m.importXml((Element)n);
                 } catch (Exception ex)
                 {
                    ex.printStackTrace();
                 }
              }
           }
        }
        
        // Set selected roles from XML
        nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("role-name"))
           {
              // Get role name
              String rn = XMLManager.getString(n);
              
              // Find role
              JCheckBox r = (JCheckBox)roleMap.get(rn);
              if (r != null)
              {
                 r.setSelected(true);
              }
           }
        }
                
                // Listen for additions/removal of roles
                getBeanContext().addBeanContextMembershipListener(new RoleSync());
        
        // Load rest of data
        nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } 
        }
     }
     
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
        protected void initializeBeanContextResources()
        {
                // Get methods
                // Build tree from bean list
                ejbs = new HashMap();
                root = new DefaultMutableTreeNode(rootCtx = new Method("Root"));
                EjbJar ejbJar = (EjbJar)getBeanContext().getBeanContext();
        Iterator beans = ((EnterpriseBeans)ejbJar.getEnterpriseBeans()).iterator();
        while (beans.hasNext())
        {
           Object obj = beans.next();
           if (obj instanceof Entity)
           {
              addEntity((Entity)obj, ejbs);
           } else if (obj instanceof Session)
           {
              addSession((Session)obj, ejbs);
           }
        }
                method = new DefaultTreeModel(root);
                
                // Get list of roles
                roleMap = new HashMap();
                BeanContext ad = getBeanContext();
                Iterator enum = ((AssemblyDescriptor)ad).getSecurityRoles();
                while (enum.hasNext())
                {
                        SecurityRole role = (SecurityRole)enum.next();
                   roleMap.put(role.getName(),new JCheckBox(role.getName()));
                }
                        
                getBeanContext().addBeanContextMembershipListener(new RoleSync());
        }
      
     // Private -------------------------------------------------------
        private void addEntity(Entity ent, HashMap ejbs)
        {
                DefaultMutableTreeNode node;
                DefaultMutableTreeNode remote;
                DefaultMutableTreeNode home;
                Method bean = new Method(ent.getEjbName());
                node = new DefaultMutableTreeNode(bean);
                Method beanHome = new Method(ent.getEjbName(),"Home");
                home = new DefaultMutableTreeNode(beanHome);
                bean.add(beanHome);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(ent.getHome());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(ent.getEjbName(),methods[i]);
                                home.add(new DefaultMutableTreeNode(beanMethod));
                                beanHome.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(home);
                Method beanRemote = new Method(ent.getEjbName(),"Remote");
                remote = new DefaultMutableTreeNode(beanRemote);
                bean.add(beanRemote);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(ent.getRemote());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(ent.getEjbName(),methods[i]);
                                remote.add(new DefaultMutableTreeNode(beanMethod));
                                beanRemote.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(remote);
                ejbs.put(ent.getEjbName(),bean);
                rootCtx.add(bean);
                root.add(node);
        }
  
        private void addSession(Session sess, HashMap ejbs)
        {
                DefaultMutableTreeNode node;
                DefaultMutableTreeNode remote;
                DefaultMutableTreeNode home;
                Method bean = new Method(sess.getEjbName());
                node = new DefaultMutableTreeNode(bean);
                Method beanHome = new Method(sess.getEjbName(),"Home");
                home = new DefaultMutableTreeNode(beanHome);
                bean.add(beanHome);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(sess.getHome());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(sess.getEjbName(),methods[i]);
                                home.add(new DefaultMutableTreeNode(beanMethod));
                                beanHome.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(home);
                Method beanRemote = new Method(sess.getEjbName(),"Remote");
                remote = new DefaultMutableTreeNode(beanRemote);
                bean.add(beanRemote);
                try
                {
                        ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                        Class clazz = cl.loadClass(sess.getRemote());
                        java.lang.reflect.Method[] methods = clazz.getMethods();
                        for (int i = 0; i < methods.length; i++)
                        {
                                Method beanMethod = new 
Method(sess.getEjbName(),methods[i]);
                                remote.add(new DefaultMutableTreeNode(beanMethod));
                                beanRemote.add(beanMethod);
                        }
                } catch (Exception e)
                {
  //                    System.err.println(e);
                }
                node.add(remote);
                ejbs.put(sess.getEjbName(),bean);
                rootCtx.add(bean);
                root.add(node);
        }
     // Inner classes -------------------------------------------------
     class RoleSync
        implements BeanContextMembershipListener
     {
        // BeanContextMembershipListener implementation ---------------
        public void childrenAdded(BeanContextMembershipEvent bcme)
        {
           Object[] c = bcme.toArray();
           for (int i = 0; i < c.length; i++)
           {
                Object obj = c[i];
              
                                if (obj instanceof SecurityRole)
                                {
                                        SecurityRole role = (SecurityRole)obj;
                                        Object oldValue = roleMap.values();
                                        roleMap.put(role.getName(), new 
JCheckBox(role.getName()));
                                        firePropertyChange("Roles", oldValue, 
getRoles());
                                }
           }
        }
        
        public void childrenRemoved(BeanContextMembershipEvent bcme)
        {
  /*         Object[] c = bcme.toArray();
           for (int i = 0; i < c.length; i++)
           {
              Enumeration children = node.children();   
              while (children.hasMoreElements())
              {
                 DefaultMutableTreeNode n = 
(DefaultMutableTreeNode)children.nextElement();
                 if (((ContextNode)n.getUserObject()).getUserObject() == c[i])
                 {
                    node.remove(n);
                    break;
                 }
              }
           }
           ((DefaultTreeModel)getModel()).reload(node);
  */                    
        }
     }
  }
  
  
  
  1.1                  
ejx/examples/ejb/src/com/dreambean/ejx/ejb/ResourceReference.java
  
  Index: ResourceReference.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.*;
  
  import com.dreambean.awt.*;
  import com.dreambean.ejx.xml.*;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class ResourceReference
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String name = "";
     String type = "";
     String auth = "Container";
  
     Customizer c;
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
  
     public void setName(String n) { name = n; }
     public String getName() { return name; }
  
     public void setType(String t) { type = t; }
     public String getType() { return type; }
  
     public void setAuthentication(String a) { auth = a; }
     public String getAuthentication() { return auth; }
  
     public void removeResourceReference()
     {
        getBeanContext().remove(this);
     }
        
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element resref = doc.createElement("resource-ref");
        XMLManager.addOptionalAttribute(resref,"id",id);
        
        XMLManager.addOptionalElement(resref,"description",getDescription());
        XMLManager.addOptionalElement(resref,"res-ref-name",getName());
        XMLManager.addOptionalElement(resref,"res-type",getType());
        XMLManager.addOptionalElement(resref,"res-auth",getAuthentication());
        
        return resref;
     }
     
     public void importXml(Element elt)
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("res-ref-name"))
           {
              setName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("res-type"))
           {
              setType(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("res-auth"))
           {
              setAuthentication(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : 
"");
           } 
        }
     }
     
     public String toString()
     {
        return (name.equals("")) ? "Resource reference" : name;
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/SecurityRole.java
  
  Index: SecurityRole.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.*;
  
  import com.dreambean.ejx.xml.*;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class SecurityRole
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String roleName = "";
  
     Customizer c;
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
     
     public void setName(String n) { roleName = n; }
     public String getName() { return roleName; }
  
     public void removeSecurityRole()
     {
        getBeanContext().remove(this);
     }
        
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element securityrole = doc.createElement("security-role");
        XMLManager.addOptionalAttribute(securityrole,"id",id);
        
        XMLManager.addOptionalElement(securityrole,"description",getDescription());
        XMLManager.addElement(securityrole,"role-name",getName());
        
        return securityrole;
     }
     
     public void importXml(Element elt)
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("role-name"))
           {
              setName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } 
  
        }
     }
     
     public String toString()
     {
        return (roleName.equals("")) ? "Security role        " : roleName;
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  
ejx/examples/ejb/src/com/dreambean/ejx/ejb/SecurityRoleReference.java
  
  Index: SecurityRoleReference.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.awt.*;
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.*;
  
  import com.dreambean.ejx.xml.*;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class SecurityRoleReference
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     private String id = "";
  
     String description = "";
     String name = "";
     String link = "";
  
     Customizer c;
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
      
     // Public --------------------------------------------------------
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
  
     public void setName(String n) { name = n; }
     public String getName() { return name; }
  
     public void setLink(String l) { link = l; }
     public String getLink() { return link; }
  
     public void removeSecurityRoleReference()
     {
        getBeanContext().remove(this);
     }
        
     // BeanContextChildComponentProxy implementation -----------------
     public Component getComponent()
     {
        if (c == null)
        {
           try
           {
              c = 
(Customizer)Beans.instantiate(Thread.currentThread().getContextClassLoader(), 
"com.dreambean.awt.GenericCustomizer");
              c.setObject(this);
           } catch (Exception e) {}
        }
        return (Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
     {
        Element secroleref = doc.createElement("security-role-ref");
        XMLManager.addOptionalAttribute(secroleref,"id",id);
        
        XMLManager.addOptionalElement(secroleref,"description",getDescription());
        XMLManager.addElement(secroleref,"role-name",getName());
        XMLManager.addOptionalElement(secroleref,"role-link",getLink());
        
        return secroleref;
     }
     
     public void importXml(Element elt)
     {
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("role-name"))
           {
              setName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("role-link"))
           {
              setLink(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } 
        }
     }
     
     public String toString()
     {
        return (name.equals("")) ? "Security role reference" : name;
     }
      
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/Session.java
  
  Index: Session.java
  ===================================================================
  /*
   * Copyright 1999 by dreamBean Software,
   * All rights reserved.
   */
  package com.dreambean.ejx.ejb;
  
  import java.beans.*;
  import java.beans.beancontext.*;
  import java.io.*;
  import java.util.*;
  
  import org.w3c.dom.*;
  import com.dreambean.awt.*;
  import com.dreambean.ejx.*;
  import com.dreambean.ejx.xml.*;
  
  /**
   *   <description> 
   *      
   *   @see <related>
   *   @author Rickard Oberg ([EMAIL PROTECTED])
   *   @version $Revision: 1.1 $
   */
  public class Session
     extends BeanContextSupport
     implements BeanContextChildComponentProxy, XmlExternalizable, EnterpriseBean
  {
     // Constants -----------------------------------------------------
      
     // Attributes ----------------------------------------------------
     protected String id = "";
  
     protected String displayName = "";
     protected String description = "";
     protected String smallIcon = "";
     protected String largeIcon = "";
     protected String ejbName = "";
     protected String home = "";
     protected String remote = "";
     protected String ejbClass = "";
     protected String sessionType = "Stateless";
     protected String transactionType = "Bean";
  
     protected Customizer c;
     
     protected PropertyChangeSupport ps = new PropertyChangeSupport(this);
      /** @link aggregation */
  
     /*#ResourceReference lnkResourceReference;*/
      /** @link aggregation */
  
     /*#EjbReference lnkEjbReference;*/
      /** @link aggregation */
  
     /*#EnvironmentEntry lnkEnvironmentEntry;*/
      /** @link aggregation */
  
     /*#SecurityRoleReference lnkSecurityRoleReference;*/
     // Static --------------------------------------------------------
  
     // Constructors --------------------------------------------------
     public Session()
     {
        addPropertyChangeListener(this);
     }
      
     // Public --------------------------------------------------------
     public void setDisplayName(String d) { displayName = d; }
     public String getDisplayName() { return displayName; }
     
     public void setDescription(String d) { description = d; }
     public String getDescription() { return description; }
  
     public String getSmallIcon() { return smallIcon; }
     public void setSmallIcon(String si) { smallIcon = si; }
  
     public String getLargeIcon() { return largeIcon; }
     public void setLargeIcon(String li) { largeIcon= li; }
  
     public void setEjbName(String n) { String old = ejbName; ejbName = n; 
ps.firePropertyChange("EjbName",old,ejbName); }
     public String getEjbName() { return ejbName; }
  
     public void setHome(String h) { String old = home; home = h; 
ps.firePropertyChange("Home",old,home); }
     public String getHome() { return home; }
     
     public void setRemote(String r) { String old = remote; remote = r; 
ps.firePropertyChange("Remote",old,remote); }
     public String getRemote() { return remote; }
  
     public void setEjbClass(String e) { String old = ejbClass; ejbClass = e; 
ps.firePropertyChange("EjbClass",old,ejbClass);}
     public String getEjbClass() { return ejbClass; }
  
     public void setSessionType(String t) { String old = sessionType ; sessionType = 
t; ps.firePropertyChange("SessionType",old,sessionType); }
     public String getSessionType() { return sessionType; }
  
     public void setTransactionType(String t) { transactionType = t; }
     public String getTransactionType() { return transactionType; }
     
     public void createEnvironmentEntry(String name)
        throws Exception
     {
        addEnvironmentEntry().setName(name);
     }
  
     public EnvironmentEntry addEnvironmentEntry()
        throws Exception
     {
        return 
(EnvironmentEntry)instantiateChild("com.dreambean.ejx.ejb.EnvironmentEntry");
     }
     
     public void createEjbReference(String name)
        throws Exception
     {
        addEjbReference().setName(name);
     }
     
     public EjbReference addEjbReference()
        throws Exception
     {
        return (EjbReference)instantiateChild("com.dreambean.ejx.ejb.EjbReference");
     }
     
     public void createResourceReference(String name, String type)
        throws Exception
     {
        ResourceReference ref = addResourceReference();
        ref.setName(name);
        ref.setType(type);
     }
     
     public ResourceReference addResourceReference()
        throws Exception
     {
        return 
(ResourceReference)instantiateChild("com.dreambean.ejx.ejb.ResourceReference");
     }
     
     public void createSecurityRoleReference(String name)
        throws Exception
     {
        addSecurityRoleReference().setName(name);
     }
     
     public SecurityRoleReference addSecurityRoleReference()
        throws Exception
     {
        return 
(SecurityRoleReference)instantiateChild("com.dreambean.ejx.ejb.SecurityRoleReference");
     }
     
     public void createCMPField(String name)
        throws Exception
     {
        addCMPField().setFieldName(name);
     }
  
     public CMPField addCMPField()
        throws Exception
     {
        return (CMPField)instantiateChild("com.dreambean.ejx.ejb.CMPField");
     }
  
     public Iterator iterator()
        {
                return Util.sortByClass(super.iterator());
        }
  
     public Iterator getResourceReferences()
     {
        return Util.getChildrenByClass(super.iterator(),ResourceReference.class);
     }
     
     public Iterator getEjbReferences()
     {
        return Util.getChildrenByClass(super.iterator(),EjbReference.class);
     }
     
     public Iterator getSecurityRoleReferences()
     {
        return Util.getChildrenByClass(super.iterator(),SecurityRoleReference.class);
     }
     
     public Iterator getEnvironmentEntries()
     {
        return Util.getChildrenByClass(super.iterator(),EnvironmentEntry.class);
     }
        
     public void removeSession()
     {
        getBeanContext().remove(this);
     }
        
     // PropertyChange ------------------------------------------------
     public void addPropertyChangeListener(PropertyChangeListener listener)
     {
        ps.addPropertyChangeListener(listener);
     }
     
     public void addPropertyChangeListener(String propertyName, PropertyChangeListener 
listener)
     {
        ps.addPropertyChangeListener(propertyName, listener);
     }
  
     public void removePropertyChangeListener(PropertyChangeListener listener)
     {
        ps.removePropertyChangeListener(listener);
     }
     
     public void removePropertyChangeListener(String propertyName, 
PropertyChangeListener listener)
     {
        ps.removePropertyChangeListener(propertyName, listener);
     }
        
     // BeanContextChildComponentProxy implementation -----------------
     public java.awt.Component getComponent()
     {
        if (c == null)
        {
            c = new GenericCustomizer(false,this);
        }
        return (java.awt.Component)c;
     }
  
     // XmlExternalizable implementation ------------------------------
     public Element exportXml(Document doc)
        throws Exception
     {
        Element session = doc.createElement("session");
        XMLManager.addOptionalAttribute(session,"id",id);
        
        XMLManager.addOptionalElement(session,"description",getDescription());
        XMLManager.addOptionalElement(session,"display-name",getDisplayName());
        XMLManager.addOptionalElement(session,"small-icon",getSmallIcon());
        XMLManager.addOptionalElement(session,"large-icon",getLargeIcon());
        XMLManager.addElement(session,"ejb-name",getEjbName());
        XMLManager.addElement(session,"home",getHome());
        XMLManager.addElement(session,"remote",getRemote());
        XMLManager.addElement(session,"ejb-class",getEjbClass());
        XMLManager.addElement(session,"session-type",getSessionType());
        XMLManager.addElement(session,"transaction-type",getTransactionType());
  
        for (Iterator enum = getEnvironmentEntries(); enum.hasNext();)
        {
           session.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getEjbReferences(); enum.hasNext();)
        {
           session.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getSecurityRoleReferences(); enum.hasNext();)
        {
           session.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        for (Iterator enum = getResourceReferences(); enum.hasNext();)
        {
           session.appendChild(((XmlExternalizable)enum.next()).exportXml(doc));
        }
        
        return session;
     }
     
     public void importXml(Element elt)
        throws Exception
     {
        removePropertyChangeListener(this);
        
        id = elt.getAttribute("id");
  
        NodeList nl = elt.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
        {
           Node n = nl.item(i);
           String name = n.getNodeName();
           
           if (name.equals("display-name"))
           {
              setDisplayName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : 
"");
           } else if (name.equals("description"))
           {
              setDescription(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("small-icon"))
           {
              setSmallIcon(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("large-icon"))
           {
              setLargeIcon(n.hasChildNodes() ? XMLManager.getString(n) : "");
           } else if (name.equals("ejb-name"))
           {
              setEjbName(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("home"))
           {
              setHome(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("remote"))
           {
              setRemote(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("ejb-class"))
           {
              setEjbClass(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : "");
           } else if (name.equals("session-type"))
           {
              setSessionType(n.hasChildNodes() ? n.getFirstChild().getNodeValue() : 
"");
           } else if (name.equals("transaction-type"))
           {
              setTransactionType(n.hasChildNodes() ? n.getFirstChild().getNodeValue() 
: "");
           } else if (name.equals("env-entry"))
           {
              addEnvironmentEntry().importXml((Element)n);
           } else if (name.equals("ejb-ref"))
           {
              addEjbReference().importXml((Element)n);
           } else if (name.equals("resource-ref"))
           {
              addResourceReference().importXml((Element)n);
           } else if (name.equals("security-role-ref"))
           {
              addSecurityRoleReference().importXml((Element)n);
           }
        }
        
        addPropertyChangeListener(this);
     }
     
     public String toString()
     {
        return (displayName.equals("")) ? (ejbName.equals("") ? "Session           " : 
ejbName) : displayName;
     }
      
     public void propertyChange(PropertyChangeEvent evt)
     {
        // Try to be smart!
        if (evt.getPropertyName().equals("Remote"))
        {
           if (getHome().equals(""))
           {
              // Set home
              try
              {
                 ClassLoader cl = 
((EjbFileManager)getBeanContext().getBeanContext().getBeanContext()).getClassLoader();
                 Class clazz = cl.loadClass(getRemote()+"Home");
                 if (javax.ejb.EJBHome.class.isAssignableFrom(clazz))
                    setHome(getRemote()+"Home");
              } catch (Throwable e)
              {
                 // Didn't work..
              }
           }
           
           if (getEjbClass().equals(""))
           {
              // Set bean, EJB spec style
              BeanContext eb = getBeanContext();
              BeanContext ejbJar = eb.getBeanContext();
              try
              {
                 ClassLoader cl = 
((EjbFileManager)ejbJar.getBeanContext()).getClassLoader();
                 Class clazz = cl.loadClass(getRemote()+"Bean");
                 if (javax.ejb.SessionBean.class.isAssignableFrom(clazz))
                    setEjbClass(getRemote()+"Bean");
              } catch (Throwable e)
              {
                 // Didn't work..
              }
     
              // Set bean, J2EE RI style
              try
              {
                 ClassLoader cl = 
((EjbFileManager)ejbJar.getBeanContext()).getClassLoader();
                 Class clazz = cl.loadClass(getRemote()+"EJB");
                 if (javax.ejb.SessionBean.class.isAssignableFrom(clazz))
                    setEjbClass(getRemote()+"EJB");
              } catch (Throwable e)
              {
                 // Didn't work..
              }
              
              // Set bean, Rickard style :-)
              try
              {
                 // Example:
                 // Remote = com.mycompany.interfaces.Foo
                 // Bean   = com.mycompany.beans.FooBean
                 ClassLoader cl = 
((EjbFileManager)ejbJar.getBeanContext()).getClassLoader();
                 
                 String remoteName = 
getRemote().substring(getRemote().lastIndexOf(".")+1);
                 String packageName = getRemote().substring(0, 
getRemote().lastIndexOf("."));
                 packageName = getRemote().substring(0, packageName.lastIndexOf(".")) 
+ ".beans.";
                 String beanName = packageName+remoteName+"Bean";
                 Class clazz = cl.loadClass(beanName);
                 if (javax.ejb.SessionBean.class.isAssignableFrom(clazz))
                    setEjbClass(beanName);
              } catch (Throwable e)
              {
                 // Didn't work..
              }
           }
        }
     }
     // Package protected ---------------------------------------------
      
     // Protected -----------------------------------------------------
      
     // Private -------------------------------------------------------
  
     // Inner classes -------------------------------------------------
  }
  
  
  
  1.1                  ejx/examples/ejb/src/com/dreambean/ejx/ejb/ejb.dfPackage
  
  Index: ejb.dfPackage
  ===================================================================
  package id6lla30bzmd6h9lbzmd8irw;
  
  /**
  @version 2.0
  @physicalPackage
  @__modelType diagram 
  */
  class diagram {
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.SecurityRole:oiref><oihard>
  @__modelType reference 
  */
  class reference {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.Method:oiref><oihard>
  @__modelType reference 
  */
  class reference7 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.EnterpriseBeans:oiref><oihard>
  @__modelType reference 
  */
  class reference8 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.EjbJar:oiref><oihard>
  @__modelType reference 
  */
  class reference9 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.Session:oiref><oihard>
  @__modelType reference 
  */
  class reference10 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.MethodPermission:oiref><oihard>
  @__modelType reference 
  */
  class reference11 {
  }
  /**
  @__ref <oiref:design#Class#id1gn68vbzmd6h9lbzmd8mi9.diagram:oiref><oihard>
  @__modelType reference 
  @__hidden
  */
  class reference12 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.EjbReference:oiref><oihard>
  @__modelType reference 
  */
  class reference13 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.SecurityRoleReference:oiref><oihard>
  @__modelType reference 
  */
  class reference14 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.EnvironmentEntry:oiref><oihard>
  @__modelType reference 
  */
  class reference15 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.CMPField:oiref><oihard>
  @__modelType reference 
  */
  class reference16 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.ResourceReference:oiref><oihard>
  @__modelType reference 
  */
  class reference17 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.Entity:oiref><oihard>
  @__modelType reference 
  */
  class reference19 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.ContainerTransaction:oiref><oihard>
  @__modelType reference 
  */
  class reference20 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.AssemblyDescriptor:oiref><oihard>
  @__modelType reference 
  */
  class reference21 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.PermissionRole:oiref><oihard>
  @__modelType reference 
  */
  class reference1 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.EjbFileManager:oiref><oihard>
  @__modelType reference 
  */
  class reference2 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.EjbFileManagerFactory:oiref><oihard>
  @__modelType reference 
  */
  class reference3 {
  }
  /**
  @__ref <oiref:java#Class#com.dreambean.ejx.ejb.EnterpriseBean:oiref><oihard>
  @__modelType reference 
  */
  class reference4 {
  }
  }
  /**
  @__tags
  @shapeType ClassDiagram 
  */
  class __tags {
  }
  /**
  @__options option.detail = Implementation
  option.formatting = Java
  option.showPackageContents = false
  filter.d.state = on
  filter.e.state = on
  filter.f.state = on
  filter.g.state = on 
  */
  class __options {
  }
  /**
  @__positions 
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.EnterpriseBeans:oiref>=186,146,104,59,1:oigroup>
  
<oigroup:<oiref:design#Class#id1gn68vbzmd6h9lbzmd8mi9.diagram:oiref>=33,15,49,63,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.AssemblyDescriptor#lnkContainerTransaction:oiref>=702,169,702,206:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.MethodPermission#method:oiref>=966,259,904,317:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.EnterpriseBean:oiref>=64,128,98,73,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.EjbFileManagerFactory:oiref>=104,20,137,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Entity#lnkSecurityRoleReference:oiref>=148,301,438,383:oigroup>
  <oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.EjbJar:oiref>=443,5,45,59,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.editors.AuthenticationTypeEditor:oiref>=909,157,203,59,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.Entity:oiref>=122,242,40,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.EjbJar#ad:oiref>=473,64,674,110:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.EjbJar#eb:oiref>=458,64,238,146:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.Method:oiref>=908,292,51,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.MethodPermission#lnkPermissionRole:oiref>=852,259,852,293:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Session#lnkEnvironmentEntry:oiref>=339,304,622,382:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.ContainerTransaction:oiref>=668,206,132,59,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.SecurityRole:oiref>=536,200,81,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Entity#lnkEnvironmentEntry:oiref>=155,301,586,382:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.AssemblyDescriptor#lnkSecurityRole:oiref>=659,169,576,200:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.PermissionRole#role:oiref>=832,293,576,259:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.CMPField:oiref>=17,378,61,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Session#lnkSecurityRoleReference:oiref>=327,304,485,383:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.EjbFileManager#ejbJar:oiref>=398,36,443,36:oigroup>
  
<oigroup:<oiref:java#Implements#com.dreambean.ejx.ejb.Session#com.dreambean.ejx.ejb.EnterpriseBean:oiref>=311,245,152,201:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Entity#lnkCMPField:oiref>=129,301,47,378:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Session#lnkEjbReference:oiref>=316,304,316,381:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.MethodPermission:oiref>=823,200,116,59,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.Session:oiref>=294,245,55,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Entity#lnkResourceReference:oiref>=135,301,135,380:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.MethodPermission#lnkMethod:oiref>=923,259,923,292:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.EnterpriseBeans#lnkEntity:oiref>=220,205,148,242:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.ContainerTransaction#methods:oiref>=820,261,887,317:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.EnterpriseBeans#lnkSession:oiref>=255,205,329,245:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.EjbFileManager:oiref>=303,16,95,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Entity#lnkEjbReference:oiref>=141,301,305,381:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.EjbReference:oiref>=277,381,85,59,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.PermissionRole:oiref>=783,293,99,59,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.SecurityRoleReference:oiref>=392,383,140,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.Session#lnkResourceReference:oiref>=304,304,188,380:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.ResourceReference:oiref>=119,380,123,59,1:oigroup>
  
<oigroup:<oiref:java#Implements#com.dreambean.ejx.ejb.Entity#com.dreambean.ejx.ejb.EnterpriseBean:oiref>=132,242,132,201:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.AssemblyDescriptor:oiref>=612,110,125,59,1:oigroup>
  
<oigroup:<oiref:java#Class#com.dreambean.ejx.ejb.EnvironmentEntry:oiref>=550,382,109,59,1:oigroup>
  
<oigroup:MemberLink#<oiref:java#Member#com.dreambean.ejx.ejb.AssemblyDescriptor#lnkMethodPermission:oiref>=719,169,881,200:oigroup>
  */
  class __positions {
  }
  
  
  

Reply via email to