package com.webobjects.eocontrol;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.ListIterator;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSComparator;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.foundation._NSUtilities;
/**
* Reimp of the supplied class which will have some optimizations.
*/
public class _EOCheapCopyMutableArray extends NSMutableArray implements EOFaulting {
public static final Class _CLASS = _NSUtilities._classWithFullySpecifiedName("com.webobjects.eocontrol._EOCheapCopyMutableArray");
static final long serialVersionUID = -2000885307L;
private transient EOFaultHandler _faultHandler;
private transient _EOCheapCopyArray _immutableCopy;
public _EOCheapCopyMutableArray() {
}
public _EOCheapCopyMutableArray(NSArray otherArray) {
super(otherArray);
}
public _EOCheapCopyMutableArray(EOFaultHandler handler) {
_faultHandler = handler;
}
public void willRead() {
if (_faultHandler != null) {
EOFaultHandler localHandler = _faultHandler;
localHandler.completeInitializationOfObject(this);
if (_faultHandler != null)
return;
_setMustRecomputeHash(true);
}
}
public boolean isFault() {
return _faultHandler != null;
}
public void clearFault() {
_faultHandler = null;
}
public void turnIntoFault(EOFaultHandler handler) {
_faultHandler = handler;
_initializeWithCapacity(0);
}
public EOFaultHandler faultHandler() {
return _faultHandler;
}
@Override
public Object clone() {
if (_faultHandler != null)
return _faultHandler._mutableCloneForArray(this);
return new _EOCheapCopyMutableArray(this);
}
@Override
public NSMutableArray mutableClone() {
if (_faultHandler != null) {
return _faultHandler._mutableCloneForArray(this);
}
return new _EOCheapCopyMutableArray(this);
}
@Override
public NSArray immutableClone() {
if (_faultHandler != null)
return _faultHandler._immutableCloneForArray(this);
if (_immutableCopy == null)
_immutableCopy = new _EOCheapCopyArray(this);
return _immutableCopy;
}
public void _setCopy(_EOCheapCopyArray copy) {
_immutableCopy = copy;
}
@Override
protected Object[] objectsNoCopy() {
willRead();
return super.objectsNoCopy();
}
@Override
public int count() {
willRead();
return super.count();
}
@Override
public Object objectAtIndex(int index) {
willRead();
return super.objectAtIndex(index);
}
@Override
public Enumeration objectEnumerator() {
willRead();
return super.objectEnumerator();
}
@Override
public Enumeration reverseObjectEnumerator() {
willRead();
return super.reverseObjectEnumerator();
}
@Override
public void setArray(NSArray otherArray) {
willRead();
super.setArray(otherArray);
_immutableCopy = null;
}
@Override
public void addObject(Object object) {
willRead();
super.addObject(object);
_immutableCopy = null;
}
@Override
public void addObjects(Object... objects) {
willRead();
super.addObjects(objects);
_immutableCopy = null;
}
@Override
public Object replaceObjectAtIndex(Object object, int index) {
willRead();
Object result = super.replaceObjectAtIndex(object, index);
_immutableCopy = null;
return result;
}
@Override
public void insertObjectAtIndex(Object object, int index) {
willRead();
super.insertObjectAtIndex(object, index);
_immutableCopy = null;
}
@Override
public Object removeObjectAtIndex(int index) {
willRead();
Object result = super.removeObjectAtIndex(index);
_immutableCopy = null;
return result;
}
@Override
public void removeAllObjects() {
willRead();
super.removeAllObjects();
_immutableCopy = null;
}
@Override
public void sortUsingComparator(NSComparator comparator) throws com.webobjects.foundation.NSComparator.ComparisonException {
willRead();
super.sortUsingComparator(comparator);
_immutableCopy = null;
}
@Override
public String toString() {
if (isFault())
return getClass().getName() + "[" + Integer.toHexString(System.identityHashCode(this)) + "]";
return super.toString();
}
private void writeObject(ObjectOutputStream s) throws IOException {
willRead();
s.defaultWriteObject();
}
@Override
public Iterator iterator() {
willRead();
return super.iterator();
}
@Override
public ListIterator listIterator() {
willRead();
return super.listIterator();
}
@Override
public ListIterator listIterator(int index) {
willRead();
return super.listIterator(index);
}
}