Xcos refactoring: move link classes
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / io / codec / BasicLinkCodec.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2014 - Scilab Enterprises - Clement DAVID
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 package org.scilab.modules.xcos.io.codec;
14
15 import static org.scilab.modules.xcos.io.codec.XcosCodec.LOG;
16
17 import java.util.Map;
18
19 import org.scilab.modules.xcos.JavaController;
20 import org.scilab.modules.xcos.Kind;
21 import org.scilab.modules.xcos.block.BasicBlock;
22 import org.scilab.modules.xcos.graph.model.XcosCellFactory;
23 import org.scilab.modules.xcos.link.BasicLink;
24 import org.scilab.modules.xcos.link.CommandControlLink;
25 import org.scilab.modules.xcos.link.ExplicitLink;
26 import org.scilab.modules.xcos.link.ImplicitLink;
27 import org.scilab.modules.xcos.port.BasicPort;
28 import org.w3c.dom.Node;
29
30 import com.mxgraph.io.mxCodec;
31 import com.mxgraph.io.mxCodecRegistry;
32
33 public class BasicLinkCodec extends XcosObjectCodec {
34
35     public static void register() {
36         JavaController controller = new JavaController();
37
38         BasicLinkCodec explicitlinkCodec = new BasicLinkCodec(new ExplicitLink(controller.createObject(Kind.LINK)), null, REFS, null);
39         mxCodecRegistry.register(explicitlinkCodec);
40         BasicLinkCodec implicitlinkCodec = new BasicLinkCodec(new ImplicitLink(controller.createObject(Kind.LINK)), null, REFS, null);
41         mxCodecRegistry.register(implicitlinkCodec);
42         BasicLinkCodec commandControllinkCodec = new BasicLinkCodec(new CommandControlLink(controller.createObject(Kind.LINK)), null, REFS, null);
43         mxCodecRegistry.register(commandControllinkCodec);
44     }
45
46     public BasicLinkCodec(Object template, String[] exclude, String[] idrefs,
47                           Map<String, String> mapping) {
48         super(template, exclude, idrefs, mapping);
49     }
50
51     @Override
52     public Object beforeEncode(mxCodec enc, Object obj, Node node) {
53
54         /*
55          * Log some information
56          */
57         final BasicLink l = (BasicLink) obj;
58
59         if (!(l.getSource() instanceof BasicPort)) {
60             trace(enc, node, "Invalid source");
61             LOG.warning("The saved file might be incomplete, '" + l + "' is not connected");
62         } else {
63             final BasicPort p = (BasicPort) l.getSource();
64
65             if (!(p.getParent() instanceof BasicBlock)) {
66                 trace(enc, node, "Invalid source parent");
67                 LOG.warning("The saved file might be incomplete, '" + l + "' is wrongly connected");
68             }
69         }
70         if (!(l.getTarget() instanceof BasicPort)) {
71             trace(enc, node, "Invalid target");
72             LOG.warning("The saved file might be incomplete, '" + l + "' is not connected");
73         } else {
74             final BasicPort p = (BasicPort) l.getTarget();
75
76             if (!(p.getParent() instanceof BasicBlock)) {
77                 trace(enc, node, "Invalid target parent");
78                 LOG.warning("The saved file might be incomplete, '" + l + "' is wrongly connected");
79             }
80         }
81
82         return super.beforeEncode(enc, obj, node);
83     }
84 }