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 static final long serialVersionUID = 20230914L;
26
27
28 private OtsEditor editor;
29
30
31
32
33
34
35 public DefinitionsSaver(final OtsEditor editor) throws RemoteException
36 {
37 editor.addListener(this, OtsEditor.NEW_FILE);
38 this.editor = editor;
39 }
40
41 @Override
42 public void notify(final Event event) throws RemoteException
43 {
44 if (event.getType().equals(OtsEditor.NEW_FILE))
45 {
46 XsdTreeNodeRoot root = (XsdTreeNodeRoot) event.getContent();
47 root.addListener(this, XsdTreeNodeRoot.NODE_CREATED, ReferenceType.WEAK);
48 root.addListener(this, XsdTreeNodeRoot.NODE_REMOVED, ReferenceType.WEAK);
49 }
50 else if (event.getType().equals(XsdTreeNodeRoot.NODE_CREATED))
51 {
52 XsdTreeNode node = (XsdTreeNode) ((Object[]) event.getContent())[0];
53 if (!node.getPathString().equals(XsdPaths.DEFINITIONS + ".xi:include") && node.getParent() != null
54 && node.getParent().getPathString().equals(XsdPaths.DEFINITIONS))
55 {
56 node.addConsumer("Save as include file...", this);
57 }
58 }
59 else if (event.getType().equals(XsdTreeNodeRoot.NODE_REMOVED))
60 {
61 XsdTreeNode node = (XsdTreeNode) ((Object[]) event.getContent())[0];
62 node.removeListener(this, XsdTreeNodeRoot.NODE_REMOVED);
63 }
64 }
65
66 @Override
67 public void accept(final XsdTreeNode node)
68 {
69 this.editor.saveFileAs(node);
70 }
71 }