update copyright
[fedora-idea.git] / xml / dom-impl / src / com / intellij / util / xml / structure / DomStructureViewBuilder.java
blobc1fe629ef4d503f6e4503d76d23be242e26c2fd6
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.intellij.util.xml.structure;
19 import com.intellij.ide.structureView.StructureView;
20 import com.intellij.ide.structureView.StructureViewModel;
21 import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
22 import com.intellij.ide.structureView.newStructureView.StructureViewComponent;
23 import com.intellij.openapi.fileEditor.FileEditor;
24 import com.intellij.openapi.project.Project;
25 import com.intellij.psi.util.PsiTreeUtil;
26 import com.intellij.psi.xml.XmlElement;
27 import com.intellij.psi.xml.XmlTag;
28 import com.intellij.psi.xml.XmlFile;
29 import com.intellij.util.Function;
30 import com.intellij.util.xml.DomElement;
31 import com.intellij.util.xml.DomManager;
32 import com.intellij.util.xml.DomService;
33 import org.jetbrains.annotations.NotNull;
35 import javax.swing.tree.DefaultMutableTreeNode;
37 public class DomStructureViewBuilder extends TreeBasedStructureViewBuilder {
38 private final Function<DomElement, DomService.StructureViewMode> myDescriptor;
39 private final XmlFile myFile;
41 public DomStructureViewBuilder(final XmlFile file, final Function<DomElement,DomService.StructureViewMode> descriptor) {
42 myFile = file;
43 myDescriptor = descriptor;
46 @NotNull
47 public StructureViewModel createStructureViewModel() {
48 return new DomStructureViewTreeModel(myFile, myDescriptor);
51 public boolean isRootNodeShown() {
52 return true;
55 @NotNull
56 public StructureView createStructureView(final FileEditor fileEditor, final Project project) {
57 return new StructureViewComponent(fileEditor, createStructureViewModel(), project) {
58 public DefaultMutableTreeNode expandPathToElement(final Object element) {
59 if (element instanceof XmlElement) {
60 final XmlElement xmlElement = (XmlElement)element;
61 XmlTag tag = PsiTreeUtil.getParentOfType(xmlElement, XmlTag.class, false);
62 while (tag != null) {
63 final DomElement domElement = DomManager.getDomManager(xmlElement.getProject()).getDomElement(tag);
64 if (domElement != null) {
65 for (DomElement curElement = domElement; curElement != null; curElement = curElement.getParent()) {
66 if (myDescriptor.fun(curElement) == DomService.StructureViewMode.SHOW) {
67 return super.expandPathToElement(curElement.getXmlElement());
71 tag = PsiTreeUtil.getParentOfType(tag, XmlTag.class, true);
75 return super.expandPathToElement(element);