/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG 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:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.ui.core.uiprocess;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.core.runtime.PlatformObject;
/**
* Delegates {@link IUIMonitor}-calls to the {@link IProgressVisualizerObserver}
* registered instances
*
* @see IProgressVisualizer
*/
public class ProgressVisualizer extends PlatformObject implements IProgressVisualizer {
private final Collection<IProgressVisualizerObserver> observers;
private ProcessInfo processInfo;
/**
* creates a new instance of {@link ProgressVisualizer}
*/
public ProgressVisualizer() {
observers = new ArrayList<IProgressVisualizerObserver>();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.riena.ui.core.uiprocess.IUIProcess#finalUpdateUI()
*/
public void finalUpdateUI() {
final Collection<IProgressVisualizerObserver> currentObservers = new ArrayList<IProgressVisualizerObserver>(
observers);
if (currentObservers.size() > 0) {
for (final IProgressVisualizerObserver anObserver : currentObservers) {
anObserver.finalUpdateUI(this);
anObserver.removeProgressVisualizer(this);
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.riena.ui.core.uiprocess.IUIProcess#initialUpdateUI(int)
*/
public void initialUpdateUI(final int totalWork) {
final Collection<IProgressVisualizerObserver> currentObservers = new ArrayList<IProgressVisualizerObserver>(
observers);
for (final IProgressVisualizerObserver anObserver : currentObservers) {
anObserver.addProgressVisualizer(this);
anObserver.initialUpdateUI(this, totalWork);
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.riena.ui.core.uiprocess.IUIProcess#updateProgress(int)
*/
public void updateProgress(final int progress) {
final Collection<IProgressVisualizerObserver> currentObservers = new ArrayList<IProgressVisualizerObserver>(
observers);
for (final IProgressVisualizerObserver anObserver : currentObservers) {
anObserver.updateProgress(this, progress);
}
}
/**
* @return the processInfo describing the {@link UIProcess}
*/
public ProcessInfo getProcessInfo() {
return processInfo;
}
/**
* @param processInfo
* the processInfo to set
*/
public void setProcessInfo(final ProcessInfo processInfo) {
this.processInfo = processInfo;
}
/**
* @see org.eclipse.riena.ui.core.uiprocess.IProgressVisualizer#addObserver(org
* .eclipse.riena.ui.core.uiprocess.IProgressVisualizerObserver)
*/
public void addObserver(final IProgressVisualizerObserver anObserver) {
if (anObserver != null) {
observers.add(anObserver);
}
}
public void removeObserver(final IProgressVisualizerObserver anObserver) {
observers.remove(anObserver);
}
@Override
public Object getAdapter(final Class adapter) {
if (adapter == IProcessInfoAware.class || adapter == IProgressVisualizer.class) {
return this;
}
return super.getAdapter(adapter);
}
}