Update of /cvsroot/jaxme/JaxMe2/src/net/sf/jaxme/generator/events/impl
In directory sc8-pr-cvs1:/tmp/cvs-serv32423/src/net/sf/jaxme/generator/events/impl

Added Files:
        TypeHandler.java JMSchemaInfo.java JMTypeListener.java 
        JMSGListener.java JMGlobalInfo.java SGHandlerImpl.java 
        JMObjectListener.java SchemaBindingsHandler.java 
        ClassDeclaration.java JMSchemaBindingsListener.java 
        ObjectHandler.java HandlerImpl.java 
Log Message:
Added the events framework to support the development of
SchemaReaders.


--- NEW FILE: TypeHandler.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.Iterator;

import net.sf.jaxme.generator.events.TypeListener;
import net.sf.jaxme.generator.jaxb.impl.JAXBSchemaImpl;
import net.sf.jaxme.generator.types.SchemaTypeContext;
import org.w3c.dom.Element;


/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class TypeHandler extends HandlerImpl implements TypeListener {
  public void eventType(JAXBSchemaImpl pSchema, Element pDocumentElement,
                         Element pTypeElement, SchemaTypeContext pType)
      throws Exception {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      ((TypeListener) iter.next()).eventType(pSchema, pDocumentElement,
                                             pTypeElement, pType);
    }
  }

}

--- NEW FILE: JMSchemaInfo.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.Iterator;


/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class JMSchemaInfo extends JMGlobalInfo {
  private JMGlobalInfo globalInfo;

  /** <p>Sets the global info.</p>
   */
  public void setGlobalInfo(JMGlobalInfo pGlobalInfo) {
    globalInfo = pGlobalInfo;
  }

  /** <p>Returns the global info.</p>
   */
  public JMGlobalInfo getGlobalInfo() {
    return globalInfo;
  }

  public ClassDeclaration getClassDeclaration(String pType) {
    for (Iterator iter = getClassDeclarations();  iter.hasNext();  ) {
      ClassDeclaration cd = (ClassDeclaration) iter.next();
      if (cd.getType().equals(pType)) {
        return cd;
      }
    }
    JMGlobalInfo globalInfo = getGlobalInfo();
    if (globalInfo != null) {
      for (Iterator iter = globalInfo.getClassDeclarations();  iter.hasNext();  ) {
        ClassDeclaration cd = (ClassDeclaration) iter.next();
        if (cd.getType().equals(pType)) {
          return cd;
        }
      }
    }
    return null;
  }
}

--- NEW FILE: JMTypeListener.java ---
package net.sf.jaxme.generator.events.impl;

import net.sf.jaxme.generator.events.TypeListener;
import net.sf.jaxme.generator.jaxb.impl.JAXBSchemaImpl;
import net.sf.jaxme.generator.types.SchemaTypeContext;
import org.w3c.dom.Element;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class JMTypeListener implements TypeListener {
  public void eventType(JAXBSchemaImpl pSchema, Element pDocumentElement,
                         Element pTypeElement, SchemaTypeContext pType)
      throws Exception {
  }
}

--- NEW FILE: JMSGListener.java ---
package net.sf.jaxme.generator.events.impl;

import net.sf.jaxme.generator.SchemaException;
import net.sf.jaxme.generator.events.SGListener;
import net.sf.jaxme.generator.javasg.TypeSG;
import net.sf.jaxme.generator.types.SchemaType;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class JMSGListener implements SGListener {
  public TypeSG eventTypeSG(SchemaType pType, TypeSG pTypeSG)
      throws SchemaException {
    return pTypeSG;
  }
}

--- NEW FILE: JMGlobalInfo.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class JMGlobalInfo {
  private List classDeclarations = new ArrayList();

  /** <p>Adds a new class declaration to the given list.</p>
   */
  public void addClassDeclaration(ClassDeclaration pClassDeclaration) {
    classDeclarations.add(pClassDeclaration);
  }

  /** <p>Returns an iterator to the list of all class declarations.</p>
   */
  public Iterator getClassDeclarations() {
    return classDeclarations.iterator();
  }
}

