/*******************************************************************************
 * Copyright (c) 2005, 2012 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.messageproperties.PropertyAlias;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.util.WSDLResourceImpl;

/**
 * Content provider for PropertyAliases (NOT Properties!).
 * 
 * Expects a Definition or Process as input.
 */
public class PropertyAliasContentProvider extends AbstractContentProvider {

	@Override
	public void collectElements(Object input, List list )  {
		
		if (input instanceof Definition) {
			
			Definition def = (Definition)input;
			for (Iterator it = def.getEExtensibilityElements().iterator(); it.hasNext(); ) {
				Object object = it.next();
				if (object instanceof PropertyAlias)  {
					list.add(object);
				}
			}	
			
		} else if (input instanceof Process) {
			
			// Walk all WSDL resources in the ResourceSet and scan each one for Properties.
			// This code is similar to BPELUtil.getPropertyAliasesForMessageType().
			
			// TODO: there should be a better way, e.g. builder (ctc.index) keeping a map
			// of what properties and propertyAliases are available and where?
			
			ResourceSet resourceSet = ((Process)input).eResource().getResourceSet();			
			for (Iterator it = resourceSet.getResources().iterator(); it.hasNext(); ) {
				Resource resource = (Resource)it.next();
				if (resource instanceof WSDLResourceImpl) {
					for (TreeIterator treeIt = resource.getAllContents(); treeIt.hasNext(); ) {
						Object object = treeIt.next();
						if (object instanceof PropertyAlias)  {
							list.add(object);
						}
					}
				}
			}			
		}
		
	}
}
