Xcos diagram load: log warnings to the user
[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 java.util.Map;
16
17 import org.scilab.modules.xcos.block.BasicBlock;
18 import org.scilab.modules.xcos.link.BasicLink;
19 import org.scilab.modules.xcos.link.commandcontrol.CommandControlLink;
20 import org.scilab.modules.xcos.link.explicit.ExplicitLink;
21 import org.scilab.modules.xcos.link.implicit.ImplicitLink;
22 import org.scilab.modules.xcos.port.BasicPort;
23 import org.w3c.dom.Node;
24
25 import com.mxgraph.io.mxCodec;
26 import com.mxgraph.io.mxCodecRegistry;
27
28 import static org.scilab.modules.xcos.io.codec.XcosCodec.LOG;
29
30 public class BasicLinkCodec extends XcosObjectCodec {
31
32     public static void register() {
33         BasicLinkCodec explicitlinkCodec = new BasicLinkCodec(
34             new ExplicitLink(), null, REFS, null);
35         mxCodecRegistry.register(explicitlinkCodec);
36         BasicLinkCodec implicitlinkCodec = new BasicLinkCodec(
37             new ImplicitLink(), null, REFS, null);
38         mxCodecRegistry.register(implicitlinkCodec);
39         BasicLinkCodec commandControllinkCodec = new BasicLinkCodec(
40             new CommandControlLink(), null, REFS, null);
41         mxCodecRegistry.register(commandControllinkCodec);
42     }
43
44     public BasicLinkCodec(Object template, String[] exclude, String[] idrefs,
45                           Map<String, String> mapping) {
46         super(template, exclude, idrefs, mapping);
47     }
48
49     @Override
50     public Object beforeEncode(mxCodec enc, Object obj, Node node) {
51
52         /*
53          * Log some information
54          */
55         final BasicLink l = (BasicLink) obj;
56
57         if (!(l.getSource() instanceof BasicPort)) {
58             trace(enc, node, "Invalid source");
59             LOG.warning("The saved file might be incomplete, '" + l + "' is not connected");
60         } else {
61             final BasicPort p = (BasicPort) l.getSource();
62
63             if (!(p.getParent() instanceof BasicBlock)) {
64                 trace(enc, node, "Invalid source parent");
65                 LOG.warning("The saved file might be incomplete, '" + l + "' is wrongly connected");
66             }
67         }
68         if (!(l.getTarget() instanceof BasicPort)) {
69             trace(enc, node, "Invalid target");
70             LOG.warning("The saved file might be incomplete, '" + l + "' is not connected");
71         } else {
72             final BasicPort p = (BasicPort) l.getTarget();
73
74             if (!(p.getParent() instanceof BasicBlock)) {
75                 trace(enc, node, "Invalid target parent");
76                 LOG.warning("The saved file might be incomplete, '" + l + "' is wrongly connected");
77             }
78         }
79
80         return super.beforeEncode(enc, obj, node);
81     }
82 }