001 /* 002 * $Id: ValidationEventCollector.java,v 1.9 2002/11/11 18:52:21 ryans Exp $ 003 * 004 * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved. 005 * 006 * This software is the proprietary information of Sun Microsystems, Inc. 007 * Use is subject to license terms. 008 * 009 */ 010 package javax.xml.bind.util; 011 012 import java.util.Vector; 013 import javax.xml.bind.ValidationEventHandler; 014 import javax.xml.bind.ValidationEvent; 015 016 /** 017 * {@link javax.xml.bind.ValidationEventHandler ValidationEventHandler} 018 * implementation that collects all events. 019 * 020 * <p> 021 * To use this class, create a new instance and pass it to the setEventHandler 022 * method of the Validator, Unmarshaller, Marshaller class. After the call to 023 * validate or unmarshal completes, call the getEvents method to retrieve all 024 * the reported errors and warnings. 025 * 026 * @author <ul><li>Kohsuke Kawaguchi, Sun Microsystems, Inc.</li><li>Ryan Shoemaker, Sun Microsystems, Inc.</li><li>Joe Fialli, Sun Microsystems, Inc.</li></ul> 027 * @version $Revision: 1.9 $ 028 * @see javax.xml.bind.Validator 029 * @see javax.xml.bind.ValidationEventHandler 030 * @see javax.xml.bind.ValidationEvent 031 * @see javax.xml.bind.ValidationEventLocator 032 * @since JAXB1.0 033 */ 034 public class ValidationEventCollector implements ValidationEventHandler 035 { 036 private final Vector events = new Vector(); 037 038 /** 039 * Return an array of ValidationEvent objects containing a copy of each of 040 * the collected errors and warnings. 041 * 042 * @return 043 * a copy of all the collected errors and warnings or an empty array 044 * if there weren't any 045 */ 046 public ValidationEvent[] getEvents() { 047 return (ValidationEvent[])events.toArray(new ValidationEvent[events.size()]); 048 } 049 050 /** 051 * Clear all collected errors and warnings. 052 */ 053 public void reset() { 054 events.removeAllElements(); 055 } 056 057 /** 058 * Returns true if this event collector contains at least one 059 * ValidationEvent. 060 * 061 * @return true if this event collector contains at least one 062 * ValidationEvent, false otherwise 063 */ 064 public boolean hasEvents() { 065 return events.size() != 0 ? true : false; 066 } 067 068 public boolean handleEvent( ValidationEvent event ) { 069 events.add(event); 070 071 boolean retVal = true; 072 switch( event.getSeverity() ) { 073 case ValidationEvent.WARNING: 074 retVal = true; // continue validation 075 break; 076 case ValidationEvent.ERROR: 077 retVal = true; // continue validation 078 break; 079 case ValidationEvent.FATAL_ERROR: 080 retVal = false; // halt validation 081 break; 082 default: 083 _assert( false, 084 Messages.format( Messages.UNRECOGNIZED_SEVERITY, 085 new Integer( event.getSeverity() ) ) ); 086 break; 087 } 088 089 return retVal; 090 } 091 092 private static void _assert( boolean b, String msg ) { 093 if( !b ) { 094 throw new InternalError( msg ); 095 } 096 } 097 }