--- NEW FILE: SGHandlerImpl.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.Iterator;

import net.sf.jaxme.generator.SchemaException;
import net.sf.jaxme.generator.events.SGListener;
import net.sf.jaxme.generator.javasg.TypeSG;
import net.sf.jaxme.generator.types.SchemaType;


/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class SGHandlerImpl extends HandlerImpl implements SGListener {
  public TypeSG eventTypeSG(SchemaType pType, TypeSG pTypeSG) throws SchemaException {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      pTypeSG = ((SGListener) iter.next()).eventTypeSG(pType, pTypeSG);
    }
    return pTypeSG;
  }
}

--- NEW FILE: JMObjectListener.java ---
package net.sf.jaxme.generator.events.impl;

import net.sf.jaxme.generator.events.ObjectListener;
import net.sf.jaxme.generator.jaxb.impl.JAXBSchemaImpl;
import net.sf.jaxme.generator.schema.ComplexTypeContent;
import net.sf.jaxme.generator.schema.SchemaAttribute;
import net.sf.jaxme.generator.schema.SchemaAttributeGroup;
import net.sf.jaxme.generator.schema.SchemaElement;
import org.w3c.dom.Element;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class JMObjectListener implements ObjectListener {
  public void eventElement(JAXBSchemaImpl pSchema, Element pDocumentElement,
                            Element pDeclaringElement, SchemaElement pElement)
      throws Exception {
  }

  public void eventAttribute(JAXBSchemaImpl pSchema, Element pDocumentElement,
                               Element pDeclaringElement, SchemaAttribute pAttribute)
      throws Exception {
  }

  public void eventAttributeGroup(JAXBSchemaImpl pSchema, Element pDocumentElement,
                                   Element pDeclaringElement, SchemaAttributeGroup 
pGroup)
      throws Exception {
  }

  public void eventComplexTypeContent(JAXBSchemaImpl pSchema, Element pDocumentElement,
                                       Element pDeclaringElement, ComplexTypeContent 
pContent)
      throws Exception {
  }
}

--- NEW FILE: SchemaBindingsHandler.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.Iterator;

import net.sf.jaxme.generator.events.SchemaBindingsListener;
import net.sf.jaxme.generator.jaxb.impl.JAXBGlobalSchema;
import net.sf.jaxme.generator.jaxb.impl.JAXBSchemaImpl;
import org.w3c.dom.Element;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class SchemaBindingsHandler extends HandlerImpl
    implements SchemaBindingsListener {
  public void eventGlobalBindings(JAXBGlobalSchema pSchema,
                                   Element pDocumentElement,
                                   Element pAppInfoElement) throws Exception {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      SchemaBindingsListener listener = (SchemaBindingsListener) iter.next();
      listener.eventGlobalBindings(pSchema, pDocumentElement, pAppInfoElement);
    }
  }
  public void eventSchemaBindings(JAXBSchemaImpl pSchema,
                                   Element pDocumentElement,
                                   Element pAppInfoElement) throws Exception {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      SchemaBindingsListener listener = (SchemaBindingsListener) iter.next();
      listener.eventSchemaBindings(pSchema, pDocumentElement, pAppInfoElement);
    }
  }
}

--- NEW FILE: ClassDeclaration.java ---
package net.sf.jaxme.generator.events.impl;


import java.util.List;
import java.lang.NullPointerException;
import java.lang.String;
import java.util.HashSet;
import java.util.ArrayList;
import java.lang.IllegalStateException;
import java.util.Iterator;
import java.util.Set;

public class ClassDeclaration {
  public class ClassReference {
    private String name;
    public void setName(String pName) {
      name = pName;
    }
    public String getName() {
      return name;
    }
    public void finish() {
      if (getName() == null  ||  getName().length() == 0) {
        throw new NullPointerException("A class reference must have a 'name' 
attribute.");
      }
    }
  }

