remove a bunch of unused classes
This commit is contained in:
parent
11f784e23b
commit
0f6295e6e1
|
@ -1,144 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util;
|
||||
|
||||
import java.beans.BeanInfo;
|
||||
import java.beans.IntrospectionException;
|
||||
import java.beans.Introspector;
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.security.AccessController;
|
||||
import java.security.PrivilegedAction;
|
||||
|
||||
import org.hibernate.HibernateException;
|
||||
import org.hibernate.internal.util.collections.ArrayHelper;
|
||||
|
||||
/**
|
||||
* An object that is shallow-cloneable
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class Cloneable {
|
||||
|
||||
private static final Object[] READER_METHOD_ARGS = ArrayHelper.EMPTY_OBJECT_ARRAY;
|
||||
|
||||
/**
|
||||
* Essentially performs a shallow copy of this SessionEventListenerConfig
|
||||
* instance; meaning the SessionEventListenerConfig itself is cloned, but
|
||||
* the individual listeners are <b>not</b> cloned.
|
||||
*
|
||||
* @return The SessionEventListenerConfig shallow copy.
|
||||
*/
|
||||
public Object shallowCopy() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
@Override
|
||||
public Object run() {
|
||||
return copyListeners();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to ensure the SessionEventListenerConfig is fully
|
||||
* configured (basically, that none of the listeners is null).
|
||||
*
|
||||
* @throws HibernateException If the SessionEventListenerConfig
|
||||
* is not fully configured.
|
||||
*/
|
||||
public void validate() throws HibernateException {
|
||||
AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
@Override
|
||||
public Object run() {
|
||||
checkListeners();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
private Object copyListeners() {
|
||||
Object copy = null;
|
||||
BeanInfo beanInfo = null;
|
||||
try {
|
||||
beanInfo = Introspector.getBeanInfo( getClass(), Object.class );
|
||||
internalCheckListeners( beanInfo );
|
||||
copy = getClass().newInstance();
|
||||
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
|
||||
for ( PropertyDescriptor pd : pds ) {
|
||||
try {
|
||||
pd.getWriteMethod().invoke(
|
||||
copy,
|
||||
pd.getReadMethod().invoke( this, READER_METHOD_ARGS )
|
||||
);
|
||||
}
|
||||
catch (Throwable t) {
|
||||
throw new HibernateException( "Unable to copy listener [" + pd.getName() + "]" );
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception t) {
|
||||
throw new HibernateException( "Unable to copy listeners", t );
|
||||
}
|
||||
finally {
|
||||
if ( beanInfo != null ) {
|
||||
// release the jdk internal caches every time to ensure this
|
||||
// plays nicely with destroyable class-loaders
|
||||
Introspector.flushFromCaches( getClass() );
|
||||
}
|
||||
}
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
private void checkListeners() {
|
||||
BeanInfo beanInfo = null;
|
||||
try {
|
||||
beanInfo = Introspector.getBeanInfo( getClass(), Object.class );
|
||||
internalCheckListeners( beanInfo );
|
||||
}
|
||||
catch (IntrospectionException t) {
|
||||
throw new HibernateException( "Unable to validate listener config", t );
|
||||
}
|
||||
finally {
|
||||
if ( beanInfo != null ) {
|
||||
// release the jdk internal caches every time to ensure this
|
||||
// plays nicely with destroyable class-loaders
|
||||
Introspector.flushFromCaches( getClass() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void internalCheckListeners(BeanInfo beanInfo) {
|
||||
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
|
||||
try {
|
||||
for ( PropertyDescriptor pd : pds ) {
|
||||
final Object listener = pd.getReadMethod().invoke( this, READER_METHOD_ARGS );
|
||||
if ( listener == null ) {
|
||||
throw new HibernateException( "Listener [" + pd.getName() + "] was null" );
|
||||
}
|
||||
if ( listener.getClass().isArray() ) {
|
||||
Object[] listenerArray = (Object[]) listener;
|
||||
for ( Object aListenerArray : listenerArray ) {
|
||||
if ( aListenerArray == null ) {
|
||||
throw new HibernateException( "Listener in [" + pd.getName() + "] was null" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (HibernateException e) {
|
||||
throw e;
|
||||
}
|
||||
catch (Throwable t) {
|
||||
throw new HibernateException( "Unable to validate listener config" );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
*/
|
||||
package org.hibernate.internal.util.collections;
|
||||
|
||||
import java.util.AbstractList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Set;
|
||||
import java.util.Spliterator;
|
||||
import java.util.Spliterators;
|
||||
|
||||
/**
|
||||
* A collection of values that is simultaneously a List (ordered) and a Set (unique)
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class UniqueList<E> extends AbstractList<E> implements Set<E>, List<E> {
|
||||
private final List<E> elements;
|
||||
|
||||
public UniqueList() {
|
||||
this( new ArrayList<>() );
|
||||
}
|
||||
|
||||
public UniqueList(List<E> elements) {
|
||||
this.elements = elements;
|
||||
}
|
||||
|
||||
public UniqueList(int size) {
|
||||
this.elements = CollectionHelper.arrayList( size );
|
||||
}
|
||||
|
||||
@Override
|
||||
public E get(int index) {
|
||||
return elements.get( index );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(int index, E element) {
|
||||
if ( elements.contains( element ) ) {
|
||||
return;
|
||||
}
|
||||
elements.add( index, element );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return elements.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<E> iterator() {
|
||||
return elements.iterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListIterator<E> listIterator() {
|
||||
return elements.listIterator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListIterator<E> listIterator(int index) {
|
||||
return elements.listIterator( index );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray() {
|
||||
return elements.toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("SuspiciousToArrayCall")
|
||||
public <T> T[] toArray(T[] a) {
|
||||
return elements.toArray( a );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Spliterator<E> spliterator() {
|
||||
return Spliterators.spliterator( this, Spliterator.ORDERED );
|
||||
}
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
*/
|
||||
package org.hibernate.internal.util.io;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class CharSequenceReader extends Reader {
|
||||
private CharSequence charSequence;
|
||||
|
||||
private int length;
|
||||
private int position = 0;
|
||||
private int mark = 0;
|
||||
|
||||
public CharSequenceReader(CharSequence charSequence) {
|
||||
this.charSequence = charSequence;
|
||||
this.length = charSequence.length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean markSupported() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mark(int readAheadLimit) throws IOException {
|
||||
this.mark = this.position;
|
||||
}
|
||||
|
||||
public int read() throws IOException {
|
||||
verifyOpen();
|
||||
|
||||
if ( this.position >= this.length ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return this.charSequence.charAt( this.position++ );
|
||||
}
|
||||
|
||||
protected void verifyOpen() throws IOException {
|
||||
if ( charSequence == null ) {
|
||||
throw new IOException( "Stream closed" );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read(char[] dest, int off, int len) throws IOException {
|
||||
verifyOpen();
|
||||
|
||||
if ( this.position >= this.length ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((off < 0) || (off > dest.length) || (len < 0) ||
|
||||
((off + len) > dest.length) || ((off + len) < 0)) {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
else if (len == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int n = Math.min( length - position, len );
|
||||
|
||||
for ( int i = 0; i < n; i++ ) {
|
||||
dest[i] = charSequence.charAt( n );
|
||||
}
|
||||
|
||||
position += n;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
this.position = this.mark;
|
||||
}
|
||||
|
||||
public long skip(long n) {
|
||||
if ( n < 0L ) {
|
||||
throw new IllegalArgumentException( "Number of characters to skip must be greater than zero: " + n );
|
||||
}
|
||||
|
||||
if ( this.position >= length ) {
|
||||
return -1L;
|
||||
}
|
||||
else {
|
||||
int dest = (int)Math.min(this.charSequence.length(), (long)this.position + n);
|
||||
int count = dest - this.position;
|
||||
this.position = dest;
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
charSequence = null;
|
||||
mark = 0;
|
||||
position = 0;
|
||||
}
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
*/
|
||||
package org.hibernate.internal.util.streams;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BinaryOperator;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collector;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class GenericArrayCollector<T> implements Collector<T, List<T>, T[]> {
|
||||
public static <T> GenericArrayCollector<T> forType(Class<T> type) {
|
||||
return new GenericArrayCollector<>( type );
|
||||
}
|
||||
|
||||
private final Class<T> collectedType;
|
||||
|
||||
public GenericArrayCollector(Class<T> collectedType) {
|
||||
this.collectedType = collectedType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Supplier<List<T>> supplier() {
|
||||
return ArrayList::new;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiConsumer<List<T>, T> accumulator() {
|
||||
return List::add;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BinaryOperator<List<T>> combiner() {
|
||||
return (ts, ts2) -> {
|
||||
ts.addAll( ts2 );
|
||||
return ts;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Function<List<T>, T[]> finisher() {
|
||||
return ts -> ts.toArray( (T[]) Array.newInstance( collectedType, ts.size() ) );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Characteristics> characteristics() {
|
||||
return EnumSet.of( Characteristics.CONCURRENT );
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
*/
|
||||
package org.hibernate.internal.util.streams;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BinaryOperator;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collector;
|
||||
|
||||
/**
|
||||
* A Java 8 Stream Collector for collecting Strings into a String[].
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class StingArrayCollector implements Collector<String, List<String>, String[]> {
|
||||
/**
|
||||
* Singleton access
|
||||
*/
|
||||
public static final StingArrayCollector INSTANCE = new StingArrayCollector();
|
||||
|
||||
@Override
|
||||
public Supplier<List<String>> supplier() {
|
||||
return ArrayList::new;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiConsumer<List<String>, String> accumulator() {
|
||||
return List::add;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BinaryOperator<List<String>> combiner() {
|
||||
return (strings, strings2) -> {
|
||||
strings.addAll( strings2 );
|
||||
return strings;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Function<List<String>, String[]> finisher() {
|
||||
return strings -> strings.toArray( new String[strings.size()] );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Characteristics> characteristics() {
|
||||
return EnumSet.of( Characteristics.CONCURRENT );
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
*/
|
||||
package org.hibernate.internal.util.streams;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class StreamUtils {
|
||||
public static StingArrayCollector toStringArray() {
|
||||
return StingArrayCollector.INSTANCE;
|
||||
}
|
||||
|
||||
public static <T> GenericArrayCollector<T> toArray(Class<T> collectedType) {
|
||||
return new GenericArrayCollector<>( collectedType );
|
||||
}
|
||||
|
||||
}
|
|
@ -1,130 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLStreamConstants;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.events.Characters;
|
||||
import javax.xml.stream.events.EntityDeclaration;
|
||||
import javax.xml.stream.events.EntityReference;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
import javax.xml.stream.util.EventReaderDelegate;
|
||||
|
||||
/**
|
||||
* Base for XMLEventReader that implements the {@link #getElementText()} and {@link #nextTag()} APIs in a
|
||||
* way that is agnostic from the rest of the XMLEventReader implementation. Both will use the subclasses
|
||||
* {@link #internalNextEvent()} as the exclusive way to read events.
|
||||
*
|
||||
* Note, copied from the uPortal project by permission of author. See
|
||||
* https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/xml/stream/BaseXMLEventReader.java
|
||||
*
|
||||
* @author Eric Dalquist
|
||||
*/
|
||||
public abstract class BaseXMLEventReader extends EventReaderDelegate {
|
||||
private XMLEvent previousEvent;
|
||||
|
||||
public BaseXMLEventReader(XMLEventReader reader) {
|
||||
super(reader);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subclass's version of {@link #nextEvent()}, called by {@link #next()}
|
||||
*/
|
||||
protected abstract XMLEvent internalNextEvent() throws XMLStreamException;
|
||||
|
||||
/**
|
||||
* @return The XMLEvent returned by the last call to {@link #internalNextEvent()}
|
||||
*/
|
||||
protected final XMLEvent getPreviousEvent() {
|
||||
return this.previousEvent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final XMLEvent nextEvent() throws XMLStreamException {
|
||||
this.previousEvent = this.internalNextEvent();
|
||||
return this.previousEvent;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.Iterator#next()
|
||||
*/
|
||||
@Override
|
||||
public final Object next() {
|
||||
try {
|
||||
return this.nextEvent();
|
||||
}
|
||||
catch (XMLStreamException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.xml.stream.XMLEventReader#getElementText()
|
||||
*/
|
||||
@Override
|
||||
public final String getElementText() throws XMLStreamException {
|
||||
XMLEvent event = this.previousEvent;
|
||||
if (event == null) {
|
||||
throw new XMLStreamException("Must be on START_ELEMENT to read next text, element was null");
|
||||
}
|
||||
if (!event.isStartElement()) {
|
||||
throw new XMLStreamException("Must be on START_ELEMENT to read next text", event.getLocation());
|
||||
}
|
||||
|
||||
final StringBuilder text = new StringBuilder();
|
||||
while (!event.isEndDocument()) {
|
||||
switch (event.getEventType()) {
|
||||
case XMLStreamConstants.CHARACTERS:
|
||||
case XMLStreamConstants.SPACE:
|
||||
case XMLStreamConstants.CDATA: {
|
||||
final Characters characters = event.asCharacters();
|
||||
text.append(characters.getData());
|
||||
break;
|
||||
}
|
||||
case XMLStreamConstants.ENTITY_REFERENCE: {
|
||||
final EntityReference entityReference = (EntityReference)event;
|
||||
final EntityDeclaration declaration = entityReference.getDeclaration();
|
||||
text.append(declaration.getReplacementText());
|
||||
break;
|
||||
}
|
||||
case XMLStreamConstants.COMMENT:
|
||||
case XMLStreamConstants.PROCESSING_INSTRUCTION: {
|
||||
//Ignore
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
throw new XMLStreamException("Unexpected event type '" + XMLStreamConstantsUtils.getEventName(event.getEventType()) + "' encountered. Found event: " + event, event.getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
event = this.nextEvent();
|
||||
}
|
||||
|
||||
return text.toString();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see javax.xml.stream.XMLEventReader#nextTag()
|
||||
*/
|
||||
@Override
|
||||
public final XMLEvent nextTag() throws XMLStreamException {
|
||||
XMLEvent event = this.nextEvent();
|
||||
while ((event.isCharacters() && event.asCharacters().isWhiteSpace())
|
||||
|| event.isProcessingInstruction()
|
||||
|| event.getEventType() == XMLStreamConstants.COMMENT) {
|
||||
|
||||
event = this.nextEvent();
|
||||
}
|
||||
|
||||
if (!event.isStartElement() && event.isEndElement()) {
|
||||
throw new XMLStreamException("Unexpected event type '" + XMLStreamConstantsUtils.getEventName(event.getEventType()) + "' encountered. Found event: " + event, event.getLocation());
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
}
|
|
@ -1,178 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
|
||||
/**
|
||||
* Buffers XML events for later re-reading
|
||||
*
|
||||
* Note, copied from the uPortal project by permission of author. See
|
||||
* https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/xml/stream/BufferedXMLEventReader.java
|
||||
*
|
||||
* @author Eric Dalquist
|
||||
*/
|
||||
public class BufferedXMLEventReader extends BaseXMLEventReader {
|
||||
private final LinkedList<XMLEvent> eventBuffer = new LinkedList<>();
|
||||
private int eventLimit;
|
||||
private ListIterator<XMLEvent> bufferReader;
|
||||
|
||||
/**
|
||||
* Create new buffering reader, no buffering is done until {@link #mark(int)} is called.
|
||||
*/
|
||||
public BufferedXMLEventReader(XMLEventReader reader) {
|
||||
super(reader);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new buffering reader. Calls {@link #mark(int)} with the specified event limit
|
||||
* @see #mark(int)
|
||||
*/
|
||||
public BufferedXMLEventReader(XMLEventReader reader, int eventLimit) {
|
||||
super(reader);
|
||||
this.eventLimit = eventLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return A copy of the current buffer
|
||||
*/
|
||||
public List<XMLEvent> getBuffer() {
|
||||
return new ArrayList<>(this.eventBuffer);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.jasig.portal.xml.stream.BaseXMLEventReader#internalNextEvent()
|
||||
*/
|
||||
@Override
|
||||
protected XMLEvent internalNextEvent() throws XMLStreamException {
|
||||
//If there is an iterator to read from reset was called, use the iterator
|
||||
//until it runs out of events.
|
||||
if (this.bufferReader != null) {
|
||||
final XMLEvent event = this.bufferReader.next();
|
||||
|
||||
//If nothing left in the iterator, remove the reference and fall through to direct reading
|
||||
if (!this.bufferReader.hasNext()) {
|
||||
this.bufferReader = null;
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
//Get the next event from the underlying reader
|
||||
final XMLEvent event = this.getParent().nextEvent();
|
||||
|
||||
//if buffering add the event
|
||||
if (this.eventLimit != 0) {
|
||||
this.eventBuffer.offer(event);
|
||||
|
||||
//If limited buffer size and buffer is too big trim the buffer.
|
||||
if (this.eventLimit > 0 && this.eventBuffer.size() > this.eventLimit) {
|
||||
this.eventBuffer.poll();
|
||||
}
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return this.bufferReader != null || super.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public XMLEvent peek() throws XMLStreamException {
|
||||
if (this.bufferReader != null) {
|
||||
final XMLEvent event = this.bufferReader.next();
|
||||
this.bufferReader.previous(); //move the iterator back
|
||||
return event;
|
||||
}
|
||||
return super.peek();
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as calling {@link #mark(int)} with -1.
|
||||
*/
|
||||
public void mark() {
|
||||
this.mark(-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start buffering events
|
||||
* @param eventLimit the maximum number of events to buffer. -1 will buffer all events, 0 will buffer no events.
|
||||
*/
|
||||
public void mark(int eventLimit) {
|
||||
this.eventLimit = eventLimit;
|
||||
|
||||
//Buffering no events now, clear the buffer and buffered reader
|
||||
if (this.eventLimit == 0) {
|
||||
this.eventBuffer.clear();
|
||||
this.bufferReader = null;
|
||||
}
|
||||
//Buffering limited set of events, lets trim the buffer if needed
|
||||
else if (this.eventLimit > 0) {
|
||||
//If there is an iterator check its current position and calculate the new iterator start position
|
||||
int iteratorIndex = 0;
|
||||
if (this.bufferReader != null) {
|
||||
final int nextIndex = this.bufferReader.nextIndex();
|
||||
iteratorIndex = Math.max(0, nextIndex - (this.eventBuffer.size() - this.eventLimit));
|
||||
}
|
||||
|
||||
//Trim the buffer until it is not larger than the limit
|
||||
while (this.eventBuffer.size() > this.eventLimit) {
|
||||
this.eventBuffer.poll();
|
||||
}
|
||||
|
||||
//If there is an iterator re-create it using the newly calculated index
|
||||
if (this.bufferReader != null) {
|
||||
this.bufferReader = this.eventBuffer.listIterator(iteratorIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the reader to these start of the buffered events.
|
||||
*/
|
||||
public void reset() {
|
||||
if (this.eventBuffer.isEmpty()) {
|
||||
this.bufferReader = null;
|
||||
}
|
||||
else {
|
||||
this.bufferReader = this.eventBuffer.listIterator();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws XMLStreamException {
|
||||
this.mark(0);
|
||||
super.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The number of events in the buffer.
|
||||
*/
|
||||
public int bufferSize() {
|
||||
return this.eventBuffer.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* If reading from the buffer after a {@link #reset()} call an {@link IllegalStateException} will be thrown.
|
||||
*/
|
||||
@Override
|
||||
public void remove() {
|
||||
if (this.bufferReader != null && this.bufferReader.hasNext()) {
|
||||
throw new IllegalStateException("Cannot remove a buffered element");
|
||||
}
|
||||
|
||||
super.remove();
|
||||
}
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import org.xml.sax.ErrorHandler;
|
||||
import org.xml.sax.SAXParseException;
|
||||
|
||||
/**
|
||||
* Implements an {@link ErrorHandler} that mainly just logs errors/warnings. However, it does track
|
||||
* the errors it encounters and makes them available via {@link #getErrors}.
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
* @author Hardy Ferentschik
|
||||
*/
|
||||
public class ErrorLogger implements ErrorHandler, Serializable {
|
||||
|
||||
private static final CoreMessageLogger LOG = Logger.getMessageLogger(
|
||||
CoreMessageLogger.class,
|
||||
ErrorLogger.class.getName()
|
||||
);
|
||||
|
||||
// lazily initialized
|
||||
private List<SAXParseException> errors;
|
||||
private String file;
|
||||
|
||||
public ErrorLogger() {
|
||||
}
|
||||
|
||||
public ErrorLogger(String file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(SAXParseException error) {
|
||||
if ( this.errors == null ) {
|
||||
errors = new ArrayList<>();
|
||||
}
|
||||
errors.add( error );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fatalError(SAXParseException error) {
|
||||
error( error );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warning(SAXParseException warn) {
|
||||
LOG.parsingXmlWarning( warn.getLineNumber(), warn.getMessage() );
|
||||
}
|
||||
|
||||
public List<SAXParseException> getErrors() {
|
||||
return errors;
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
errors = null;
|
||||
}
|
||||
|
||||
public boolean hasErrors() {
|
||||
return errors != null && errors.size() > 0;
|
||||
}
|
||||
|
||||
public void logErrors() {
|
||||
if ( errors != null ) {
|
||||
for ( SAXParseException e : errors ) {
|
||||
if ( file == null ) {
|
||||
LOG.parsingXmlError( e.getLineNumber(), e.getMessage() );
|
||||
}
|
||||
else {
|
||||
LOG.parsingXmlErrorForFile( file, e.getLineNumber(), e.getMessage() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,123 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.NoSuchElementException;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.events.EndElement;
|
||||
import javax.xml.stream.events.StartElement;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
|
||||
/**
|
||||
* Base class for {@link XMLEventReader}s that want to modify or remove events from the reader stream.
|
||||
* If a {@link StartElement} event is removed the subclass's {@link #filterEvent(XMLEvent, boolean)} will
|
||||
* not see any events until after the matching {@link EndElement} event.
|
||||
*
|
||||
* Note, copied from the uPortal project by permission of author. See
|
||||
* https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/xml/stream/FilteringXMLEventReader.java
|
||||
*
|
||||
* @author Eric Dalquist
|
||||
*/
|
||||
public abstract class FilteringXMLEventReader extends BaseXMLEventReader {
|
||||
private final Deque<QName> prunedElements = new LinkedList<>();
|
||||
private XMLEvent peekedEvent;
|
||||
|
||||
public FilteringXMLEventReader(XMLEventReader reader) {
|
||||
super(reader);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final XMLEvent internalNextEvent() throws XMLStreamException {
|
||||
return this.internalNext(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
try {
|
||||
return peekedEvent != null || (super.hasNext() && this.peek() != null);
|
||||
}
|
||||
catch (XMLStreamException e) {
|
||||
throw new RuntimeException(e.getMessage(), e);
|
||||
}
|
||||
catch (NoSuchElementException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final XMLEvent peek() throws XMLStreamException {
|
||||
if (peekedEvent != null) {
|
||||
return peekedEvent;
|
||||
}
|
||||
|
||||
peekedEvent = internalNext(true);
|
||||
return peekedEvent;
|
||||
}
|
||||
|
||||
protected final XMLEvent internalNext(boolean peek) throws XMLStreamException {
|
||||
XMLEvent event = null;
|
||||
|
||||
if (peekedEvent != null) {
|
||||
event = peekedEvent;
|
||||
peekedEvent = null;
|
||||
return event;
|
||||
}
|
||||
|
||||
do {
|
||||
event = super.getParent().nextEvent();
|
||||
|
||||
//If there are pruned elements in the queue filtering events is still needed
|
||||
if (!prunedElements.isEmpty()) {
|
||||
//If another start element add it to the queue
|
||||
if (event.isStartElement()) {
|
||||
final StartElement startElement = event.asStartElement();
|
||||
prunedElements.push(startElement.getName());
|
||||
}
|
||||
//If end element pop the newest name of the queue and double check that the start/end elements match up
|
||||
else if (event.isEndElement()) {
|
||||
final QName startElementName = prunedElements.pop();
|
||||
|
||||
final EndElement endElement = event.asEndElement();
|
||||
final QName endElementName = endElement.getName();
|
||||
|
||||
if (!startElementName.equals(endElementName)) {
|
||||
throw new IllegalArgumentException("Malformed XMLEvent stream. Expected end element for " + startElementName + " but found end element for " + endElementName);
|
||||
}
|
||||
}
|
||||
|
||||
event = null;
|
||||
}
|
||||
else {
|
||||
final XMLEvent filteredEvent = this.filterEvent(event, peek);
|
||||
|
||||
//If the event is being removed and it is a start element all elements until the matching
|
||||
//end element need to be removed as well
|
||||
if (filteredEvent == null && event.isStartElement()) {
|
||||
final StartElement startElement = event.asStartElement();
|
||||
final QName name = startElement.getName();
|
||||
prunedElements.push(name);
|
||||
}
|
||||
|
||||
event = filteredEvent;
|
||||
}
|
||||
}
|
||||
while (event == null);
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param event The current event
|
||||
* @param peek If the event is from a {@link #peek()} call
|
||||
* @return The event to return, if null is returned the event is dropped from the stream and the next event will be used.
|
||||
*/
|
||||
protected abstract XMLEvent filterEvent(XMLEvent event, boolean peek);
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Describes the origin of an xml document
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public interface Origin extends Serializable {
|
||||
/**
|
||||
* Retrieve the type of origin. This is not a discrete set, but might be something like
|
||||
* {@code file} for file protocol URLs, or {@code resource} for classpath resource lookups.
|
||||
*
|
||||
* @return The origin type.
|
||||
*/
|
||||
String getType();
|
||||
|
||||
/**
|
||||
* The name of the document origin. Interpretation is relative to the type, but might be the
|
||||
* resource name or file URL.
|
||||
*
|
||||
* @return The name.
|
||||
*/
|
||||
String getName();
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Basic implementation of {@link Origin}
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class OriginImpl implements Origin, Serializable {
|
||||
private final String type;
|
||||
private final String name;
|
||||
|
||||
public OriginImpl(String type, String name) {
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import org.hibernate.HibernateException;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*
|
||||
* @deprecated Migrating to boot package; all usages will eventually be replaced by
|
||||
* {@link org.hibernate.boot.UnsupportedOrmXsdVersionException}
|
||||
*/
|
||||
@Deprecated
|
||||
public class UnsupportedOrmXsdVersionException extends HibernateException {
|
||||
public UnsupportedOrmXsdVersionException(String requestedVersion, Origin origin) {
|
||||
super(
|
||||
String.format(
|
||||
"Encountered unsupported orm.xml xsd version [%s] in mapping document [type=%s, name=%s]",
|
||||
requestedVersion,
|
||||
origin.getType(),
|
||||
origin.getName()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import javax.xml.stream.XMLStreamConstants;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* Note, copied from the uPortal project by permission of author. See
|
||||
* https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/xml/stream/XMLStreamConstantsUtils.java
|
||||
*
|
||||
* @author Eric Dalquist
|
||||
*/
|
||||
public final class XMLStreamConstantsUtils {
|
||||
private XMLStreamConstantsUtils() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the human readable event name for the numeric event id
|
||||
*/
|
||||
public static String getEventName(int eventId) {
|
||||
switch (eventId) {
|
||||
case XMLStreamConstants.START_ELEMENT:
|
||||
return "StartElementEvent";
|
||||
case XMLStreamConstants.END_ELEMENT:
|
||||
return "EndElementEvent";
|
||||
case XMLStreamConstants.PROCESSING_INSTRUCTION:
|
||||
return "ProcessingInstructionEvent";
|
||||
case XMLStreamConstants.CHARACTERS:
|
||||
return "CharacterEvent";
|
||||
case XMLStreamConstants.COMMENT:
|
||||
return "CommentEvent";
|
||||
case XMLStreamConstants.START_DOCUMENT:
|
||||
return "StartDocumentEvent";
|
||||
case XMLStreamConstants.END_DOCUMENT:
|
||||
return "EndDocumentEvent";
|
||||
case XMLStreamConstants.ENTITY_REFERENCE:
|
||||
return "EntityReferenceEvent";
|
||||
case XMLStreamConstants.ATTRIBUTE:
|
||||
return "AttributeBase";
|
||||
case XMLStreamConstants.DTD:
|
||||
return "DTDEvent";
|
||||
case XMLStreamConstants.CDATA:
|
||||
return "CDATA";
|
||||
}
|
||||
return "UNKNOWN_EVENT_TYPE";
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.internal.util.xml;
|
||||
|
||||
import org.hibernate.HibernateException;
|
||||
|
||||
/**
|
||||
* An error using XML infrastructure (jaxp, stax, etc).
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class XmlInfrastructureException extends HibernateException {
|
||||
public XmlInfrastructureException(String message) {
|
||||
super( message );
|
||||
}
|
||||
|
||||
public XmlInfrastructureException(String message, Throwable root) {
|
||||
super( message, root );
|
||||
}
|
||||
}
|
|
@ -10,7 +10,6 @@ import org.hibernate.InvalidMappingException;
|
|||
import org.hibernate.boot.MetadataSources;
|
||||
import org.hibernate.boot.registry.BootstrapServiceRegistry;
|
||||
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
|
||||
import org.hibernate.internal.util.xml.UnsupportedOrmXsdVersionException;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||
|
@ -30,7 +29,5 @@ public class NonExistentOrmVersionTest extends BaseUnitTestCase {
|
|||
}
|
||||
catch ( InvalidMappingException expected ) {
|
||||
}
|
||||
catch ( UnsupportedOrmXsdVersionException expected ) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import org.hibernate.Session;
|
|||
import org.hibernate.Transaction;
|
||||
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.internal.util.xml.ErrorLogger;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
|
@ -36,7 +35,7 @@ public class OrmVersion1SupportedTest extends BaseCoreFunctionalTestCase {
|
|||
public LoggerInspectionRule logInspection = new LoggerInspectionRule(
|
||||
Logger.getMessageLogger(
|
||||
CoreMessageLogger.class,
|
||||
ErrorLogger.class.getName()
|
||||
"org.hibernate.internal.util.xml.ErrorLogger"
|
||||
)
|
||||
);
|
||||
|
||||
|
|
Loading…
Reference in New Issue