navigation providers for dom elements
[fedora-idea.git] / source / com / intellij / util / xml / impl / DomElementsNavigationManagerImpl.java
blobfa8463d6d3ed59053508bea24e1931d0e76a1dc3
1 /*
2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
3 */
5 package com.intellij.util.xml.impl;
7 import com.intellij.util.xml.DomElementsNavigationManager;
8 import com.intellij.util.xml.DomElementNavigateProvider;
9 import com.intellij.util.xml.DomElement;
10 import com.intellij.openapi.components.ProjectComponent;
11 import com.intellij.openapi.project.Project;
12 import com.intellij.openapi.fileEditor.OpenFileDescriptor;
13 import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
15 import java.util.*;
17 import org.jetbrains.annotations.NonNls;
19 /**
20 * User: Sergey.Vasiliev
22 public class DomElementsNavigationManagerImpl extends DomElementsNavigationManager implements ProjectComponent {
23 private Map<String, DomElementNavigateProvider> myProviders = new HashMap<String, DomElementNavigateProvider>();
24 private Project myProject;
26 private DomElementNavigateProvider myTextEditorProvider = new MyDomElementNavigateProvider();
28 public DomElementsNavigationManagerImpl(final Project project) {
29 myProject = project;
30 myProviders.put(myTextEditorProvider.getProviderName(), myTextEditorProvider);
33 public Set<DomElementNavigateProvider> getDomElementsNavigateProviders(DomElement domElement) {
34 Set<DomElementNavigateProvider> result = new HashSet<DomElementNavigateProvider>();
36 for (DomElementNavigateProvider navigateProvider : myProviders.values()) {
37 if (navigateProvider.canNavigate(domElement)) result.add(navigateProvider) ;
39 return result;
42 public DomElementNavigateProvider getDomElementsNavigateProvider(String providerName) {
43 return myProviders.get(providerName);
46 public void registerDomElementsNavigateProvider(DomElementNavigateProvider provider) {
47 myProviders.put(provider.getProviderName(), provider);
50 public void projectOpened() {
54 public void projectClosed() {
58 @NonNls
59 public String getComponentName() {
60 return getClass().getName();
63 public void initComponent() {
67 public void disposeComponent() {
71 private class MyDomElementNavigateProvider implements DomElementNavigateProvider {
73 public String getProviderName() {
74 return DEFAULT_PROVIDER_NAME;
77 public void navigate(DomElement domElement, boolean requestFocus) {
78 final OpenFileDescriptor fileDescriptor =
79 new OpenFileDescriptor(myProject, domElement.getRoot().getFile().getVirtualFile(), domElement.getXmlTag().getTextOffset());
81 FileEditorManagerEx.getInstanceEx(myProject).openTextEditor(fileDescriptor, requestFocus);
84 public boolean canNavigate(DomElement domElement) {
85 return domElement != null && domElement.isValid();