/*******************************************************************************
 * Copyright (c) 2001, 2006 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.wst.wsdl.ui.internal.edit;

import java.util.Iterator;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.wst.common.core.search.scope.SearchScope;
import org.eclipse.wst.common.ui.internal.search.dialogs.IComponentList;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.Import;
import org.eclipse.wst.wsdl.ui.internal.search.IWSDLSearchConstants;

public class WSDLMessageSearchListProvider extends WSDLBaseSearchListProvider {
	private Definition definition;
	
	public WSDLMessageSearchListProvider(Definition definition) {
		this.definition = definition;
	}
	public void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm) {
		// Grab explictly defined components
		createWSDLComponentObjects(list, definition.getEMessages(), IWSDLSearchConstants.MESSAGE_META_NAME);
		
		// Grab directly imported components
		Iterator importsIt = getWSDLFileImports(definition.getEImports()).iterator();
		while (importsIt.hasNext()) {
			Import importItem = (Import) importsIt.next();
			Definition importDefinition = importItem.getEDefinition();
			List importedComponents = importDefinition.getEMessages();
			
			createWSDLComponentObjects(list, importedComponents, IWSDLSearchConstants.MESSAGE_META_NAME);
		}
		
		if (scope != null) {
			WSDLComponentFinder finder = new WSDLComponentFinder(IWSDLSearchConstants.MESSAGE_META_NAME);
			Iterator it = finder.getWorkbenchResourceComponents(scope).iterator();
			while (it.hasNext()) {
				list.add(it.next());
			}
		}
	}
}