Skip to content

Commit

Permalink
changes with getting bean class
Browse files Browse the repository at this point in the history
git-svn-id: http://anonsvn.jboss.org/repos/weld/ri/trunk@2147 1c488680-804c-0410-94cd-c6b725194a0e
  • Loading branch information
Victor Yarmolovich committed Mar 23, 2009
1 parent 27a4f67 commit 0f8ea8c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 261 deletions.

This file was deleted.

249 changes: 5 additions & 244 deletions impl/src/main/java/org/jboss/webbeans/xml/ParseXmlHelper.java
@@ -1,7 +1,6 @@
package org.jboss.webbeans.xml;

import java.io.IOException;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
Expand All @@ -12,261 +11,23 @@
import java.util.Set;

import javax.inject.DefinitionException;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.Topic;

import org.dom4j.Attribute;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.jboss.webbeans.CurrentManager;
import org.jboss.webbeans.ManagerImpl;
import org.jboss.webbeans.introspector.AnnotatedItem;
import org.jboss.webbeans.introspector.jlr.AnnotatedClassImpl;
import org.jboss.webbeans.introspector.AnnotatedClass;
import org.jboss.webbeans.resources.spi.ResourceLoadingException;

public class ParseXmlHelper
{
private static List<AnnotatedItemReceiver> receivers;

static
{
receivers = initializeReceivers();
}

public static Set<AnnotatedItem<?, ?>> getBeanItems(List<Element> beans)
{
Set<AnnotatedItem<?, ?>> result = new HashSet<AnnotatedItem<?, ?>>();

for (Element bean : beans)
result.add(receiveBeanItem(bean));

return result;
}

private static AnnotatedItem<?, ?> receiveBeanItem(Element element)
{
for (AnnotatedItemReceiver receiver : receivers)
{
if (receiver.accept(element))
{
return receiver.receiveAnnotatedItem(element);
}
}

throw new DefinitionException("definition of a bean " + element.getName() + " is incorrect");
}

private static List<AnnotatedItemReceiver> initializeReceivers()
{
List<AnnotatedItemReceiver> receivers = new ArrayList<AnnotatedItemReceiver>();

AnnotatedItemReceiver jmsResourceReceiver = new AnnotatedItemReceiver()
{
public boolean accept(Element element)
{
return isJMSResource(element);
}

public AnnotatedItem<?, ?> receiveAnnotatedItem(Element element)
{
return receiveJMSResourceItem(element);
}

};
AnnotatedItemReceiver resourceReceiver = new AnnotatedItemReceiver()
{
public boolean accept(Element element)
{
return isResource(element);
}

public AnnotatedItem<?, ?> receiveAnnotatedItem(Element element)
{
return receiveResourceItem(element);
}

};
AnnotatedItemReceiver sessionBeanReceiver = new AnnotatedItemReceiver()
{
public boolean accept(Element element)
{
return isSessionBean(element);
}

public AnnotatedItem<?, ?> receiveAnnotatedItem(Element element)
{
return receiveSessionBeanItem(element);
}

};
AnnotatedItemReceiver simpleBeanReceiver = new AnnotatedItemReceiver()
{
public boolean accept(Element element)
{
return isSimpleBean(element);
}

public AnnotatedItem<?, ?> receiveAnnotatedItem(Element element)
{
return receiveSimpleBeanItem(element);
}

};

//order of elements is important
receivers.add(jmsResourceReceiver);
receivers.add(resourceReceiver);
receivers.add(sessionBeanReceiver);
receivers.add(simpleBeanReceiver);

return receivers;
}

private static boolean isJMSResource(Element element)
{
if (isJavaEeNamespace(element) &&
(element.getName().equalsIgnoreCase(XmlConstants.TOPIC) ||
element.getName().equalsIgnoreCase(XmlConstants.QUEUE)))
return true;
return false;
}

private static AnnotatedItem<?, ?> receiveJMSResourceItem(Element element)
{
final Element jmsElement = element;

if(jmsElement.getName().equalsIgnoreCase(XmlConstants.QUEUE))
{
Queue queue = new Queue()
{
public String getQueueName() throws JMSException
{
return getJmsResourceName(jmsElement);
}
};

return AnnotatedClassImpl.of(queue.getClass());
}

Topic topic = new Topic()
{
public String getTopicName() throws JMSException
{
return getJmsResourceName(jmsElement);
}
};

return AnnotatedClassImpl.of(topic.getClass());
}

private static boolean isResource(Element element)
{
Iterator<?> elIterator = element.elementIterator();
while (elIterator.hasNext())
{
Element child = (Element) elIterator.next();
if (isJavaEeNamespace(child) &&
(child.getName().equalsIgnoreCase(XmlConstants.RESOURCE) ||
child.getName().equalsIgnoreCase(XmlConstants.PERSISTENCE_CONTEXT) ||
child.getName().equalsIgnoreCase(XmlConstants.PERSISTENCE_UNIT) ||
child.getName().equalsIgnoreCase(XmlConstants.EJB) ||
child.getName().equalsIgnoreCase(XmlConstants.WEB_SERVICE_REF)))
return true;
}
return false;
}

private static AnnotatedItem<?, ?> receiveResourceItem(Element element)
{
// TODO:
return null;
}

private static boolean isSessionBean(Element element)
{
ManagerImpl manager = CurrentManager.rootManager();
if (manager.getEjbDescriptorCache().containsKey(element.getName()) ||
element.attribute(XmlConstants.EJB_NAME) != null)
return true;
return false;
}

private static AnnotatedItem<?, ?> receiveSessionBeanItem(Element element)
{
// TODO:
return null;
}

private static boolean isSimpleBean(Element element)
{
//TODO
String urn = element.getNamespace().getURI();
Class<?> beanClass = null;//loadElementClass(urn, element.getName());

if (!Modifier.isAbstract(beanClass.getModifiers()) &&
beanClass.getTypeParameters().length == 0)
return true;

return false;
}

private static AnnotatedItem<?, ?> receiveSimpleBeanItem(Element element)
{
//TODO
String urn = element.getNamespace().getURI();
Class<?> beanClass = null;//loadElementClass(urn, element.getName());

if (!Modifier.isStatic(beanClass.getModifiers()) &&
beanClass.isMemberClass())
throw new DefinitionException("class " + beanClass + " is a non-static inner class");

// if (beanClass.getTypeParameters().length > 0)
// throw new DefinitionException("class " + beanClass +
// " is a parameterized type");

// TODO:
// boolean isDecorator = false;
// if (Modifier.isAbstract(beanClass.getModifiers()) && !isDecorator)
// throw new DefinitionException("class " + beanClass +
// " is an abstract and not Decorator");

return AnnotatedClassImpl.of(beanClass);
}

private static String getJmsResourceName(Element element)
{
Iterator<?> elIterator = element.elementIterator();
while (elIterator.hasNext())
{
Element child = (Element) elIterator.next();
if (isJavaEeNamespace(child) &&
child.getName().equalsIgnoreCase(XmlConstants.RESOURCE))
{
Iterator<?> chIterator = child.elementIterator();
while(chIterator.hasNext())
{
Element chChild = (Element) chIterator.next();
if (isJavaEeNamespace(chChild) &&
(chChild.getName().equalsIgnoreCase(XmlConstants.NAME) ||
chChild.getName().equalsIgnoreCase(XmlConstants.MAPPED_NAME)))
{
return chChild.getName();
}
}
}
}
throw new DefinitionException("Incorrect JMSResource declaration for " + element.getName());
}

{
public static boolean isJavaEeNamespace(Element element)
{
return element.getNamespace().getURI().equalsIgnoreCase(XmlConstants.JAVA_EE_NAMESPACE);
}

public static <T> Class<? extends T> loadElementClass(Element element, Class<T> expectedType, XmlEnvironment environment, Map<String, Set<String>> packagesMap)
public static <T> AnnotatedClass<? extends T> loadElementClass(Element element, Class<T> expectedType, XmlEnvironment environment, Map<String, Set<String>> packagesMap)
{
List<Class<? extends T>> classesList = new ArrayList<Class<? extends T>>();
List<AnnotatedClass<? extends T>> classesList = new ArrayList<AnnotatedClass<? extends T>>();
String className = element.getName();
String prefix = element.getNamespacePrefix();

Expand All @@ -280,7 +41,7 @@ public static <T> Class<? extends T> loadElementClass(Element element, Class<T>
String classPath = packageName + "." + element.getName();
try
{
Class<? extends T> classType = environment.loadClass(classPath, expectedType).getRawType();
AnnotatedClass<? extends T> classType = environment.loadClass(classPath, expectedType);
classesList.add(classType);
}
catch(ResourceLoadingException e){}
Expand Down
18 changes: 13 additions & 5 deletions impl/src/main/java/org/jboss/webbeans/xml/XmlParser.java
Expand Up @@ -21,6 +21,7 @@
import org.dom4j.Namespace;
import org.dom4j.QName;
import org.dom4j.io.SAXReader;
import org.jboss.webbeans.introspector.AnnotatedClass;
import org.jboss.webbeans.log.Log;
import org.jboss.webbeans.log.Logging;

Expand Down Expand Up @@ -54,9 +55,16 @@ public void parse()

private void parseForBeans(Document document)
{
List<Element> beanElements = findBeans(document);
// TODO Only pass in classes here
//environment.getClasses().addAll(ParseXmlHelper.getBeanItems(beanElements));
List<AnnotatedClass<?>> beanClasses = new ArrayList<AnnotatedClass<?>>();

List<Element> beanElements = findBeans(document);
for (Element beanElement : beanElements)
{
AnnotatedClass<?> beanClass = ParseXmlHelper.loadElementClass(beanElement, Object.class, environment, packagesMap);
beanClasses.add(beanClass);
}

environment.getClasses().addAll(beanClasses);
}

private void parseForDeploy(Document document)
Expand Down Expand Up @@ -173,12 +181,12 @@ private List<Class<? extends Annotation>> obtainDeploymentTypes(Element element)
List<Element> children = element.elements();
for (Element child : children)
{
Class<? extends Annotation> deploymentClass = ParseXmlHelper.loadElementClass(child, Annotation.class, environment, packagesMap);
AnnotatedClass<? extends Annotation> deploymentClass = ParseXmlHelper.loadElementClass(child, Annotation.class, environment, packagesMap);

// if(deploymentClass.getAnnotation(DeploymentType.class) == null)
// throw new DefinitionException("<Deploy> child <" + element.getName() + "> must be a deployment type");

deploymentClasses.add(deploymentClass);
deploymentClasses.add(deploymentClass.getRawType());
}
haveAnyDeployElement = true;
return deploymentClasses;
Expand Down

0 comments on commit 0f8ea8c

Please sign in to comment.