/*
* ToroDB
* Copyright © 2014 8Kdata Technology (www.8kdata.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.torodb.torod.pipeline;
import com.torodb.core.TableRef;
import com.torodb.core.annotations.DoNotChange;
import com.torodb.core.transaction.metainf.FieldType;
import com.torodb.core.transaction.metainf.ImmutableMetaDocPart;
import com.torodb.core.transaction.metainf.ImmutableMetaField;
import com.torodb.core.transaction.metainf.ImmutableMetaIdentifiedDocPartIndex;
import com.torodb.core.transaction.metainf.ImmutableMetaScalar;
import com.torodb.core.transaction.metainf.MetaElementState;
import com.torodb.core.transaction.metainf.MetaField;
import com.torodb.core.transaction.metainf.MetaIdentifiedDocPartIndex;
import com.torodb.core.transaction.metainf.MetaIndex;
import com.torodb.core.transaction.metainf.MetaScalar;
import com.torodb.core.transaction.metainf.MutableMetaDocPart;
import com.torodb.core.transaction.metainf.MutableMetaDocPartIndex;
import org.jooq.lambda.tuple.Tuple2;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Stream;
/**
*
*/
public class BatchMetaDocPart implements MutableMetaDocPart {
private final MutableMetaDocPart delegate;
private final ArrayList<ImmutableMetaField> fieldsChangesOnBatch = new ArrayList<>();
private final ArrayList<ImmutableMetaScalar> scalarChangesOnBatch = new ArrayList<>();
private final Consumer<BatchMetaDocPart> changeConsumer;
private boolean createdOnCurrentBatch;
public BatchMetaDocPart(MutableMetaDocPart delegate, Consumer<BatchMetaDocPart> changeConsumer,
boolean createdOnCurrentBatch) {
this.delegate = delegate;
this.createdOnCurrentBatch = createdOnCurrentBatch;
this.changeConsumer = changeConsumer;
}
public void newBatch() {
fieldsChangesOnBatch.clear();
scalarChangesOnBatch.clear();
createdOnCurrentBatch = false;
}
public boolean isCreatedOnCurrentBatch() {
return createdOnCurrentBatch;
}
public void setCreatedOnCurrentBatch(boolean createdOnCurrentBatch) {
this.createdOnCurrentBatch = createdOnCurrentBatch;
}
@DoNotChange
public Iterable<ImmutableMetaField> getOnBatchModifiedMetaFields() {
return fieldsChangesOnBatch;
}
@DoNotChange
public Iterable<ImmutableMetaScalar> getOnBatchModifiedMetaScalars() {
return scalarChangesOnBatch;
}
@Override
public ImmutableMetaField addMetaField(String name, String identifier, FieldType type) throws
IllegalArgumentException {
ImmutableMetaField newMetaField = delegate.addMetaField(name, identifier, type);
fieldsChangesOnBatch.add(newMetaField);
changeConsumer.accept(this);
return newMetaField;
}
@Override
public ImmutableMetaScalar addMetaScalar(String identifier, FieldType type) throws
IllegalArgumentException {
ImmutableMetaScalar newMetaScalar = delegate.addMetaScalar(identifier, type);
scalarChangesOnBatch.add(newMetaScalar);
changeConsumer.accept(this);
return newMetaScalar;
}
@Override
public ImmutableMetaField getMetaFieldByNameAndType(String fieldName, FieldType type) {
return delegate.getMetaFieldByNameAndType(fieldName, type);
}
@Override
public Stream<? extends ImmutableMetaField> streamMetaFieldByName(String fieldName) {
return delegate.streamMetaFieldByName(fieldName);
}
@Override
public ImmutableMetaField getMetaFieldByIdentifier(String fieldId) {
return delegate.getMetaFieldByIdentifier(fieldId);
}
@Override
public Stream<? extends ImmutableMetaField> streamFields() {
return delegate.streamFields();
}
@Override
public Iterable<? extends ImmutableMetaField> getAddedMetaFields() {
return delegate.getAddedMetaFields();
}
@Override
public ImmutableMetaField getAddedFieldByIdentifier(String identifier) {
return delegate.getAddedFieldByIdentifier(identifier);
}
@Override
public ImmutableMetaDocPart immutableCopy() {
return delegate.immutableCopy();
}
@Override
public TableRef getTableRef() {
return delegate.getTableRef();
}
@Override
public String getIdentifier() {
return delegate.getIdentifier();
}
@Override
public Iterable<? extends ImmutableMetaScalar> getAddedMetaScalars() {
return delegate.getAddedMetaScalars();
}
@Override
public Stream<? extends MetaScalar> streamScalars() {
return delegate.streamScalars();
}
@Override
public Stream<? extends MetaIdentifiedDocPartIndex> streamIndexes() {
return delegate.streamIndexes();
}
@Override
public MetaIdentifiedDocPartIndex getMetaDocPartIndexByIdentifier(String indexId) {
return delegate.getMetaDocPartIndexByIdentifier(indexId);
}
@Override
public MutableMetaDocPartIndex addMetaDocPartIndex(boolean unique)
throws IllegalArgumentException {
return delegate.addMetaDocPartIndex(unique);
}
@Override
@SuppressWarnings("checkstyle:LineLength")
public Iterable<Tuple2<ImmutableMetaIdentifiedDocPartIndex, MetaElementState>> getModifiedMetaDocPartIndexes() {
return delegate.getModifiedMetaDocPartIndexes();
}
@Override
public Iterable<MutableMetaDocPartIndex> getAddedMutableMetaDocPartIndexes() {
return delegate.getAddedMutableMetaDocPartIndexes();
}
@Override
public boolean removeMetaDocPartIndexByIdentifier(String indexId) {
return delegate.removeMetaDocPartIndexByIdentifier(indexId);
}
@Override
public MutableMetaDocPartIndex getOrCreatePartialMutableDocPartIndexForMissingIndexAndNewField(
MetaIndex missingIndex, List<String> identifiers, MetaField newField) {
return delegate.getOrCreatePartialMutableDocPartIndexForMissingIndexAndNewField(missingIndex,
identifiers, newField);
}
@Override
public String toString() {
return defautToString();
}
}