* Bug #12873 fixed - Scicos_flat produced an unexpected error after a diagram
[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) 2011 - 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 public class BasicLinkCodec extends XcosObjectCodec {
29
30     public static void register() {
31         BasicLinkCodec explicitlinkCodec = new BasicLinkCodec(
32             new ExplicitLink(), null, REFS, null);
33         mxCodecRegistry.register(explicitlinkCodec);
34         BasicLinkCodec implicitlinkCodec = new BasicLinkCodec(
35             new ImplicitLink(), null, REFS, null);
36         mxCodecRegistry.register(implicitlinkCodec);
37         BasicLinkCodec commandControllinkCodec = new BasicLinkCodec(
38             new CommandControlLink(), null, REFS, null);
39         mxCodecRegistry.register(commandControllinkCodec);
40     }
41
42     public BasicLinkCodec(Object template, String[] exclude, String[] idrefs,
43                           Map<String, String> mapping) {
44         super(template, exclude, idrefs, mapping);
45     }
46
47     @Override
48     public Object beforeEncode(mxCodec enc, Object obj, Node node) {
49
50         /*
51          * Log some information
52          */
53         final BasicLink l = (BasicLink) obj;
54
55         if (!(l.getSource() instanceof BasicPort)) {
56             trace(enc, node, "Invalid source");
57         } else {
58             final BasicPort p = (BasicPort) l.getSource();
59
60             if (!(p.getParent() instanceof BasicBlock)) {
61                 trace(enc, node, "Invalid source parent");
62             }
63         }
64         if (!(l.getTarget() instanceof BasicPort)) {
65             trace(enc, node, "Invalid target");
66         } else {
67             final BasicPort p = (BasicPort) l.getTarget();
68
69             if (!(p.getParent() instanceof BasicBlock)) {
70                 trace(enc, node, "Invalid target parent");
71             }
72         }
73
74         return super.beforeEncode(enc, obj, node);
75     }
76 }