/************************************************************************ * Copyright (c) 2014 IoT-Solutions e.U. * * 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 iot.jcypher.graph; import iot.jcypher.graph.internal.ChangeListener; import java.util.ArrayList; import java.util.List; public abstract class PersistableItem { private List<ChangeListener> changeListeners; protected SyncState syncState; /** * removes this item */ public void remove() { SyncState oldState = this.syncState; if (this.syncState == SyncState.NEW || this.syncState == SyncState.NEW_REMOVED) this.syncState = SyncState.NEW_REMOVED; else this.syncState = SyncState.REMOVED; if (oldState != this.syncState) fireChanged(oldState, this.syncState); } void addChangeListener(ChangeListener listener) { if (this.changeListeners == null) this.changeListeners = new ArrayList<ChangeListener>(); if (!this.changeListeners.contains(listener)) this.changeListeners.add(listener); } void removeChangeListener(ChangeListener listener) { if (this.changeListeners != null) this.changeListeners.remove(listener); } protected void fireChanged(SyncState oldState, SyncState newState) { if (this.changeListeners != null) { ArrayList<ChangeListener> lstnrs = new ArrayList<ChangeListener>(); lstnrs.addAll(this.changeListeners); for (ChangeListener lstnr : lstnrs) { lstnr.changed(this, oldState, newState); } } } void notifyState() { if (this.changeListeners != null) { ArrayList<ChangeListener> lstnrs = new ArrayList<ChangeListener>(); lstnrs.addAll(this.changeListeners); for (ChangeListener lstnr : lstnrs) { lstnr.changed(this, this.syncState, this.syncState); } } } SyncState getSyncState() { return syncState; } void setSyncState(SyncState syncState) { this.syncState = syncState; } abstract void setToSynchronized(); }