/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.bpel.ui.details.providers;

import java.util.Iterator;
import java.util.List;
import org.eclipse.bpel.model.Process;
import org.eclipse.bpel.model.Scope;
import org.eclipse.bpel.model.Variable;


/**
 * Content provider for variables.
 * 
 * Expects a Process or a Scope as input.
 */
public class LocalVariableContentProvider extends AbstractContentProvider  {

	protected boolean needValidMessage; // if true, shows ONLY variables with valid messages
	
	/**
	 * @param needValidMessage if true, shows ONLY variables with valid messages
	 */
	public LocalVariableContentProvider(boolean needValidMessage) {
		this.needValidMessage = needValidMessage;
	}
	
	public LocalVariableContentProvider() {
		this.needValidMessage = false;
	}
	
	@Override
	public void collectElements(Object input, List list)  {
		
		if (input instanceof Process) {			
			Process process = (Process) input;			
			if (!needValidMessage) {
				list.addAll ( process.getVariables().getChildren() );
				return;
			}

			Iterator it = process.getVariables().getChildren().iterator();
			while (it.hasNext()) {
				Variable var = (Variable) it.next();
				if (var.getMessageType() != null) {
					list.add(var);
				}
			}
						
		} else 	if (input instanceof Scope) {
			
			Scope scope = (Scope) input;
			
			if (scope.getVariables() == null) {
				return ;
			}
			
			Iterator it = scope.getVariables().getChildren().iterator();
			while (it.hasNext()) {
				Variable var = (Variable) it.next();
				if (var.getMessageType() != null || var.getType() != null)
					list.add(var);
			}			
		}	
		
	}

}
