/******************************************************************************* * Copyright (c) 2012 EclipseSource and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * EclipseSource - initial API and implementation ******************************************************************************/ package com.eclipsesource.tabris.internal; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class DrawingsCache implements Serializable { private final List<String> cachedDrawings; private final List<String> removedDrawings; private final Object lock = new Object(); public DrawingsCache() { cachedDrawings = new ArrayList<String>(); removedDrawings = new ArrayList<String>(); } public void clear() { synchronized( lock ) { cachedDrawings.clear(); removedDrawings.clear(); } } public void clearCachedDrawings() { synchronized( lock ) { cachedDrawings.clear(); } } public boolean hasUndo() { return !cachedDrawings.isEmpty(); } public void undo() { synchronized( lock ) { int lastObjectIndex = cachedDrawings.size() - 1; String lastObject = cachedDrawings.remove( lastObjectIndex ); removedDrawings.add( lastObject ); } } public boolean hasRedo() { return !removedDrawings.isEmpty(); } public void redo() { synchronized( lock ) { int lastObjectIndex = removedDrawings.size() - 1; String lastObject = removedDrawings.remove( lastObjectIndex ); cachedDrawings.add( lastObject ); } } public void clearRemoved() { synchronized( lock ) { removedDrawings.clear(); } } public void cache( String drawings ) { synchronized( lock ) { if( !cachedDrawings.contains( drawings ) ) { cachedDrawings.add( drawings ); } } } public void cacheAll( List<String> drawings ) { synchronized( lock ) { cachedDrawings.addAll( drawings ); } } public void clearRemovedDrawings() { synchronized( lock ) { removedDrawings.clear(); } } public void addAllRemoved( List<String> removedDrawings ) { synchronized( lock ) { this.removedDrawings.addAll( removedDrawings ); } } public List<String> getCachedDrawings() { return new ArrayList<String>( cachedDrawings ); } public List<String> getRemovedDrawings() { return new ArrayList<String>( removedDrawings ); } }