blob: f3b7b867198082f1749027075461ffbcfd69f1c3 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.ws.commons.schema.utils;
import org.apache.ws.commons.schema.XmlSchema;
import org.apache.ws.commons.schema.XmlSchemaAttribute;
import org.apache.ws.commons.schema.XmlSchemaAttributeGroup;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.apache.ws.commons.schema.XmlSchemaElement;
import org.apache.ws.commons.schema.XmlSchemaGroup;
import org.apache.ws.commons.schema.XmlSchemaNotation;
import org.apache.ws.commons.schema.XmlSchemaType;
/**
* Implementation for ref='QName', a common construct in the schema.
*/
public class XmlSchemaRef<T extends XmlSchemaNamed> extends XmlSchemaRefBase {
private Class<? extends T> targetClass;
private T targetObject;
public XmlSchemaRef(XmlSchema parent, Class<T> targetClass) {
this.parent = parent;
this.targetClass = targetClass;
}
protected void forgetTargetObject() {
targetObject = null;
}
public T getTarget() {
if (targetObject == null) {
Class<?> cls = targetClass;
XmlSchemaCollection parentCollection = parent.getParent();
if (cls == XmlSchemaElement.class) {
targetObject = targetClass.cast(parentCollection.getElementByQName(targetQName));
} else if (cls == XmlSchemaAttribute.class) {
targetObject = targetClass.cast(parentCollection.getAttributeByQName(targetQName));
} else if (cls == XmlSchemaType.class) {
targetObject = targetClass.cast(parentCollection.getTypeByQName(targetQName));
} else if (cls == XmlSchemaAttributeGroup.class) {
targetObject = targetClass.cast(parentCollection.getAttributeGroupByQName(targetQName));
} else if (cls == XmlSchemaGroup.class) {
targetObject = targetClass.cast(parentCollection.getGroupByQName(targetQName));
} else if (cls == XmlSchemaNotation.class) {
targetObject = targetClass.cast(parentCollection.getNotationByQName(targetQName));
}
}
return targetObject;
}
@Override
public String toString() {
return "XmlSchemaRef: " + targetClass.getName() + " " + targetQName;
}
}