org.modeshape.schematic.internal.document.ObservableArrayEditor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of modeshape-schematic Show documentation
Show all versions of modeshape-schematic Show documentation
API for storing JSON/BSON documents and JSON Schemas support
The newest version!
/*
* ModeShape (http://www.modeshape.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.modeshape.schematic.internal.document;
import java.util.Collection;
import java.util.List;
import org.modeshape.schematic.document.Array;
import org.modeshape.schematic.document.EditableArray;
import org.modeshape.schematic.document.EditableDocument;
import org.modeshape.schematic.document.Path;
import org.modeshape.schematic.internal.delta.AddValueIfAbsentOperation;
import org.modeshape.schematic.internal.delta.AddValueOperation;
import org.modeshape.schematic.internal.delta.ClearOperation;
import org.modeshape.schematic.internal.delta.DocumentObserver;
import org.modeshape.schematic.internal.delta.RemoveAllValuesOperation;
import org.modeshape.schematic.internal.delta.RemoveAtIndexOperation;
import org.modeshape.schematic.internal.delta.RemoveValueOperation;
import org.modeshape.schematic.internal.delta.RetainAllValuesOperation;
import org.modeshape.schematic.internal.delta.SetValueOperation;
public class ObservableArrayEditor extends ArrayEditor {
private static final long serialVersionUID = 1L;
private final Path path;
private final DocumentObserver observer;
public ObservableArrayEditor( MutableArray array,
Path path,
DocumentObserver observer,
DocumentValueFactory factory ) {
super(array, factory);
this.path = path;
this.observer = observer;
}
@Override
protected boolean doAddAll( Collection> c ) {
return doAddAll(size(), c);
}
@Override
protected boolean doAddAll( int index,
Collection> c ) {
c = Utility.unwrapValues(c);
if (super.doAddAll(index, c)) {
for (Object value : c) {
value = Utility.unwrap(value);
observer.addOperation(new AddValueOperation(this.path, value));
}
return true;
}
return false;
}
@Override
protected void doAddValue( int index,
Object value ) {
value = Utility.unwrap(value);
super.doAddValue(index, value);
observer.addOperation(new AddValueOperation(this.path, value, index));
}
@Override
protected int doAddValue( Object value ) {
value = Utility.unwrap(value);
int index = super.doAddValue(value);
observer.addOperation(new AddValueOperation(this.path, value));
return index;
}
@Override
protected boolean doAddValueIfAbsent( Object value ) {
value = Utility.unwrap(value);
if (super.doAddValueIfAbsent(value)) {
observer.addOperation(new AddValueIfAbsentOperation(this.path, value));
return true;
}
return false;
}
@Override
protected void doClear() {
super.doClear();
observer.addOperation(new ClearOperation(this.path));
}
@Override
protected List doRemoveAll( Collection> c ) {
c = Utility.unwrapValues(c);
List removed = super.doRemoveAll(c);
observer.addOperation(new RemoveAllValuesOperation(this.path, c));
return removed;
}
@Override
protected Object doRemoveValue( int index ) {
Object removed = super.doRemoveValue(index);
if (removed != null) {
observer.addOperation(new RemoveAtIndexOperation(this.path, index));
}
return removed;
}
@Override
protected boolean doRemoveValue( Object value ) {
value = Utility.unwrap(value);
if (super.doRemoveValue(value)) {
observer.addOperation(new RemoveValueOperation(this.path, value));
}
return false;
}
@Override
protected List doRetainAll( Collection> c ) {
c = Utility.unwrapValues(c);
List removed = super.doRetainAll(c);
observer.addOperation(new RetainAllValuesOperation(this.path, c));
return removed;
}
@Override
protected Object doSetValue( int index,
Object value ) {
value = Utility.unwrap(value);
Object oldValue = super.doSetValue(index, value);
observer.addOperation(new SetValueOperation(path, value, index));
return oldValue;
}
@Override
protected EditableDocument createEditableDocument( MutableDocument document,
int index,
DocumentValueFactory factory ) {
return new ObservableDocumentEditor(document, path.with(Integer.toString(index)), observer, factory);
}
@Override
protected EditableArray createEditableArray( MutableArray array,
int index,
DocumentValueFactory factory ) {
return new ObservableArrayEditor(array, path.with(Integer.toString(index)), observer, factory);
}
@Override
protected EditableArray createEditableSublist( MutableArray array,
DocumentValueFactory factory ) {
return new ObservableArrayEditor(array, path, observer, factory);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy