/*******************************************************************************
* 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 java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.rap.rwt.RWT;
import com.eclipsesource.tabris.TabrisClient;
import com.eclipsesource.tabris.internal.ui.rendering.RendererFactory;
import com.eclipsesource.tabris.internal.ui.web.WebRendererFactory;
import com.eclipsesource.tabris.ui.ActionListener;
import com.eclipsesource.tabris.ui.TransitionListener;
public class UIDescriptor implements Serializable {
private final List<PageDescriptor> pageDescriptors;
private final List<ActionDescriptor> actionDescriptors;
private final List<TransitionListener> transitionListeners;
private final List<ActionListener> actionListeners;
public UIDescriptor() {
pageDescriptors = new ArrayList<PageDescriptor>();
actionDescriptors = new ArrayList<ActionDescriptor>();
transitionListeners = new ArrayList<TransitionListener>();
actionListeners = new ArrayList<ActionListener>();
}
public void add( PageDescriptor descriptor ) {
verifyPageDescriptorIsUnique( descriptor );
pageDescriptors.add( descriptor );
}
private void verifyPageDescriptorIsUnique( PageDescriptor descriptor ) {
for( PageDescriptor pageDescriptor : pageDescriptors ) {
if( pageDescriptor.getId().equals( descriptor.getId() ) ) {
throw new IllegalStateException( "Page with id " + descriptor.getId() + " allready exist." );
}
}
}
public PageDescriptor getPageDescriptor( String id ) {
for( PageDescriptor pageDescriptor : pageDescriptors ) {
if( pageDescriptor.getId().equals( id ) ) {
return pageDescriptor;
}
}
return null;
}
public void removePageDescriptor( String id ) {
for( PageDescriptor pageDescriptor : new ArrayList<PageDescriptor>( pageDescriptors ) ) {
if( pageDescriptor.getId().equals( id ) ) {
pageDescriptors.remove( pageDescriptor );
}
}
}
public void add( ActionDescriptor descriptor ) {
verifyActionDescriptorIsUnique( descriptor );
actionDescriptors.add( descriptor );
}
public void removeAction( String actionId ) {
for( ActionDescriptor descriptor : new ArrayList<ActionDescriptor>( actionDescriptors ) ) {
if( descriptor.getId().equals( actionId ) ) {
actionDescriptors.remove( descriptor );
}
}
}
private void verifyActionDescriptorIsUnique( ActionDescriptor descriptor ) {
for( ActionDescriptor actionDescriptor : actionDescriptors ) {
if( actionDescriptor.getId().equals( descriptor.getId() ) ) {
throw new IllegalStateException( "Action with id " + descriptor.getId() + " allready exist." );
}
}
}
public ActionDescriptor getActionDescriptor( String id ) {
for( ActionDescriptor actionDescriptor : actionDescriptors ) {
if( actionDescriptor.getId().equals( id ) ) {
return actionDescriptor;
}
}
return null;
}
public List<PageDescriptor> getRootPages() {
List<PageDescriptor> result = new ArrayList<PageDescriptor>();
for( PageDescriptor pageDescriptor : pageDescriptors ) {
if( pageDescriptor.isTopLevel() ) {
result.add( pageDescriptor );
}
}
return result;
}
public List<ActionDescriptor> getGlobalActions() {
return actionDescriptors;
}
public void addTransitionListener( TransitionListener listener ) {
transitionListeners.add( listener );
}
public void removeTransitionListener( TransitionListener listener ) {
transitionListeners.remove( listener );
}
public List<TransitionListener> getTransitionListeners() {
return transitionListeners;
}
public void addActionListener( ActionListener listener ) {
actionListeners.add( listener );
}
public void removeActionListener( ActionListener listener ) {
actionListeners.remove( listener );
}
public List<ActionListener> getActionListeners() {
return actionListeners;
}
public RendererFactory getRendererFactory() {
if( RWT.getClient() instanceof TabrisClient ) {
return RemoteRendererFactory.getInstance();
}
return WebRendererFactory.getInstance();
}
}