/* * JBoss, Home of Professional Open Source * Copyright 2011, Red Hat, Inc. and/or its affiliates, and individual * contributors by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.solder.config.xml.core; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Stores the result of parsing an XML document * * @author Stuart Douglas <stuart@baileyroberts.com.au> */ public class XmlResult implements Comparable<XmlResult> { private final Map<Class<? extends Annotation>, Annotation[]> stereotypes = new HashMap<Class<? extends Annotation>, Annotation[]>(); private final List<Class<? extends Annotation>> qualifiers = new ArrayList<Class<? extends Annotation>>(); private final List<Class<? extends Annotation>> interceptorBindings = new ArrayList<Class<? extends Annotation>>(); private final List<Class<?>> veto = new ArrayList<Class<?>>(); private final List<String> problems = new ArrayList<String>(); private final List<BeanResult<?>> beans = new ArrayList<BeanResult<?>>(); private final String sortKey; public XmlResult(String fileUrl) { StringBuilder keyBuilder = new StringBuilder(fileUrl.length()); for (int i = fileUrl.length() - 1; i >= 0; --i) { keyBuilder.append(fileUrl.charAt(i)); } sortKey = keyBuilder.toString(); } public void addStereotype(Class<? extends Annotation> an, Annotation[] values) { stereotypes.put(an, values); } public Map<Class<? extends Annotation>, Annotation[]> getStereotypes() { return stereotypes; } public void addQualifier(Class<? extends Annotation> qualifier) { qualifiers.add(qualifier); } public List<Class<? extends Annotation>> getQualifiers() { return qualifiers; } public void addInterceptorBinding(Class<? extends Annotation> binding) { interceptorBindings.add(binding); } public List<Class<? extends Annotation>> getInterceptorBindings() { return interceptorBindings; } public void addBean(BeanResult<?> bean) { beans.add(bean); } public List<BeanResult<?>> getBeans() { return beans; } /** * Gets all beans from the result, including inline beans * * @return */ public List<BeanResult<?>> getFlattenedBeans() { List<BeanResult<?>> results = new ArrayList<BeanResult<?>>(); for (BeanResult<?> a : beans) { getFlattenedBeans(a, results); } return results; } private void getFlattenedBeans(BeanResult<?> r, List<BeanResult<?>> results) { results.add(r); for (BeanResult<?> a : r.getInlineBeans()) { getFlattenedBeans(a, results); } } public List<String> getProblems() { return problems; } public void addProblem(String p) { problems.add(p); } public void addVeto(Class<?> clazz) { veto.add(clazz); } public List<Class<?>> getVeto() { return veto; } public int compareTo(XmlResult o) { return sortKey.compareTo(o.sortKey); } }