1 package org.opentrafficsim.editor.extensions;
2
3 import java.rmi.RemoteException;
4 import java.util.function.Consumer;
5
6 import org.djutils.event.Event;
7 import org.djutils.event.EventListener;
8 import org.djutils.event.reference.ReferenceType;
9 import org.opentrafficsim.editor.OtsEditor;
10 import org.opentrafficsim.editor.XsdPaths;
11 import org.opentrafficsim.editor.XsdTreeNode;
12 import org.opentrafficsim.editor.XsdTreeNodeRoot;
13
14
15
16
17
18
19
20
21
22 public class DefinitionsSaver implements EventListener, Consumer<XsdTreeNode>
23 {
24
25 private OtsEditor editor;
26
27
28
29
30
31
32 public DefinitionsSaver(final OtsEditor editor) throws RemoteException
33 {
34 editor.addListener(this, OtsEditor.NEW_FILE);
35 this.editor = editor;
36 }
37
38 @Override
39 public void notify(final Event event)
40 {
41 if (event.getType().equals(OtsEditor.NEW_FILE))
42 {
43 XsdTreeNodeRoot root = (XsdTreeNodeRoot) event.getContent();
44 root.addListener(this, XsdTreeNodeRoot.NODE_CREATED, ReferenceType.WEAK);
45 root.addListener(this, XsdTreeNodeRoot.NODE_REMOVED, ReferenceType.WEAK);
46 }
47 else if (event.getType().equals(XsdTreeNodeRoot.NODE_CREATED))
48 {
49 XsdTreeNode node = (XsdTreeNode) ((Object[]) event.getContent())[0];
50 if (!node.getPathString().equals(XsdPaths.DEFINITIONS + ".xi:include") && node.getParent() != null
51 && node.getParent().getPathString().equals(XsdPaths.DEFINITIONS))
52 {
53 node.addConsumer("Save as include file...", this);
54 }
55 }
56 else if (event.getType().equals(XsdTreeNodeRoot.NODE_REMOVED))
57 {
58 XsdTreeNode node = (XsdTreeNode) ((Object[]) event.getContent())[0];
59 node.removeListener(this, XsdTreeNodeRoot.NODE_REMOVED);
60 }
61 }
62
63 @Override
64 public void accept(final XsdTreeNode node)
65 {
66 this.editor.saveFileAs(node);
67 }
68 }