  private String type;
  private boolean isAbstract;
  private List extendsList = new ArrayList();
  private List implementsList = new ArrayList();

  public void setType(String pType) {
    type = pType;
  }
  public String getType() {
    return type;
  }

  public void setAbstract(boolean pAbstract) {
    isAbstract = pAbstract;
  }
  public boolean isAbstract() {
    return isAbstract;
  }

  public void finish() {
    if (getType() == null  ||  getType().length() == 0) {
      throw new NullPointerException("A class declaration must have a 'type' 
attribute.");
    }

    Set extendsSet = new HashSet();
    for (Iterator iter = extendsList.iterator();  iter.hasNext();  ) {
      ClassReference ref = (ClassReference) iter.next();
      if (extendsSet.contains(ref.getName())) {
        throw new IllegalStateException("Multiple extends definitions with the name " +
                                         ref.getName() + " found");
      }
      extendsSet.add(ref.getName());
    }

    Set implementsSet = new HashSet();
    for (Iterator iter = implementsList.iterator();  iter.hasNext();  ) {
      ClassReference ref = (ClassReference) iter.next();
      if (implementsSet.contains(ref.getName())) {
        throw new IllegalStateException("Multiple implements definitions with the name 
" +
                                         ref.getName() + " found");
      }
      implementsSet.add(ref.getName());
    }
  }

  public ClassReference createExtends() {
    ClassReference reference = new ClassReference();
    extendsList.add(reference);
    return reference;
  }
  public Iterator getExtends() {
    return extendsList.iterator();
  }
  public ClassReference createImplements() {
    ClassReference reference = new ClassReference();
    implementsList.add(reference);
    return reference;
  }
  public Iterator getImplements() {
    return implementsList.iterator();
  }
}
--- NEW FILE: JMSchemaBindingsListener.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.Iterator;

import net.sf.jaxme.generator.events.SchemaBindingsListener;
import net.sf.jaxme.generator.impl.JaxMeSchemaWriter;
import net.sf.jaxme.generator.jaxb.impl.JAXBGlobalSchema;
import net.sf.jaxme.generator.jaxb.impl.JAXBSchemaImpl;
import net.sf.jaxme.generator.jaxb.impl.JAXBSchemaReader;
import net.sf.jaxme.generator.util.DOM;
import net.sf.jaxme.util.Configurator;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class JMSchemaBindingsListener implements SchemaBindingsListener {
  private JAXBSchemaReader schemaReader;
  private String key;

  public void setSchemaReader(JAXBSchemaReader pReader) {
    schemaReader = pReader;
  }
  public JAXBSchemaReader getJaxMeSchemaReader() {
    return schemaReader;
  }

  public void setKey(String pKey) {
    key = pKey;
  }
  public String getKey() {
    return key;
  }

  public void eventGlobalBindings(JAXBGlobalSchema pSchema,
                                   Element pDocumentElement,
                                   Element pAppInfoElement)
      throws Exception {
    if (pAppInfoElement == null) {
      return;
    }
    for (Iterator iter = DOM.getChildElements(pAppInfoElement,
                                               JaxMeSchemaWriter.JAXME_SCHEMA_URI,
                                               "class");
         iter.hasNext();  ) {
      ClassDeclaration classDeclaration = new ClassDeclaration();
      Configurator.parse((Node) iter.next(), classDeclaration);

      JMGlobalInfo globalInfo = JaxMeSchemaWriter.getGlobalInfo(pSchema, getKey());
      globalInfo.addClassDeclaration(classDeclaration);
    }
  }

  public void eventSchemaBindings(JAXBSchemaImpl pSchema,
                                   Element pDocumentElement,
                                   Element pAppInfoElement)
      throws Exception {
    if (pAppInfoElement == null) {
      return;
    }
    for (Iterator iter = DOM.getChildElements(pAppInfoElement,
                                               JaxMeSchemaWriter.JAXME_SCHEMA_URI,
                                               "class");
         iter.hasNext();  ) {
      ClassDeclaration classDeclaration = new ClassDeclaration();
      Configurator.parse((Node) iter.next(), classDeclaration);

      JMSchemaInfo schemaInfo = JaxMeSchemaWriter.getSchemaInfo(pSchema, getKey());
      schemaInfo.addClassDeclaration(classDeclaration);
    }
  }
}

--- NEW FILE: ObjectHandler.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.Iterator;

import net.sf.jaxme.generator.events.ObjectListener;
import net.sf.jaxme.generator.jaxb.impl.JAXBSchemaImpl;
import net.sf.jaxme.generator.schema.ComplexTypeContent;
import net.sf.jaxme.generator.schema.SchemaAttribute;
import net.sf.jaxme.generator.schema.SchemaAttributeGroup;
import net.sf.jaxme.generator.schema.SchemaElement;
import org.w3c.dom.Element;

/**
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class ObjectHandler extends HandlerImpl implements ObjectListener {
  public void eventElement(JAXBSchemaImpl pSchema,
                            Element pDocumentElement,
                            Element pDeclaringElement,
                            SchemaElement pElement)
      throws Exception {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      ((ObjectListener) iter.next()).eventElement(pSchema, pDocumentElement,
                                                  pDeclaringElement, pElement);
    }
  }

  public void eventAttribute(JAXBSchemaImpl pSchema, Element pDocumentElement,
                              Element pDeclaringElement, SchemaAttribute pAttribute)
      throws Exception {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      ((ObjectListener) iter.next()).eventAttribute(pSchema, pDocumentElement,
                                                    pDeclaringElement, pAttribute);
    }
  }

  public void eventAttributeGroup(JAXBSchemaImpl pSchema, Element pDocumentElement,
                                   Element pDeclaringElement, SchemaAttributeGroup 
pGroup)
      throws Exception {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      ((ObjectListener) iter.next()).eventAttributeGroup(pSchema, pDocumentElement,
                                                         pDeclaringElement, pGroup);
    }
  }

  public void eventComplexTypeContent(JAXBSchemaImpl pSchema, Element pDocumentElement,
                                       Element pDeclaringElement, ComplexTypeContent 
pContent)
      throws Exception {
    for (Iterator iter = getListeners();  iter.hasNext();  ) {
      ((ObjectListener) iter.next()).eventComplexTypeContent(pSchema, pDocumentElement,
                                                             pDeclaringElement, 
pContent);
    }
  }
}

--- NEW FILE: HandlerImpl.java ---
package net.sf.jaxme.generator.events.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

import net.sf.jaxme.generator.events.Handler;
import net.sf.jaxme.generator.events.Listener;

/** <p>Default implementation of a [EMAIL PROTECTED] Handler}. The implementation
 * is expected to add handler specific methods that notify the events.</p>
 *
 * @author <a href="mailto:[EMAIL PROTECTED]">Jochen Wiedmann</a>
 */
public class HandlerImpl implements Handler {
  private List listeners = new ArrayList();

  /** <p>Creates a new instance of HandlerImpl.</p>
   */
  public HandlerImpl() {
  }

  public void addListener(Listener pListener) {
    listeners.add(pListener);
  }

  public void removeListener(Listener pListener)
      throws NoSuchElementException {
    if (!listeners.remove(pListener)) {
      throw new NoSuchElementException("The listener list did not contain the element 
" + pListener);
    }
  }

  public Iterator getListeners() {
    return listeners.iterator();
  }
}




-------------------------------------------------------
This SF.net email is sponsored by:Crypto Challenge is now open! 
Get cracking and register here for some mind boggling fun and 
the chance of winning an Apple iPod:
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
_______________________________________________
Jaxme-jaxb-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jaxme-jaxb-dev

Reply via email to