/*
* 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.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.enterprise.inject.spi.BeanManager;
public abstract class AbstractXmlItem implements XmlItem {
protected final XmlItemType type;
protected final XmlItem parent;
protected final Class<?> javaClass;
protected final String innerText;
protected final Map<String, String> attributes;
protected final int lineno;
protected final String document;
public String getInnerText() {
return innerText;
}
public AbstractXmlItem(XmlItemType type, XmlItem parent, Class<?> javaClass, String innerText, Map<String, String> attributes, String document, int lineno) {
this.type = type;
this.parent = parent;
this.javaClass = javaClass;
this.innerText = innerText;
if (attributes == null) {
this.attributes = new HashMap<String, String>();
} else {
this.attributes = new HashMap<String, String>(attributes);
}
this.lineno = lineno;
this.document = document;
}
public int getLineno() {
return lineno;
}
public String getDocument() {
return document;
}
final List<XmlItem> children = new ArrayList<XmlItem>();
public void addChild(XmlItem xmlItem) {
children.add(xmlItem);
}
public XmlItem getParent() {
return parent;
}
public List<XmlItem> getChildren() {
return Collections.unmodifiableList(children);
}
public XmlItemType getType() {
return type;
}
public Class<?> getJavaClass() {
return javaClass;
}
public boolean resolveChildren(BeanManager manager) {
return true;
}
public Map<String, String> getAttributes() {
return attributes;
}
public <T> List<T> getChildrenOfType(Class<T> type) {
List<T> ret = new ArrayList<T>();
for (XmlItem i : children) {
if (type.isAssignableFrom(i.getClass())) {
ret.add((T) i);
}
}
return ret;
}
}