blob: 3673cbb8e8ed89eb4839652f87913458ef944406 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 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.dialogs.types;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.wst.common.core.search.SearchEngine;
import org.eclipse.wst.common.core.search.SearchMatch;
//import org.eclipse.wst.common.core.search.SearchParticipant;
//import org.eclipse.wst.common.core.search.SearchPlugin;
import org.eclipse.wst.common.core.search.pattern.QualifiedName;
import org.eclipse.wst.common.core.search.pattern.SearchPattern;
import org.eclipse.wst.common.core.search.scope.ProjectSearchScope;
import org.eclipse.wst.common.core.search.scope.SearchScope;
import org.eclipse.wst.common.core.search.scope.WorkspaceSearchScope;
import org.eclipse.wst.common.core.search.util.CollectingSearchRequestor;
//import org.eclipse.wst.wsdl.util.WSDLConstants;
import org.eclipse.wst.xml.core.internal.search.XMLComponentDeclarationPattern;
import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLComponentFinder;
import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLComponentSpecification;
public class WSDLComponentFinder extends XMLComponentFinder {
QualifiedName metaName;
public WSDLComponentFinder(QualifiedName metaName) {
this.metaName = metaName;
}
protected void findComponents(SearchEngine searchEngine, List list, int scope)
{
SearchScope searchScope = new WorkspaceSearchScope();
if (scope == ENCLOSING_PROJECT_SCOPE)
{
searchScope = new ProjectSearchScope(currentIFile.getProject().getLocation());
}
try {
CollectingSearchRequestor requestor = new CollectingSearchRequestor();
XMLComponentDeclarationPattern pattern = new XMLComponentDeclarationPattern(new QualifiedName("*", "*"), metaName, SearchPattern.R_PATTERN_MATCH);
// TODO (cs) rethink the commented out code below. Is there some reason for narrowing to list of search particpants?
// It seems the only benefit may be to filter our xsd component declarations that aren't defined
// in stand alone wsdl documents. Perhaps it's best to do this with an additional property arg on the
// declaration pattern or perhaps simply doing some 'post' filtering.
//
//String participantId = metaName.getNamespace().equals(WSDLConstants.WSDL_NAMESPACE_URI) ?
// "org.eclipse.wst.wsdl.search.WSDLSearchParticipant" :
// "org.eclipse.wst.xsd.search.XSDSearchParticipant";
//SearchParticipant particpant = SearchPlugin.getDefault().getSearchParticipant(participantId);
//SearchParticipant[] participants = { particpant };
// TODO (cs) I'm betting we'll need to provide some hook here to allow extenders to configure
// the search options. Currently we just pass in null.
searchEngine.search(pattern, requestor, searchScope, null, new NullProgressMonitor());
for (Iterator i = requestor.getResults().iterator(); i.hasNext(); )
{
SearchMatch match = (SearchMatch)i.next();
XMLComponentSpecification spec = new XMLComponentSpecification(metaName);
spec.setFileLocation(match.getFile().getLocation().toString());
Object o = match.map.get("name");
if (o != null && o instanceof QualifiedName)
{
QualifiedName qualifiedName = (QualifiedName)o;
if (qualifiedName.getLocalName() != null)
{
spec.addAttributeInfo("name", qualifiedName.getLocalName());
spec.setTargetNamespace(qualifiedName.getNamespace());
list.add(spec);
}
}
}
} catch (CoreException e) {
e.printStackTrace();
//status.add(e.getStatus());
}
}
public List getWorkbenchResourceComponents(int scope) {
List list = new ArrayList();
SearchEngine searchEngine = new SearchEngine();
findComponents(searchEngine, list, scope);
return list;
}
}