1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  package org.abstracthorizon.danube.webdav.util;
14  
15  import org.abstracthorizon.danube.webdav.xml.XMLParserHandler;
16  
17  
18  
19  
20  
21  
22  public class SimpleNamespacesProvider implements NamespacesProvider {
23  
24      
25      protected NamespaceSlot[] namespaces = new NamespaceSlot[5];
26  
27      
28      protected int numberOfNamespaces = 0;
29  
30      
31  
32  
33  
34      public String[] getDefinedURLs() {
35          String[] result = new String[numberOfNamespaces];
36          for (int i = 0; i < numberOfNamespaces; i++) {
37              result[i] = namespaces[i].url;
38          }
39          return result;
40      }
41  
42      
43  
44  
45  
46  
47      public String getAssignedPrefix(String url) {
48          for (int i = 0; i < numberOfNamespaces; i++) {
49              if (namespaces[i].url == url) {
50                  return namespaces[i].prefix;
51              }
52          }
53          for (int i = 0; i < numberOfNamespaces; i++) {
54              if (namespaces[i].url.equals(url)) {
55                  return namespaces[i].prefix;
56              }
57          }
58          return null;
59      }
60  
61      
62  
63  
64  
65  
66      public XMLParserHandler getParserHandler(String url) {
67          for (int i = 0; i < numberOfNamespaces; i++) {
68              if (namespaces[i].url == url) {
69                  return namespaces[i].parserHandler;
70              }
71          }
72          for (int i = 0; i < numberOfNamespaces; i++) {
73              if (namespaces[i].url.equals(url)) {
74                  return namespaces[i].parserHandler;
75              }
76          }
77  
78          return null;
79      }
80  
81      
82  
83  
84  
85  
86      protected static class NamespaceSlot {
87          
88          String prefix;
89  
90          
91          String url;
92  
93          
94          XMLParserHandler parserHandler;
95      }
96  
97      
98  
99  
100 
101 
102 
103     public synchronized void addNamespace(String url, String preferredPrefix, XMLParserHandler parserHandler) {
104         if (namespaces.length == numberOfNamespaces) {
105             NamespaceSlot[] newNamespaces = new NamespaceSlot[namespaces.length + (namespaces.length / 2)];
106             System.arraycopy(namespaces, 0, newNamespaces, 0, numberOfNamespaces);
107             namespaces = newNamespaces;
108         }
109         NamespaceSlot newSlot = new NamespaceSlot();
110         newSlot.parserHandler = parserHandler;
111         newSlot.url = url;
112 
113         if (getAssignedPrefix(preferredPrefix) != null) {
114             newSlot.prefix = new String(new char[]{(char)('a' + numberOfNamespaces)});
115         } else {
116             newSlot.prefix = preferredPrefix;
117         }
118         namespaces[numberOfNamespaces] = newSlot;
119         numberOfNamespaces = numberOfNamespaces + 1;
120     }
121 
122 }