blob: dedd373399467cb3102f514d8940f9b1b0ff9a3f [file] [log] [blame]
/* Copyright 2004 The Apache Software Foundation
*
* 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.apache.xmlbeans.impl.validator;
import org.apache.xmlbeans.SchemaType;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.impl.common.PrefixResolver;
import org.apache.xmlbeans.impl.common.ValidatorListener;
import org.apache.xmlbeans.impl.common.XmlWhitespace;
import javax.xml.namespace.QName;
import java.util.Collection;
/**
* Author: Cezar Andrei (cezar.andrei at bea.com)
* Date: Feb 5, 2004
*/
public class ValidatorUtil
{
private static class EventImpl implements ValidatorListener.Event
{
PrefixResolver _prefixResolver;
String _text;
EventImpl(PrefixResolver prefixResolver, String text)
{
_prefixResolver = prefixResolver;
_text = text;
}
// can return null, used only to locate errors
public XmlCursor getLocationAsCursor()
{
return null;
}
public javax.xml.stream.Location getLocation()
{
return null;
}
// fill up chars with the xsi:type attribute value if there is one othervise return false
public String getXsiType() // BEGIN xsi:type
{
return null;
}
// fill up chars with xsi:nill attribute value if any
public String getXsiNil() // BEGIN xsi:nil
{
return null;
}
public String getXsiLoc() // BEGIN xsi:schemaLocation
{
return null;
}
public String getXsiNoLoc() // BEGIN xsi:noNamespaceSchemaLocation
{
return null;
}
// On START and ATTR
public QName getName()
{
return null;
}
// On TEXT and ATTR
public String getText()
{
return _text;
}
public String getText(int wsr)
{
return XmlWhitespace.collapse( _text, wsr );
}
public boolean textIsWhitespace()
{
return false;
}
public String getNamespaceForPrefix(String prefix)
{
return _prefixResolver.getNamespaceForPrefix(prefix);
}
}
public static boolean validateSimpleType (
SchemaType type, String value, Collection errors, PrefixResolver prefixResolver )
{
if (!type.isSimpleType() && type.getContentType() != SchemaType.SIMPLE_CONTENT)
{
assert false;
throw new RuntimeException( "Not a simple type" );
}
Validator validator =
new Validator(
type, null, type.getTypeSystem(), null, errors);
//make only one event at the beginning and than reuse it
EventImpl ev = new EventImpl(prefixResolver, value);
validator.nextEvent(ValidatorListener.BEGIN, ev);
validator.nextEvent(ValidatorListener.TEXT, ev);
validator.nextEvent(ValidatorListener.END, ev);
return validator.isValid();
}
// public static void main(String[] args)
// {
// String value;
// value = " +1.2323 ";
// System.out.println("float " + validateSimpleType(XmlFloat.type, value, null , null));
// value = " +234 ";
// System.out.println("posInt " + validateSimpleType(XmlPositiveInteger.type, value, null , null));
// value = "2001-01-01";
// System.out.println("IntOrDateUnion " + validateSimpleType(DocDocument.Doc.IntOrDateUnion.type, value, null , null));
// value = "232321";
// System.out.println("IntOrDateUnion " + validateSimpleType(DocDocument.Doc.IntOrDateUnion.type, value, null , null));
// }
}