org.ow2.easywsdl.schema.impl.ElementImpl Maven / Gradle / Ivy
/**
* easySchema - easyWSDL toolbox Platform.
* Copyright (c) 2008, eBM Websourcing
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the University of California, Berkeley nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.ow2.easywsdl.schema.impl;
import java.math.BigInteger;
import javax.xml.namespace.QName;
import org.ow2.easywsdl.schema.SchemaFactory;
import org.ow2.easywsdl.schema.api.Element;
import org.ow2.easywsdl.schema.api.SchemaException;
import org.ow2.easywsdl.schema.api.Type;
import org.ow2.easywsdl.schema.api.abstractElmt.AbstractElementImpl;
import org.ow2.easywsdl.schema.api.abstractElmt.AbstractSchemaElementImpl;
import org.ow2.easywsdl.schema.org.w3._2001.xmlschema.FormChoice;
/**
* @author Nicolas Salatge - eBM WebSourcing
*/
public class ElementImpl extends
AbstractElementImpl
implements Element {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
* @param model
* @param parent
* @throws SchemaException
*/
public ElementImpl(
final org.ow2.easywsdl.schema.org.w3._2001.xmlschema.Element model,
final AbstractSchemaElementImpl parent) {
super(model, parent);
findType();
//findReferencedElementIfExist();
}
private void findType() {
// if anonymous element
if (this.model.getComplexType() != null) {
this.type = new ComplexTypeImpl(this.model.getComplexType(), parent);
} else if (this.model.getSimpleType() != null) {
this.type = new SimpleTypeImpl(this.model.getSimpleType(), parent);
} else if (this.model.getType() != null) {
this.type = (Type) this.parent.getSchema().getType(this.model.getType());
if (this.type == null && SchemaFactory.getDefaultSchema() != null) {
this.type = (Type) SchemaFactory.getDefaultSchema().getType(this.model.getType());
}
}
}
public void findReferencedElementIfExist() {
// if referenced element
if (this.model.getRef() != null) {
this.referencedElement = this.parent.getSchema().getElement(this.model.getRef());
if(this.referencedElement != null) {
this.type = (Type) this.referencedElement.getType();
}
}
}
public QName getQName() {
QName ns = null;
if (this.model.getRef() != null) {
// The element is defined by reference
ns = this.model.getRef();
if (this.referencedElement == null) {
findReferencedElementIfExist();
}
}
else if (this.model.getName() != null) {
// The element is defined inlined
final String prefix = this.parent.getSchema().getAllNamespaces().getPrefix(
this.parent.getSchema().getTargetNamespace());
if (prefix != null) {
ns = new QName(this.parent.getSchema().getTargetNamespace(), this.model.getName(), prefix);
} else {
ns = new QName(this.parent.getSchema().getTargetNamespace(), this.model.getName());
}
}
// Else the XSD is not valid, so we return null.
return ns;
}
@Override
public Type getType() {
if(this.type == null) {
this.findType();
}
return super.getType();
}
@Override
public void setType(Type type) {
super.setType(type);
this.model.setType(type.getQName());
}
public void setQName(QName name) {
this.model.setName(name.getLocalPart());
}
public String getMaxOccurs() {
return this.model.getMaxOccurs();
}
public int getMinOccurs() {
return this.model.getMinOccurs().intValue();
}
public void setMaxOccurs(String max) {
this.model.setMaxOccurs(max);
}
public void setMinOccurs(int min) {
this.model.setMinOccurs(BigInteger.valueOf(min));
}
public QName getRef() {
return this.model.getRef();
}
public void setRef(QName name) {
this.model.setRef(name);
findReferencedElementIfExist();
}
public boolean isNillable() {
return this.model.isNillable();
}
public void setNillable(boolean nill) {
this.model.setNillable(nill);
}
public FormChoice getForm() {
FormChoice res = this.model.getForm();
if(res == null) {
res = this.getParent().getSchema().getElementFormDefault();
}
return res;
}
}