Package com.eviware.soapui.impl.wadl.inference.schema.types

Source Code of com.eviware.soapui.impl.wadl.inference.schema.types.SimpleType

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/

package com.eviware.soapui.impl.wadl.inference.schema.types;

import org.apache.xmlbeans.XmlAnySimpleType;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;

import com.eviware.soapui.impl.wadl.inference.ConflictHandler;
import com.eviware.soapui.impl.wadl.inference.schema.Context;
import com.eviware.soapui.impl.wadl.inference.schema.Schema;
import com.eviware.soapui.impl.wadl.inference.schema.Settings;
import com.eviware.soapui.impl.wadl.inference.schema.Type;
import com.eviware.soapui.impl.wadl.inference.support.TypeInferrer;
import com.eviware.soapui.inferredSchema.SimpleTypeConfig;

/**
* SimpleType corresponds to an instance of a xs:simpleType. Each element or
* attribute with a value of a specific xs:simpleType should have its own
* instance of SimpleType.
*
* @author Dain Nilsson
*/
public class SimpleType implements Type {
    private XmlAnySimpleType simpleType;
    private Schema schema;
    private boolean completed = true;

    public SimpleType(Schema schema, XmlAnySimpleType simpleType, boolean completed) {
        this.schema = schema;
        this.simpleType = simpleType;
        this.completed = completed;
    }

    public SimpleType(SimpleTypeConfig xml, Schema schema) {
        this.schema = schema;
        completed = xml.getCompleted();
        simpleType = TypeInferrer.getType(xml.getTypeName());
    }

    public SimpleTypeConfig save() {
        SimpleTypeConfig xml = SimpleTypeConfig.Factory.newInstance();
        xml.setCompleted(completed);
        xml.setTypeName(simpleType.schemaType().getName().getLocalPart());
        return xml;
    }

    public Type validate(Context context) throws XmlException {
        XmlCursor cursor = context.getCursor();
        if (!cursor.isAttr() && (cursor.toFirstAttribute() || cursor.toFirstChild())) {
            // Element with complex content
            return new ComplexType(schema, context.getName(), completed);
        } else if (!context.getAttribute("nil").equals("true")) {
            String value = "";
            cursor.toFirstContentToken();
            if (!cursor.isEnd()) {
                value = cursor.getTextValue();
            }
            if (TypeInferrer.validateSimpleType(value, simpleType)) {
                return this;
            }
            XmlAnySimpleType newType = TypeInferrer.expandTypeForValue(value, simpleType);
            if (cursor.getName() == null) {
                cursor.toParent();
            }
            if (context.getHandler().callback(ConflictHandler.Event.MODIFICATION, ConflictHandler.Type.TYPE,
                    cursor.getName(), context.getPath(), "Illegal content '" + value + "'")) {
                // Switch to other simpleType.
                // return
                // context.getSchemaSystem().getType(newType.schemaType().getName());
                simpleType = newType;
            } else {
                throw new XmlException("Invalid value!");
            }
        }
        return this;
    }

    @Override
    public String toString() {
        return "";
    }

    public String getName() {
        return schema.getPrefixForNamespace(Settings.xsdns) + ":" + simpleType.schemaType().getName().getLocalPart();
    }

    public Schema getSchema() {
        return schema;
    }

    public void setSchema(Schema schema) {
        this.schema = schema;
    }

}
TOP

Related Classes of com.eviware.soapui.impl.wadl.inference.schema.types.SimpleType

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.