/xml/impl/src/com/intellij/xml/util/XmlNSDescriptorSequence.java

https://bitbucket.org/nbargnesi/idea · Java · 148 lines · 109 code · 17 blank · 22 comment · 12 complexity · a5f702cb64e85b534e220a941d186be8 MD5 · raw file

  1. /*
  2. * Copyright 2000-2009 JetBrains s.r.o.
  3. *
  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
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  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.
  15. */
  16. package com.intellij.xml.util;
  17. import com.intellij.psi.PsiElement;
  18. import com.intellij.psi.xml.XmlDocument;
  19. import com.intellij.psi.xml.XmlFile;
  20. import com.intellij.psi.xml.XmlTag;
  21. import com.intellij.util.containers.ContainerUtil;
  22. import com.intellij.xml.XmlElementDescriptor;
  23. import com.intellij.xml.XmlNSDescriptor;
  24. import org.jetbrains.annotations.NotNull;
  25. import org.jetbrains.annotations.Nullable;
  26. import java.util.ArrayList;
  27. import java.util.Iterator;
  28. import java.util.List;
  29. /**
  30. * Created by IntelliJ IDEA.
  31. * User: ik
  32. * Date: 08.09.2003
  33. * Time: 17:27:43
  34. * To change this template use Options | File Templates.
  35. */
  36. public class XmlNSDescriptorSequence implements XmlNSDescriptor{
  37. final List<XmlNSDescriptor> sequence = new ArrayList<XmlNSDescriptor>();
  38. public XmlNSDescriptorSequence(){
  39. }
  40. public XmlNSDescriptorSequence(XmlNSDescriptor[] descriptors){
  41. for(int i = 0; i < descriptors.length; i++){
  42. final XmlNSDescriptor descriptor = descriptors[i];
  43. add(descriptor);
  44. }
  45. }
  46. public void add(XmlNSDescriptor descriptor){
  47. sequence.add(descriptor);
  48. }
  49. public XmlElementDescriptor getElementDescriptor(@NotNull XmlTag tag){
  50. final Iterator iterator = sequence.iterator();
  51. while(iterator.hasNext()){
  52. final XmlNSDescriptor descriptor = (XmlNSDescriptor) iterator.next();
  53. final XmlElementDescriptor elementDescriptor = descriptor.getElementDescriptor(tag);
  54. if(elementDescriptor != null) return elementDescriptor;
  55. }
  56. return null;
  57. }
  58. @NotNull
  59. public XmlElementDescriptor[] getRootElementsDescriptors(@Nullable final XmlDocument document) {
  60. final List<XmlElementDescriptor> descriptors = new ArrayList<XmlElementDescriptor>();
  61. final Iterator iterator = sequence.iterator();
  62. while(iterator.hasNext()) {
  63. final XmlNSDescriptor descriptor = (XmlNSDescriptor)iterator.next();
  64. ContainerUtil.addAll(descriptors, descriptor.getRootElementsDescriptors(document));
  65. }
  66. return descriptors.toArray(new XmlElementDescriptor[descriptors.size()]);
  67. }
  68. public XmlFile getDescriptorFile(){
  69. final Iterator iterator = sequence.iterator();
  70. while(iterator.hasNext()){
  71. final XmlNSDescriptor descriptor = (XmlNSDescriptor) iterator.next();
  72. final XmlFile file = descriptor.getDescriptorFile();
  73. if(file != null) return file;
  74. }
  75. return null;
  76. }
  77. public List<XmlNSDescriptor> getSequence(){
  78. return sequence;
  79. }
  80. public boolean isHierarhyEnabled() {
  81. final Iterator iterator = sequence.iterator();
  82. while(iterator.hasNext()){
  83. final XmlNSDescriptor descriptor = (XmlNSDescriptor) iterator.next();
  84. if(descriptor.isHierarhyEnabled()) return true;
  85. }
  86. return false;
  87. }
  88. public PsiElement getDeclaration(){
  89. final Iterator iterator = sequence.iterator();
  90. while(iterator.hasNext()){
  91. final XmlNSDescriptor descriptor = (XmlNSDescriptor) iterator.next();
  92. final PsiElement declaration = descriptor.getDeclaration();
  93. if(declaration != null) return declaration;
  94. }
  95. return null;
  96. }
  97. public String getName(PsiElement context){
  98. final Iterator iterator = sequence.iterator();
  99. while(iterator.hasNext()){
  100. final XmlNSDescriptor descriptor = (XmlNSDescriptor) iterator.next();
  101. final String name = descriptor.getName(context);
  102. if(name != null) return name;
  103. }
  104. return null;
  105. }
  106. public String getName(){
  107. final Iterator iterator = sequence.iterator();
  108. while(iterator.hasNext()){
  109. final XmlNSDescriptor descriptor = (XmlNSDescriptor) iterator.next();
  110. final String name = descriptor.getName();
  111. if(name != null) return name;
  112. }
  113. return null;
  114. }
  115. public void init(PsiElement element){
  116. final Iterator iterator = sequence.iterator();
  117. while(iterator.hasNext()){
  118. final XmlNSDescriptor descriptor = (XmlNSDescriptor) iterator.next();
  119. descriptor.init(element);
  120. }
  121. }
  122. public Object[] getDependences(){
  123. final List<Object> ret = new ArrayList<Object>();
  124. final Iterator iterator = sequence.iterator();
  125. while(iterator.hasNext()) {
  126. final XmlNSDescriptor descriptor = (XmlNSDescriptor)iterator.next();
  127. ContainerUtil.addAll(ret, descriptor.getDependences());
  128. }
  129. return ret.toArray();
  130. }
  131. }