All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ow2.easywsdl.schema.impl.ElementImpl Maven / Gradle / Ivy

/**
 * Copyright (c) 2008-2012 EBM WebSourcing, 2012-2018 Linagora
 * 
 * This program/library is free software: you can redistribute it and/or modify
 * it under the terms of the New BSD License (3-clause license).
 *
 * This program/library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the New BSD License (3-clause license)
 * for more details.
 *
 * You should have received a copy of the New BSD License (3-clause license)
 * along with this program/library; If not, see http://directory.fsf.org/wiki/License:BSD_3Clause/
 * for the New BSD License (3-clause license).
 */
 
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;

        private QName qname = null;

	/**
	 *
	 * @param model
	 * @param parent
	 */
	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() {
            if (qname != null) return qname;

            if (this.model.getRef() != null) {
                // The element is defined by reference
                qname = 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) {
                    qname = new QName(this.parent.getSchema().getTargetNamespace(), this.model.getName(), prefix);
                } else {
                    qname = new QName(this.parent.getSchema().getTargetNamespace(), this.model.getName());
                }
            }
            // Else the XSD is not valid, so we return null.

            return qname;
	}

	@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;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy