Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchParticipant.java')
-rw-r--r--bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchParticipant.java387
1 files changed, 0 insertions, 387 deletions
diff --git a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchParticipant.java b/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchParticipant.java
deleted file mode 100644
index b709f58b74..0000000000
--- a/bundles/org.eclipse.wst.xml.core/src-search/org/eclipse/wst/xml/core/internal/search/XMLSearchParticipant.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 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.xml.core.internal.search;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.wst.common.core.search.SearchMatch;
-import org.eclipse.wst.common.core.search.SearchParticipant;
-import org.eclipse.wst.common.core.search.SearchRequestor;
-import org.eclipse.wst.common.core.search.document.ComponentDeclarationEntry;
-import org.eclipse.wst.common.core.search.document.Entry;
-import org.eclipse.wst.common.core.search.document.FileReferenceEntry;
-import org.eclipse.wst.common.core.search.document.SearchDocument;
-import org.eclipse.wst.common.core.search.document.SearchDocumentSet;
-import org.eclipse.wst.common.core.search.pattern.ComponentSearchPattern;
-import org.eclipse.wst.common.core.search.pattern.FileReferencePattern;
-import org.eclipse.wst.common.core.search.pattern.SearchPattern;
-import org.eclipse.wst.common.core.search.scope.ContentTypeSearchScope;
-import org.eclipse.wst.common.core.search.scope.SearchScope;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver;
-import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
-import org.eclipse.wst.xml.core.internal.search.impl.IXMLSearchConstants;
-import org.eclipse.wst.xml.core.internal.search.impl.XMLSearchDocument;
-import org.eclipse.wst.xml.core.internal.search.matching.PatternMatcher;
-import org.eclipse.wst.xml.core.internal.search.matching.XMLSearchPatternMatcher;
-import org.eclipse.wst.xml.core.internal.search.quickscan.XMLQuickScan;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- *
- */
-public abstract class XMLSearchParticipant extends SearchParticipant {
-
- protected static final boolean debugPerf = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.xml.core.internal.search/perf")); //$NON-NLS-1$ //$NON-NLS-2$
-
- public XMLSearchParticipant() {
- super();
- }
-
-
- /*
- public boolean initialize(SearchPattern pattern, String[] contentTypes){
-
- super.initialize(pattern, contentTypes);
- this.supportedContentTypes = contentTypes;
-
- if(pattern instanceof XMLComponentSearchPattern){
- return true;
- }
- return false;
- }*/
-
-
-
- public SearchDocument createSearchDocument(String documentPath) {
-
- return new XMLSearchDocument(documentPath, this);
-
- }
-
- public String getDescription() {
- return "XML search participant"; //$NON-NLS-1$
- }
-
-
-
- private void locateMatches(SearchPattern pattern, SearchDocument document,
- SearchRequestor requestor, Map searchOptions, IProgressMonitor monitor) {
-
- // TODO... utilize search options (that should get passed down via the SearchEngine)
- // to specify if accurate source coordinates are req'd if not, simply use the SAX results
- //
- if (pattern.getMatchRule() == SearchPattern.R_PATTERN_MATCH)
- {
- IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(document.getPath()));
- // TODO.. don't assume the category is COMPONENT_DECL... handle any arbitarty category
- Entry[] entries = document.getEntries(IXMLSearchConstants.COMPONENT_DECL, null, 0);
- for (int i = 0; i < entries.length; i++)
- {
- // TODO.. don't assume this is just a component declaration entry
- ComponentDeclarationEntry entry = (ComponentDeclarationEntry)entries[i];
- SearchMatch searchMatch = new SearchMatch(null, 0, 0, file);
- searchMatch.map.put("name", entry.getName()); //$NON-NLS-1$
- searchMatch.map.put("metaName", entry.getMetaName()); //$NON-NLS-1$
- try
- {
- requestor.acceptSearchMatch(searchMatch);
- }
- catch (Exception e)
- {
- }
- }
- }
- else
- { if (document.getModel() instanceof IDOMModel) {
- IDOMModel domModel = (IDOMModel) document.getModel();
- IDOMElement contextNode = (IDOMElement) domModel.getDocument()
- .getDocumentElement();
- DOMVisitor visitor = new DOMVisitor(document.getPath(), pattern,
- requestor);
- visitor.visit(contextNode);
- }
- }
- }
-
- private PatternMatcher getAdapter(Object adaptableObject, Class adapterType) {
- if (PatternMatcher.class.equals(adapterType) &&
- (adaptableObject instanceof XMLSearchPattern ||
- adaptableObject instanceof XMLComponentSearchPattern) ) {
- return new XMLSearchPatternMatcher(this);
- }
- return null;
- }
-
- private class DOMVisitor {
-
- String path;
- SearchPattern pattern;
- SearchRequestor requestor;
- PatternMatcher matcher;
-
-
- protected DOMVisitor(String path, SearchPattern pattern,
- SearchRequestor requestor) {
- super();
- this.path = path;
- this.pattern = pattern;
-
- matcher = (PatternMatcher)pattern.getAdapter(PatternMatcher.class);
- if(matcher == null){
- matcher = getAdapter(pattern, PatternMatcher.class);
- }
- this.requestor = requestor;
- }
-
- private void visit(Node node) {
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- match((Element)node);
- NodeList nodeList = node.getChildNodes();
- for (int i = 0; i < nodeList.getLength(); i++) {
- Node aNode = nodeList.item(i);
- visit(aNode);
- }
- }
- }
-
- private void match(Element node) {
- IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(
- new Path(path));
- if(matcher != null){
- matcher.locateMatches(pattern, file, node, requestor);
- }
-
-
- }
-
- }
-
- public SearchScope selectDocumentLocations(SearchPattern pattern, SearchScope scope, Map searchOptions, IProgressMonitor monitor) {
- /*
- * gate #1: reduce the scope to the files with the content type that
- * could be searched using this participant
- */
- String[] contentTypes = getSupportedContentTypes();
- if(contentTypes != null && contentTypes.length > 0){
- scope = new ContentTypeSearchScope(scope, contentTypes);
- }
- return super.selectDocumentLocations(pattern, scope, searchOptions, monitor);
- }
-
- public abstract ComponentSearchContributor getSearchContributor();
-
-
- public void beginSearching(SearchPattern pattern, Map searchOptions) {
-
- super.beginSearching(pattern, searchOptions);
- if(pattern instanceof XMLComponentDeclarationPattern){
- XMLComponentDeclarationPattern componentPattern = (XMLComponentDeclarationPattern)pattern;
- XMLSearchPattern childPattern = getSearchContributor().getDeclarationPattern(componentPattern.getMetaName());
- if(childPattern != null){
- childPattern.setSearchName(componentPattern.getName().getLocalName());
- childPattern.setSearchNamespace(componentPattern.getName().getNamespace());
- componentPattern.addChildren(this, new XMLSearchPattern[]{childPattern});
- }
-
- }
- else if(pattern instanceof XMLComponentReferencePattern){
- XMLComponentReferencePattern componentPattern = (XMLComponentReferencePattern)pattern;
- XMLSearchPattern[] childPatterns = getSearchContributor().getReferencesPatterns(componentPattern.getMetaName());
- for (int i = 0; i < childPatterns.length; i++) {
- XMLSearchPattern childPattern = childPatterns[i];
- childPattern.setSearchName(componentPattern.getName().getLocalName());
- childPattern.setSearchNamespace(componentPattern.getName().getNamespace());
- }
- componentPattern.addChildren(this, childPatterns);
-
- }
- }
-
-
- /**
- * The intend of this method is to limit the search to the files that have content
- * which can be searched for the given pattern. It is called from
- * {@link #selectDocumentLocations(SearchPattern, SearchScope, IProgressMonitor)}
- *
- * @param pattern the search pattern that is searched for
- * @return content type's unique identifiers that could be searched for the given pattern.
- */
- public abstract String[] getSupportedContentTypes();
-
- public void populateSearchDocument(SearchDocument document, SearchPattern pattern)
- {
- PatternMatcher matcher = (PatternMatcher)pattern.getAdapter(PatternMatcher.class);
- if(matcher == null){
- matcher = getAdapter(pattern, PatternMatcher.class);
- }
- XMLQuickScan.populateSearchDocument(document, matcher, pattern);
- }
-
- public void locateMatches(SearchDocumentSet documentSet, SearchPattern pattern, SearchScope scope, SearchRequestor requestor, Map searchOptions, IProgressMonitor monitor) throws CoreException
- {
- long time = System.currentTimeMillis();
-
- // TODO: use the file reference entries in the documents to reduce the scope to the referenced files only
- // SearchDocument[] documents = documentSet.getSearchDocuments(id);
-
- // check to see if the search pattern is qualified by a file location
- // if this is the case then we can use file scoping rules to prune the matches
- IFile targetFile = null;
- if (pattern instanceof ComponentSearchPattern)
- {
- ComponentSearchPattern componentSearchPattern = (ComponentSearchPattern)pattern;
- targetFile = componentSearchPattern.getFile();
- }
-
- // here we should have in scope only referenced files
- IFile[] files = scope.enclosingFiles();
- for (int i = 0; i < files.length; i++)
- {
- IFile file = files[i];
- String path = file.getLocation().toString();
- SearchDocument document = documentSet.getSearchDocument(path, id);
- if (document != null)
- {
- Entry[] entries = document.getEntries(getSearchEntryCategory(pattern), null, 0);
- if ((entries != null && entries.length > 0) || (searchOptions != null && searchOptions.get("searchDirtyContent") != null))
- {
- //for (int j = 0; j < entries.length; j++)
- //{
- // Entry entry = entries[j];
- //System.out.println("entry " + entry.getCategory() + " " + entry.getKey() + " " + entry.getClass().getName());
- //}
-
- boolean isInScope = true;
- if (targetFile != null)
- {
- try
- {
- isInScope = isLinked(documentSet, "file:///" + path, "file:///" + targetFile.getLocation().toString()); //$NON-NLS-1$ //$NON-NLS-2$
- //if (path.endsWith("CancelSelection.wsdl") && path.indexOf("clone1") != -1)
- //{
- // fileReferenceTable.debug(qualifiedPath, 0, 5);
- //}
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- if (isInScope)
- {
- this.locateMatches(pattern, document, requestor, searchOptions, monitor);
- }
- }
- }
- }
-
-
- if (debugPerf)
- {
- System.out
- .println("" //$NON-NLS-1$
- + getDescription()
- + ": " + (System.currentTimeMillis() - time) + "ms for locateMatches"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
-
- }
-
- private boolean isLinked(SearchDocumentSet set, String source, String target)
- {
- return isLinked(set, source, target, new HashMap());
- }
-
- private boolean isLinked(SearchDocumentSet set, String source, String target, HashMap visited)
- {
- if (source.equals(target))
- return true;
-
- String fileProtocol = "file:///"; //$NON-NLS-1$
-
- // Fix for bug 204174 - Begin
- if(target.charAt(fileProtocol.length()) == '/') //$NON-NLS-1$
- {
- target = fileProtocol + target.substring(fileProtocol.length() + 1);
- }
- // Fix for bug 204174 - End
-
- if (source.startsWith(fileProtocol))
- {
-
- SearchDocument document = set._tempGetSearchDocumetn(source.substring(fileProtocol.length()));
- if (document != null)
- {
- URIResolver uriResolver = URIResolverPlugin.createResolver();
- Entry[] entries = document.getEntries(IXMLSearchConstants.REF, null, 0);
- String[] resolveEntry = new String[entries.length];
- for (int j = 0; j < entries.length; j++)
- {
- Entry entry = entries[j];
- if (entry instanceof FileReferenceEntry)
- {
- FileReferenceEntry fileReferenceEntry = (FileReferenceEntry)entry;
- // TODO.. record an utilize the public id from the fileReferenceEntry
- //
- if (fileReferenceEntry.getRelativeFilePath() != null)
- {
- String resolvedURI = uriResolver.resolve(source, null, fileReferenceEntry.getRelativeFilePath());
- resolveEntry[j] = resolvedURI;
- if (resolvedURI.equals(target))
- {
- return true;
- }
- }
- }
- }
- // now see if there's an indirect link from the source to the target
- // we keep track of the nodes we've already visited to avoid cycles
- if (visited.get(source) == null)
- {
- visited.put(source, Boolean.TRUE);
- for (int j = 0; j < entries.length; j++)
- {
- String resolvedURI = resolveEntry[j];
- if (resolvedURI != null && isLinked(set, resolveEntry[j], target, visited))
- return true;
- }
- }
- }
- }
- return false;
- }
-
-
-
- public static String getSearchEntryCategory(SearchPattern pattern){
- if(pattern instanceof XMLComponentDeclarationPattern){
- return IXMLSearchConstants.COMPONENT_DECL;
- }
- else if(pattern instanceof XMLComponentReferencePattern){
- return IXMLSearchConstants.COMPONENT_REF;
- }
- else if(pattern instanceof FileReferencePattern){
- return IXMLSearchConstants.COMPONENT_REF;
- }
- return null;
- }
-}

Back to the top