/*
* This file is part of Bitsquare.
*
* Bitsquare 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.
*
* Bitsquare 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 Bitsquare. If not, see <http://www.gnu.org/licenses/>.
*/
package io.bitsquare.arbitration;
import io.bitsquare.app.Version;
import io.bitsquare.common.persistance.Persistable;
import io.bitsquare.storage.Storage;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public final class DisputeList<DisputeCase> extends ArrayList<DisputeCase> implements Persistable {
// That object is saved to disc. We need to take care of changes to not break deserialization.
private static final long serialVersionUID = Version.LOCAL_DB_VERSION;
private static final Logger log = LoggerFactory.getLogger(DisputeList.class);
final transient private Storage<DisputeList<DisputeCase>> storage;
transient private ObservableList<DisputeCase> observableList;
public DisputeList(Storage<DisputeList<DisputeCase>> storage) {
this.storage = storage;
DisputeList persisted = storage.initAndGetPersisted(this);
if (persisted != null) {
this.addAll(persisted);
}
observableList = FXCollections.observableArrayList(this);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
try {
in.defaultReadObject();
} catch (Throwable t) {
log.warn("Cannot be deserialized." + t.getMessage());
}
}
@Override
public boolean add(DisputeCase disputeCase) {
if (!super.contains(disputeCase)) {
boolean changed = super.add(disputeCase);
getObservableList().add(disputeCase);
if (changed)
storage.queueUpForSave();
return changed;
} else {
return false;
}
}
@Override
public boolean remove(Object disputeCase) {
boolean changed = super.remove(disputeCase);
getObservableList().remove(disputeCase);
if (changed)
storage.queueUpForSave();
return changed;
}
private ObservableList<DisputeCase> getObservableList() {
if (observableList == null)
observableList = FXCollections.observableArrayList(this);
return observableList;
}
@NotNull
@Override
public String toString() {
return "DisputeList{" +
", observableList=" + observableList +
'}';
}
}