/*
* Copyright 2009-2016 Tilmann Zaeschke. All rights reserved.
*
* This file is part of ZooDB.
*
* ZooDB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* ZooDB 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ZooDB. If not, see <http://www.gnu.org/licenses/>.
*
* See the README and COPYING files for further information.
*/
package org.zoodb.internal.server;
import java.util.ArrayList;
import java.util.List;
/**
* Results of an optimistic verification.
*
* @author Tilmann Zaeschke
*
*/
public class OptimisticTransactionResult {
private boolean isIndexRefreshNeeded;
private boolean isSchemaResetNeeded;
private final List<Long> conflicts;
//private final List<Long> resolvedDeletionConflicts;
public OptimisticTransactionResult(List<Long> conflicts, boolean needsReset,
boolean needsRefresh) {
isIndexRefreshNeeded = needsRefresh;
isSchemaResetNeeded = needsReset;
this.conflicts = conflicts;
}
public OptimisticTransactionResult() {
// empty
this.conflicts = new ArrayList<>();
}
public void add(OptimisticTransactionResult other) {
isIndexRefreshNeeded |= other.isIndexRefreshNeeded;
isSchemaResetNeeded |= other.isSchemaResetNeeded;
if (other.conflicts != null) {
conflicts.addAll(other.conflicts);
}
}
public boolean hasFailed() {
//do not consider schemaRefresh a failure!
if (isSchemaResetNeeded || (conflicts != null && !conflicts.isEmpty())) {
return true;
}
return false;
}
public boolean requiresReset() {
return isSchemaResetNeeded;
}
public boolean requiresRefresh() {
return isIndexRefreshNeeded;
}
public List<Long> getConflicts() {
return conflicts;
}
public void setRefreshRequired(boolean b) {
isIndexRefreshNeeded = b;
}
public void setResetRequired(boolean b) {
isSchemaResetNeeded = b;
}
}