/******************************************************************************* * Copyright (c) 2013 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.ui; import static com.eclipsesource.tabris.internal.Clauses.when; import static com.eclipsesource.tabris.internal.Clauses.whenNull; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import com.eclipsesource.tabris.internal.ui.rendering.PageRenderer; public class PageFlow implements Serializable { private final List<PageRenderer> renderers; public PageFlow( PageRenderer root ) { whenNull( root ).throwIllegalArgument( "Root must not be null" ); renderers = new ArrayList<PageRenderer>(); renderers.add( root ); } public PageRenderer getCurrentRenderer() { return renderers.get( getIndexOfLastRenderer() ); } public PageRenderer getPreviousRenderer() { int indexOfLastPage = getIndexOfLastRenderer(); if( indexOfLastPage > 0 ) { return renderers.get( indexOfLastPage - 1 ); } return null; } public PageRenderer getRootRenderer() { return renderers.get( 0 ); } public void add( PageRenderer renderer ) { renderers.add( renderer ); } public PageRenderer pop() { when( renderers.size() <= 1 ).throwIllegalState( "Can not remove root page." ); return renderers.remove( getIndexOfLastRenderer() ); } private int getIndexOfLastRenderer() { return renderers.size() - 1; } public void destroy() { for( PageRenderer renderer : renderers ) { PageDescriptor descriptor = renderer.getDescriptor(); if( !descriptor.isTopLevel() ) { renderer.destroy(); } } renderers.clear(); } public List<PageRenderer> getAllRenderers() { return renderers; } }