001 /*
002 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025 package javax.xml.bind.util;
026
027 import java.util.Vector;
028 import javax.xml.bind.ValidationEventHandler;
029 import javax.xml.bind.ValidationEvent;
030
031 /**
032 * {@link javax.xml.bind.ValidationEventHandler ValidationEventHandler}
033 * implementation that collects all events.
034 *
035 * <p>
036 * To use this class, create a new instance and pass it to the setEventHandler
037 * method of the Validator, Unmarshaller, Marshaller class. After the call to
038 * validate or unmarshal completes, call the getEvents method to retrieve all
039 * the reported errors and warnings.
040 *
041 * @author <ul><li>Kohsuke Kawaguchi, Sun Microsystems, Inc.</li><li>Ryan Shoemaker, Sun Microsystems, Inc.</li><li>Joe Fialli, Sun Microsystems, Inc.</li></ul>
042 * @version $Revision: 1.1 $
043 * @see javax.xml.bind.Validator
044 * @see javax.xml.bind.ValidationEventHandler
045 * @see javax.xml.bind.ValidationEvent
046 * @see javax.xml.bind.ValidationEventLocator
047 * @since JAXB1.0
048 */
049 public class ValidationEventCollector implements ValidationEventHandler {
050 private final Vector<ValidationEvent> events = new Vector<ValidationEvent>();
051
052 /**
053 * Return an array of ValidationEvent objects containing a copy of each of
054 * the collected errors and warnings.
055 *
056 * @return
057 * a copy of all the collected errors and warnings or an empty array
058 * if there weren't any
059 */
060 public ValidationEvent[] getEvents() {
061 return events.toArray(new ValidationEvent[events.size()]);
062 }
063
064 /**
065 * Clear all collected errors and warnings.
066 */
067 public void reset() {
068 events.removeAllElements();
069 }
070
071 /**
072 * Returns true if this event collector contains at least one
073 * ValidationEvent.
074 *
075 * @return true if this event collector contains at least one
076 * ValidationEvent, false otherwise
077 */
078 public boolean hasEvents() {
079 return !events.isEmpty();
080 }
081
082 public boolean handleEvent(ValidationEvent event) {
083 events.add(event);
084
085 boolean retVal = true;
086 switch (event.getSeverity()) {
087 case ValidationEvent.WARNING:
088 retVal = true; // continue validation
089 break;
090 case ValidationEvent.ERROR:
091 retVal = true; // continue validation
092 break;
093 case ValidationEvent.FATAL_ERROR:
094 retVal = false; // halt validation
095 break;
096 default:
097 _assert(false, Messages
098 .format(Messages.UNRECOGNIZED_SEVERITY, event
099 .getSeverity()));
100 break;
101 }
102
103 return retVal;
104 }
105
106 private static void _assert(boolean b, String msg) {
107 if (!b) {
108 throw new InternalError(msg);
109 }
110 }
111 }
|