View Javadoc
1   package org.opentrafficsim.editor;
2   
3   import org.w3c.dom.DOMException;
4   import org.w3c.dom.Document;
5   import org.w3c.dom.NamedNodeMap;
6   import org.w3c.dom.Node;
7   import org.w3c.dom.NodeList;
8   import org.w3c.dom.UserDataHandler;
9   
10  /**
11   * Singleton at {@code XiIncludeNode.XI_INCLUDE} to use for xi:include nodes in an {@code XsdTreeNode}. Most methods return
12   * {@code null} or do nothing. The attributes define one attribute named 'File' and one named 'Fallback'.
13   * <p>
14   * Copyright (c) 2023-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
15   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
16   * </p>
17   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
18   */
19  public final class XiIncludeNode implements Node
20  {
21  
22      /** Singleton instance for xi:include nodes. */
23      public static final Node XI_INCLUDE = new XiIncludeNode();
24  
25      /** Child node that represents the 'File' attribute. */
26      private static final Node FILE_CHILD = new FileNode(new Attributes("File"));
27  
28      /** Child node that represents the 'Fallback' attribute. */
29      private static final Node FALLBACK_CHILD = new FileNode(new Attributes("Fallback"));
30  
31      /**
32       * Private constructor.
33       */
34      private XiIncludeNode()
35      {
36  
37      }
38  
39      @Override
40      public String getNodeName()
41      {
42          return "xi:include";
43      }
44  
45      @Override
46      public String getNodeValue() throws DOMException
47      {
48          return null;
49      }
50  
51      @Override
52      public void setNodeValue(final String nodeValue) throws DOMException
53      {
54      }
55  
56      @Override
57      public short getNodeType()
58      {
59          return Node.TEXT_NODE;
60      }
61  
62      @Override
63      public Node getParentNode()
64      {
65          return null;
66      }
67  
68      @Override
69      public NodeList getChildNodes()
70      {
71          return new NodeList()
72          {
73              @Override
74              public Node item(final int index)
75              {
76                  if (index == 0)
77                  {
78                      return FILE_CHILD;
79                  }
80                  if (index == 1)
81                  {
82                      return FALLBACK_CHILD;
83                  }
84                  return null;
85              }
86  
87              @Override
88              public int getLength()
89              {
90                  return 2;
91              }
92          };
93      }
94  
95      @Override
96      public Node getFirstChild()
97      {
98          return FILE_CHILD;
99      }
100 
101     @Override
102     public Node getLastChild()
103     {
104         return FALLBACK_CHILD;
105     }
106 
107     @Override
108     public Node getPreviousSibling()
109     {
110         return null;
111     }
112 
113     @Override
114     public Node getNextSibling()
115     {
116         return null;
117     }
118 
119     @Override
120     public NamedNodeMap getAttributes()
121     {
122         return null;
123     }
124 
125     @Override
126     public Document getOwnerDocument()
127     {
128         return null;
129     }
130 
131     @Override
132     public Node insertBefore(final Node newChild, final Node refChild) throws DOMException
133     {
134         return null;
135     }
136 
137     @Override
138     public Node replaceChild(final Node newChild, final Node oldChild) throws DOMException
139     {
140         return null;
141     }
142 
143     @Override
144     public Node removeChild(final Node oldChild) throws DOMException
145     {
146         return null;
147     }
148 
149     @Override
150     public Node appendChild(final Node newChild) throws DOMException
151     {
152         return null;
153     }
154 
155     @Override
156     public boolean hasChildNodes()
157     {
158         return true;
159     }
160 
161     @Override
162     public Node cloneNode(final boolean deep)
163     {
164         return null;
165     }
166 
167     @Override
168     public void normalize()
169     {
170     }
171 
172     @Override
173     public boolean isSupported(final String feature, final String version)
174     {
175         return false;
176     }
177 
178     @Override
179     public String getNamespaceURI()
180     {
181         return null;
182     }
183 
184     @Override
185     public String getPrefix()
186     {
187         return null;
188     }
189 
190     @Override
191     public void setPrefix(final String prefix) throws DOMException
192     {
193     }
194 
195     @Override
196     public String getLocalName()
197     {
198         return null;
199     }
200 
201     @Override
202     public boolean hasAttributes()
203     {
204         return false;
205     }
206 
207     @Override
208     public String getBaseURI()
209     {
210         return null;
211     }
212 
213     @Override
214     public short compareDocumentPosition(final Node other) throws DOMException
215     {
216         return 0;
217     }
218 
219     @Override
220     public String getTextContent() throws DOMException
221     {
222         return null;
223     }
224 
225     @Override
226     public void setTextContent(final String textContent) throws DOMException
227     {
228     }
229 
230     @Override
231     public boolean isSameNode(final Node other)
232     {
233         return false;
234     }
235 
236     @Override
237     public String lookupPrefix(final String namespaceURI)
238     {
239         return null;
240     }
241 
242     @Override
243     public boolean isDefaultNamespace(final String namespaceURI)
244     {
245         return false;
246     }
247 
248     @Override
249     public String lookupNamespaceURI(final String prefix)
250     {
251         return null;
252     }
253 
254     @Override
255     public boolean isEqualNode(final Node arg)
256     {
257         return false;
258     }
259 
260     @Override
261     public Object getFeature(final String feature, final String version)
262     {
263         return null;
264     }
265 
266     @Override
267     public Object setUserData(final String key, final Object data, final UserDataHandler handler)
268     {
269         return null;
270     }
271 
272     @Override
273     public Object getUserData(final String key)
274     {
275         return null;
276     }
277 
278     /**
279      * Implementation of {@code Node} to provide the 'File' attribute child node.
280      */
281     private static class FileNode implements Node
282     {
283 
284         /** Attributes. */
285         private final Attributes attributes;
286 
287         /**
288          * Constructor.
289          * @param attributes attributes.
290          */
291         FileNode(final Attributes attributes)
292         {
293             this.attributes = attributes;
294         }
295 
296         @Override
297         public String getNodeName()
298         {
299             return "xsd:attribute";
300         }
301 
302         @Override
303         public String getNodeValue() throws DOMException
304         {
305             return null;
306         }
307 
308         @Override
309         public void setNodeValue(final String nodeValue) throws DOMException
310         {
311         }
312 
313         @Override
314         public short getNodeType()
315         {
316             return Node.ATTRIBUTE_NODE;
317         }
318 
319         @Override
320         public Node getParentNode()
321         {
322             return null;
323         }
324 
325         @Override
326         public NodeList getChildNodes()
327         {
328             return null;
329         }
330 
331         @Override
332         public Node getFirstChild()
333         {
334             return null;
335         }
336 
337         @Override
338         public Node getLastChild()
339         {
340             return null;
341         }
342 
343         @Override
344         public Node getPreviousSibling()
345         {
346             return null;
347         }
348 
349         @Override
350         public Node getNextSibling()
351         {
352             return null;
353         }
354 
355         @Override
356         public NamedNodeMap getAttributes()
357         {
358             return this.attributes;
359         }
360 
361         @Override
362         public Document getOwnerDocument()
363         {
364             return null;
365         }
366 
367         @Override
368         public Node insertBefore(final Node newChild, final Node refChild) throws DOMException
369         {
370             return null;
371         }
372 
373         @Override
374         public Node replaceChild(final Node newChild, final Node oldChild) throws DOMException
375         {
376             return null;
377         }
378 
379         @Override
380         public Node removeChild(final Node oldChild) throws DOMException
381         {
382             return null;
383         }
384 
385         @Override
386         public Node appendChild(final Node newChild) throws DOMException
387         {
388             return null;
389         }
390 
391         @Override
392         public boolean hasChildNodes()
393         {
394             return false;
395         }
396 
397         @Override
398         public Node cloneNode(final boolean deep)
399         {
400             return null;
401         }
402 
403         @Override
404         public void normalize()
405         {
406         }
407 
408         @Override
409         public boolean isSupported(final String feature, final String version)
410         {
411             return false;
412         }
413 
414         @Override
415         public String getNamespaceURI()
416         {
417             return null;
418         }
419 
420         @Override
421         public String getPrefix()
422         {
423             return null;
424         }
425 
426         @Override
427         public void setPrefix(final String prefix) throws DOMException
428         {
429         }
430 
431         @Override
432         public String getLocalName()
433         {
434             return null;
435         }
436 
437         @Override
438         public boolean hasAttributes()
439         {
440             return true;
441         }
442 
443         @Override
444         public String getBaseURI()
445         {
446             return null;
447         }
448 
449         @Override
450         public short compareDocumentPosition(final Node other) throws DOMException
451         {
452             return 0;
453         }
454 
455         @Override
456         public String getTextContent() throws DOMException
457         {
458             return null;
459         }
460 
461         @Override
462         public void setTextContent(final String textContent) throws DOMException
463         {
464         }
465 
466         @Override
467         public boolean isSameNode(final Node other)
468         {
469             return false;
470         }
471 
472         @Override
473         public String lookupPrefix(final String namespaceURI)
474         {
475             return null;
476         }
477 
478         @Override
479         public boolean isDefaultNamespace(final String namespaceURI)
480         {
481             return false;
482         }
483 
484         @Override
485         public String lookupNamespaceURI(final String prefix)
486         {
487             return null;
488         }
489 
490         @Override
491         public boolean isEqualNode(final Node arg)
492         {
493             return false;
494         }
495 
496         @Override
497         public Object getFeature(final String feature, final String version)
498         {
499             return null;
500         }
501 
502         @Override
503         public Object setUserData(final String key, final Object data, final UserDataHandler handler)
504         {
505             return null;
506         }
507 
508         @Override
509         public Object getUserData(final String key)
510         {
511             return null;
512         }
513 
514     }
515 
516     /**
517      * Implementation of {@code NamedNodeMap} to provide the 'File' attribute.
518      */
519     private static class Attributes implements NamedNodeMap
520     {
521 
522         /** Attribute name in GUI. */
523         private final String name;
524 
525         /**
526          * Constructor.
527          * @param name attribute name in GUI.
528          */
529         Attributes(final String name)
530         {
531             this.name = name;
532         }
533 
534         /** File node. */
535         private Node file = new Node()
536         {
537 
538             @Override
539             public String getNodeName()
540             {
541                 return null;
542             }
543 
544             @Override
545             public String getNodeValue() throws DOMException
546             {
547                 return Attributes.this.name;
548             }
549 
550             @Override
551             public void setNodeValue(final String nodeValue) throws DOMException
552             {
553             }
554 
555             @Override
556             public short getNodeType()
557             {
558                 return 0;
559             }
560 
561             @Override
562             public Node getParentNode()
563             {
564                 return null;
565             }
566 
567             @Override
568             public NodeList getChildNodes()
569             {
570                 return null;
571             }
572 
573             @Override
574             public Node getFirstChild()
575             {
576                 return null;
577             }
578 
579             @Override
580             public Node getLastChild()
581             {
582                 return null;
583             }
584 
585             @Override
586             public Node getPreviousSibling()
587             {
588                 return null;
589             }
590 
591             @Override
592             public Node getNextSibling()
593             {
594                 return null;
595             }
596 
597             @Override
598             public NamedNodeMap getAttributes()
599             {
600                 return null;
601             }
602 
603             @Override
604             public Document getOwnerDocument()
605             {
606                 return null;
607             }
608 
609             @Override
610             public Node insertBefore(final Node newChild, final Node refChild) throws DOMException
611             {
612                 return null;
613             }
614 
615             @Override
616             public Node replaceChild(final Node newChild, final Node oldChild) throws DOMException
617             {
618                 return null;
619             }
620 
621             @Override
622             public Node removeChild(final Node oldChild) throws DOMException
623             {
624                 return null;
625             }
626 
627             @Override
628             public Node appendChild(final Node newChild) throws DOMException
629             {
630                 return null;
631             }
632 
633             @Override
634             public boolean hasChildNodes()
635             {
636                 return false;
637             }
638 
639             @Override
640             public Node cloneNode(final boolean deep)
641             {
642                 return null;
643             }
644 
645             @Override
646             public void normalize()
647             {
648             }
649 
650             @Override
651             public boolean isSupported(final String feature, final String version)
652             {
653                 return false;
654             }
655 
656             @Override
657             public String getNamespaceURI()
658             {
659                 return null;
660             }
661 
662             @Override
663             public String getPrefix()
664             {
665                 return null;
666             }
667 
668             @Override
669             public void setPrefix(final String prefix) throws DOMException
670             {
671             }
672 
673             @Override
674             public String getLocalName()
675             {
676                 return null;
677             }
678 
679             @Override
680             public boolean hasAttributes()
681             {
682                 return false;
683             }
684 
685             @Override
686             public String getBaseURI()
687             {
688                 return null;
689             }
690 
691             @Override
692             public short compareDocumentPosition(final Node other) throws DOMException
693             {
694                 return 0;
695             }
696 
697             @Override
698             public String getTextContent() throws DOMException
699             {
700                 return null;
701             }
702 
703             @Override
704             public void setTextContent(final String textContent) throws DOMException
705             {
706             }
707 
708             @Override
709             public boolean isSameNode(final Node other)
710             {
711                 return false;
712             }
713 
714             @Override
715             public String lookupPrefix(final String namespaceURI)
716             {
717                 return null;
718             }
719 
720             @Override
721             public boolean isDefaultNamespace(final String namespaceURI)
722             {
723                 return false;
724             }
725 
726             @Override
727             public String lookupNamespaceURI(final String prefix)
728             {
729                 return null;
730             }
731 
732             @Override
733             public boolean isEqualNode(final Node arg)
734             {
735                 return false;
736             }
737 
738             @Override
739             public Object getFeature(final String feature, final String version)
740             {
741                 return null;
742             }
743 
744             @Override
745             public Object setUserData(final String key, final Object data, final UserDataHandler handler)
746             {
747                 return null;
748             }
749 
750             @Override
751             public Object getUserData(final String key)
752             {
753                 return null;
754             }
755 
756         };
757 
758         @Override
759         @SuppressWarnings("hiddenfield")
760         public Node getNamedItem(final String name)
761         {
762             if (name.equals("name"))
763             {
764                 return this.file;
765             }
766             return null;
767         }
768 
769         @Override
770         public Node setNamedItem(final Node arg) throws DOMException
771         {
772             return null;
773         }
774 
775         @Override
776         @SuppressWarnings("hiddenfield")
777         public Node removeNamedItem(final String name) throws DOMException
778         {
779             return null;
780         }
781 
782         @Override
783         public Node item(final int index)
784         {
785             if (index == 0)
786             {
787                 return this.file;
788             }
789             return null;
790         }
791 
792         @Override
793         public int getLength()
794         {
795             return 1;
796         }
797 
798         @Override
799         public Node getNamedItemNS(final String namespaceURI, final String localName) throws DOMException
800         {
801             return null;
802         }
803 
804         @Override
805         public Node setNamedItemNS(final Node arg) throws DOMException
806         {
807             return null;
808         }
809 
810         @Override
811         public Node removeNamedItemNS(final String namespaceURI, final String localName) throws DOMException
812         {
813             return null;
814         }
815 
816     }
817 
818 }