001 //
002 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.1-05/30/2003 05:06 AM(java_re)-fcs
003 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
004 // Any modifications to this file will be lost upon recompilation of the source schema.
005 // Generated on: 2004.10.11 at 12:13:34 EDT
006 //
007
008 /*
009 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
010 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
011 */
012 package astronomy.data.spectra.impl.runtime;
013
014 import javax.xml.bind.PropertyException;
015 import javax.xml.bind.ValidationEvent;
016 import javax.xml.bind.ValidationEventHandler;
017 import javax.xml.bind.ValidationException;
018 import javax.xml.bind.Validator;
019 import javax.xml.bind.helpers.DefaultValidationEventHandler;
020
021 import org.xml.sax.SAXException;
022
023 import com.sun.xml.bind.validator.Messages;
024
025 /*
026 TODO:
027 reorganize classes into appropriate packages.
028 to reflect the fact that some of the classes in
029 the marshaller package are used for both marshalling
030 and validation.
031
032 In particular, the MarshallingContext interface should be
033 renamed. It is not only for marshalling.
034 (something like "Serializer", maybe).
035 */
036
037 /**
038 * Validator implementation of JAXB RI.
039 */
040 public class ValidatorImpl implements Validator
041 {
042 /** Validation errors will be reported to this object. */
043 private ValidationEventHandler eventHandler =
044 new DefaultValidationEventHandler();
045
046 /**
047 * We need to know whether an validation error was detected or not.
048 * For this purpose, we set up the validation so that this interceptor
049 * will "intercept" errors before the application receives it.
050 */
051 private static class EventInterceptor implements ValidationEventHandler {
052 EventInterceptor( ValidationEventHandler _next ) {
053 this.next = _next;
054 }
055
056 private boolean hadError = false;
057 public boolean hadError() { return hadError; }
058
059 /** event will be passed to this component. */
060 private final ValidationEventHandler next;
061
062 public boolean handleEvent( ValidationEvent e ) {
063 hadError = true;
064 boolean result;
065 if( next!=null ) {
066 // pass it to the application
067 try {
068 result = next.handleEvent(e);
069 } catch( RuntimeException re ) {
070 // if the client event handler causes a RuntimeException,
071 // then we have to return false
072 result = false;
073 }
074 } else {
075 // if no error handler was specified, there is no point
076 // in continuing the validation.
077 result = false;
078 }
079 return result;
080 }
081 };
082
083 public boolean validateRoot( Object o ) throws ValidationException {
084 if( o == null ) {
085 throw new IllegalArgumentException(
086 Messages.format( Messages.MUST_NOT_BE_NULL, "rootObj" ) );
087 }
088
089 return validate(o,true);
090 }
091
092 public boolean validate( Object o ) throws ValidationException {
093 if( o == null ) {
094 throw new IllegalArgumentException(
095 Messages.format( Messages.MUST_NOT_BE_NULL, "subrootObj" ) );
096 }
097
098 return validate(o,false);
099 }
100
101 private boolean validate( Object o, boolean validateId )
102 throws ValidationException {
103
104 try {
105
106 ValidatableObject vo = Util.toValidatableObject(o);
107
108 if(vo==null)
109 throw new ValidationException(
110 Messages.format( Messages.NOT_VALIDATABLE ) );
111
112 EventInterceptor ei = new EventInterceptor(eventHandler);
113 ValidationContext context = new ValidationContext(ei,validateId);
114 context.validate(vo);
115 context.reconcileIDs();
116
117 return !ei.hadError();
118 } catch( SAXException e ) {
119 // TODO exception handling.
120 // we need a consistent mechanism to convert SAXException into JAXBException
121 Exception nested = e.getException();
122 if( e != null ) {
123 throw new ValidationException( nested );
124 } else {
125 throw new ValidationException( e );
126 }
127 //return false;
128 }
129 }
130
131 public ValidationEventHandler getEventHandler() {
132 return eventHandler;
133 }
134
135 public void setEventHandler( ValidationEventHandler handler ) {
136 if( handler == null ) {
137 eventHandler = new DefaultValidationEventHandler();
138 } else {
139 eventHandler = handler;
140 }
141 }
142
143 /**
144 * There are no required properties, so simply throw an exception. Other
145 * providers may have support for properties on Validator, but the RI doesn't
146 */
147 public void setProperty( String name, Object value )
148 throws PropertyException {
149
150 if( name == null ) {
151 throw new IllegalArgumentException(
152 Messages.format( Messages.MUST_NOT_BE_NULL, "name" ) );
153 }
154
155 throw new PropertyException(name, value);
156 }
157
158 /**
159 * There are no required properties, so simply throw an exception. Other
160 * providers may have support for properties on Validator, but the RI doesn't
161 */
162 public Object getProperty( String name )
163 throws PropertyException {
164
165 if( name == null ) {
166 throw new IllegalArgumentException(
167 Messages.format( Messages.MUST_NOT_BE_NULL, "name" ) );
168 }
169
170 throw new PropertyException(name);
171 }
172
173 }