| /******************************************************************************* |
| * 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.xsd.ui.internal.editor.search; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.wst.common.core.search.SearchEngine; |
| import org.eclipse.wst.common.core.search.pattern.QualifiedName; |
| import org.eclipse.wst.common.core.search.scope.SearchScope; |
| import org.eclipse.wst.common.ui.internal.search.dialogs.IComponentList; |
| import org.eclipse.wst.xsd.ui.internal.search.IXSDSearchConstants; |
| import org.eclipse.xsd.XSDSchema; |
| import org.eclipse.xsd.XSDTypeDefinition; |
| import org.eclipse.xsd.impl.XSDSchemaImpl; |
| import org.eclipse.xsd.util.XSDConstants; |
| public class XSDTypesSearchListProvider extends XSDSearchListProvider |
| { |
| protected IXSDTypesFilter builtInFilter; |
| /** |
| * Determines if we should use the filter This us used to turn the filter on |
| * and off |
| */ |
| protected boolean supportFilter = true; |
| private boolean showComplexTypes = true; |
| |
| public XSDTypesSearchListProvider(IFile currentFile, XSDSchema[] schemas) |
| { |
| super(currentFile, schemas); |
| } |
| |
| public void populateComponentList(IComponentList list, SearchScope scope, IProgressMonitor pm) |
| { |
| // first we add the 'built in' types |
| // |
| XSDSchema schemaForSchema = XSDSchemaImpl.getSchemaForSchema(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001); |
| for (Iterator i = schemaForSchema.getSimpleTypeIdMap().values().iterator(); i.hasNext();) |
| { |
| XSDTypeDefinition td = (XSDTypeDefinition) i.next(); |
| if (builtInFilter == null || !builtInFilter.shouldFilterOut(td)) |
| { |
| list.add(td); |
| } |
| } |
| // now we traverse the types already defined within the visible schemas |
| // we do this in addition to the component search since this should execute |
| // very quickly and there's a good chance the user wants to select a time |
| // that's |
| // already imported/included |
| // TODO (cs) ensure we don't add duplicates when we proceed to use the |
| // search list |
| // |
| List visitedSchemas = new ArrayList(); |
| for (int i = 0; i < schemas.length; i++) |
| { |
| XSDSchema schema = schemas[i]; |
| QualifiedName kind = showComplexTypes ? IXSDSearchConstants.TYPE_META_NAME : IXSDSearchConstants.SIMPLE_TYPE_META_NAME; |
| ComponentCollectingXSDVisitor visitor = new ComponentCollectingXSDVisitor(list, kind); |
| visitor.visitSchema(schema, true); |
| visitedSchemas.addAll(visitor.getVisitedSchemas()); |
| } |
| // finally we call the search API's to do a potentially slow search |
| // |
| if (scope != null) |
| { |
| populateComponentListUsingSearch(list, scope, pm, createFileMap(visitedSchemas)); |
| } |
| } |
| |
| private void populateComponentListUsingSearch(IComponentList list, SearchScope scope, IProgressMonitor pm, HashMap files) |
| { |
| SearchEngine searchEngine = new SearchEngine(); |
| InternalSearchRequestor requestor = new InternalSearchRequestor(list, files); |
| if (showComplexTypes) |
| { |
| findMatches(searchEngine, requestor, scope, IXSDSearchConstants.COMPLEX_TYPE_META_NAME); |
| } |
| findMatches(searchEngine, requestor, scope, IXSDSearchConstants.SIMPLE_TYPE_META_NAME); |
| } |
| |
| |
| public void _populateComponentListQuick(IComponentList list, IProgressMonitor pm) |
| { |
| } |
| |
| public void turnBuiltInFilterOn(boolean option) |
| { |
| supportFilter = option; |
| } |
| |
| public void setBuiltInFilter(IXSDTypesFilter filter) |
| { |
| this.builtInFilter = filter; |
| } |
| |
| public void showComplexTypes(boolean show) |
| { |
| showComplexTypes = show; |
| } |
| } |