diff --git a/executablecode/Makefile.src b/executablecode/Makefile.src index 088957cb277268d352937def1004e415399a44fb..28b9acb23f0af46aef4caec4f72c265800a703d3 100755 --- a/executablecode/Makefile.src +++ b/executablecode/Makefile.src @@ -1 +1 @@ -SRCS = generated_src/main.c generated_src/Periodic.c \ No newline at end of file +SRCS = generated_src/main.c generated_src/ObserverProp1.c generated_src/RemotelyControlledMicrowave.c generated_src/RemoteControl.c generated_src/MicroWaveOven.c generated_src/Bell.c generated_src/ControlPanel.c generated_src/Controller.c generated_src/Magnetron.c generated_src/Door.c generated_src/WirelessInterface.c \ No newline at end of file diff --git a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java index 1ac5562a8dbb15ad05d32758a7cd4e205631dda5..5dd97e95f066674d394ff882cc3c22a94a646326 100755 --- a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java +++ b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java @@ -135,7 +135,9 @@ public class AVATAR2CPOSIX { if (avspec.hasApplicationCode()) { + mainFile.appendToBeforeMainCode("/* User code */\n"); mainFile.appendToBeforeMainCode(avspec.getApplicationCode()); + mainFile.appendToBeforeMainCode("\n/* End of User code */\n\n"); } makeMainMutex(); diff --git a/src/ui/AvatarDesignPanelTranslator.java b/src/ui/AvatarDesignPanelTranslator.java index fcbc3da5e3480878cb3378931b8d5139c78e7fce..ca2163f572179e8166c4f39c17debbce97be6161 100644 --- a/src/ui/AvatarDesignPanelTranslator.java +++ b/src/ui/AvatarDesignPanelTranslator.java @@ -98,6 +98,14 @@ public class AvatarDesignPanelTranslator { blocks.addAll(_blocks); AvatarSpecification as = new AvatarSpecification("avatarspecification", adp); + + if (adp != null) { + AvatarBDPanel abdp = adp.getAvatarBDPanel(); + if (abdp != null) { + as.addApplicationCode(abdp.getMainCode()); + } + } + createBlocks(as, blocks); createRelationsBetweenBlocks(as, blocks); makeBlockStateMachines(as); diff --git a/src/ui/GTURTLEModeling.java b/src/ui/GTURTLEModeling.java index baa23d93780e036eb990315132c260f15814be35..be1a13de1db5b02e85cfad8f4607a0167d01b5ff 100755 --- a/src/ui/GTURTLEModeling.java +++ b/src/ui/GTURTLEModeling.java @@ -3960,6 +3960,11 @@ public class GTURTLEModeling { if (tdp instanceof TMLArchiDiagramPanel) { ((TMLArchiDiagramPanel)tdp).loadExtraParameters(elt); } + + + if (tdp instanceof AvatarBDPanel) { + ((AvatarBDPanel)tdp).loadExtraParameters(elt); + } //TraceManager.addDev("Element" + elt.toString()); // Loads components of the class diagram diff --git a/src/ui/avatarbd/AvatarBDBlock.java b/src/ui/avatarbd/AvatarBDBlock.java index 9776497159208d3722e3f7df62bcd9a1a2dd3575..f0946a57356e5f708de2fce36afa8d783c6bf1c9 100644 --- a/src/ui/avatarbd/AvatarBDBlock.java +++ b/src/ui/avatarbd/AvatarBDBlock.java @@ -497,9 +497,14 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S } } - JDialogAvatarBlock jdab = new JDialogAvatarBlock(myAttributes, myMethods, mySignals, null, frame, "Setting attributes of " + value, "Attribute", tab, globalCode, true); + String mainCode = null; + TDiagramPanel ttdp = getTDiagramPanel(); + if (ttdp instanceof AvatarBDPanel) { + mainCode = ((AvatarBDPanel)(ttdp)).getMainCode(); + } + JDialogAvatarBlock jdab = new JDialogAvatarBlock(myAttributes, myMethods, mySignals, null, frame, "Setting attributes of " + value, "Attribute", tab, globalCode, true, mainCode); setJDialogOptions(jdab); - jdab.setSize(650, 375); + jdab.setSize(650, 575); GraphicLib.centerOnParent(jdab); jdab.setVisible(true); // blocked until dialog has been closed //makeValue(); @@ -509,6 +514,10 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S if (!jdab.hasBeenCancelled()) { globalCode = jdab.getGlobalCode(); + String tmp = jdab.getMainCode(); + if (tmp != null) { + ((AvatarBDPanel)(ttdp)).setMainCode(tmp); + } } ((AvatarBDPanel)tdp).updateAllSignalsOnConnectors(); diff --git a/src/ui/avatarbd/AvatarBDDataType.java b/src/ui/avatarbd/AvatarBDDataType.java index f2c236f8a9d352536458b6ebbc9241a15d3cb376..b464e0e82d542be0ff98bd557d4dafb77c05c4fe 100644 --- a/src/ui/avatarbd/AvatarBDDataType.java +++ b/src/ui/avatarbd/AvatarBDDataType.java @@ -330,9 +330,9 @@ public class AvatarBDDataType extends TGCScalableWithInternalComponent { // And so -> attributes! - JDialogAvatarBlock jdab = new JDialogAvatarBlock(myAttributes, null, null, null, frame, "Setting attributes of " + value, "Attribute", 0, null, false); + JDialogAvatarBlock jdab = new JDialogAvatarBlock(myAttributes, null, null, null, frame, "Setting attributes of " + value, "Attribute", 0, null, false, null); setJDialogOptions(jdab); - jdab.setSize(650, 375); + jdab.setSize(650, 575); GraphicLib.centerOnParent(jdab); jdab.setVisible(true); // blocked until dialog has been closed //makeValue(); diff --git a/src/ui/avatarbd/AvatarBDPanel.java b/src/ui/avatarbd/AvatarBDPanel.java index 32db963bd62ad2b6f2c88f25ffd657238c2ae870..bf131b64f70d79086a11718ce1c61c1b6e59029b 100644 --- a/src/ui/avatarbd/AvatarBDPanel.java +++ b/src/ui/avatarbd/AvatarBDPanel.java @@ -56,14 +56,31 @@ import java.util.*; import myutil.*; public class AvatarBDPanel extends TDiagramPanel { + + private static final String DEFAULT_MAIN = "void __user_init() {\n}\n\n"; + + private String mainCode; + public AvatarBDPanel(MainGUI mgui, TToolBar _ttb) { super(mgui, _ttb); + mainCode = DEFAULT_MAIN; /*TDiagramMouseManager tdmm = new TDiagramMouseManager(this); addMouseListener(tdmm); addMouseMotionListener(tdmm);*/ } + public void setMainCode(String s) { + if (s == null) { + s = ""; + } + mainCode = s; + } + + public String getMainCode() { + return mainCode; + } + public boolean actionOnDoubleClick(TGComponent tgc) { //System.out.println("Action"); if (tgc instanceof AvatarBDBlock) { @@ -117,7 +134,7 @@ public class AvatarBDPanel extends TDiagramPanel { } public String getXMLHead() { - return "<AVATARBlockDiagramPanel name=\"" + name + "\"" + sizeParam() + displayParam() +" >"; + return "<AVATARBlockDiagramPanel name=\"" + name + "\"" + sizeParam() +" >\n" + displayParam(); } public String getXMLTail() { @@ -186,300 +203,49 @@ public class AvatarBDPanel extends TDiagramPanel { public String displayParam() { String s = ""; - /*if (channelsVisible) { - s += " channels=\"true\""; - } else { - s += " channels=\"false\""; - } - if (eventsVisible) { - s += " events=\"true\""; - } else { - s += " events=\"false\""; - } - if (requestsVisible) { - s += " requests=\"true\""; - } else { - s += " requests=\"false\""; - }*/ - - return s; - } - - /*public boolean isConnectedToTasks(TMLCompositionOperator co) { - if ((getTask1ToWhichIamConnected(co) != null) && (getTask2ToWhichIamConnected(co) != null)) { - return true; - } - return false; - } - - public TMLTaskInterface getTask1ToWhichIamConnected(TMLCompositionOperator co) { - TGConnectorTMLAssociationNav tgctmlan = getTGConnectorAssociationOf(co); - TGComponent tgc; - //System.out.println("tmlan t1?"); - if (tgctmlan != null) { - //System.out.println("tmlan found t1"); - tgc = getTopComponentToWhichBelongs(tgctmlan.getTGConnectingPointP1()); - if ((tgc != null) && (tgc instanceof TMLTaskInterface)) { - return (TMLTaskInterface) tgc; - } - } - return null; - } - - public TMLTaskInterface getTask2ToWhichIamConnected(TMLCompositionOperator co) { - TGConnectorTMLAssociationNav tgctmlan = getTGConnectorAssociationOf(co); - TGComponent tgc; - //System.out.println("tmlan t2?"); - if (tgctmlan != null) { - //System.out.println("tmlan found t2"); - tgc = getTopComponentToWhichBelongs(tgctmlan.getTGConnectingPointP2()); - if ((tgc != null) && (tgc instanceof TMLTaskInterface)) { - return (TMLTaskInterface) tgc; - } - } - return null; - } - - public TGConnectorTMLAssociationNav getTGConnectorAssociationOf(TMLCompositionOperator tcd) { - int i; - TGConnectingPoint p1, p2; - TGConnector tgco; - TGConnectorTMLCompositionOperator tgcoco; - TGComponent tgc; - - for(i=0; i<tcd.getNbConnectingPoint(); i++) { - //System.out.println("titi"); - p1 = tcd.tgconnectingPointAtIndex(i); - tgco = getConnectorConnectedTo(p1); - if (tgco != null) { - //System.out.println("Found tgco"); - } - if ((tgco != null) && (tgco instanceof TGConnectorTMLCompositionOperator)){ - //System.out.println("toto"); - tgcoco = (TGConnectorTMLCompositionOperator)tgco; - if (p1 == tgcoco.getTGConnectingPointP1()) { - p2 = tgcoco.getTGConnectingPointP2(); - } else { - p2 = tgcoco.getTGConnectingPointP1(); - } - - // p2 now contains the connecting point of a association - tgc = getComponentToWhichBelongs(p2); - if ((tgc != null) && (!p2.isFree()) && (tgc instanceof TGConnectorTMLAssociationNav)) { - //System.out.println("tutu"); - return (TGConnectorTMLAssociationNav)tgc; - } - } - } - return null; - } - - public boolean connectedToVisible(TGConnectorTMLAssociationNav tgconav) { - TGConnectorTMLCompositionOperator tgcoco = tgconav.getTGConnectorTMLCompositionOperator(); - if (tgcoco == null) { - return true; - } - return connectedToVisible(tgcoco); - } - - public boolean connectedToVisible(TGConnectorTMLCompositionOperator tgcoco) { - TGConnectingPoint p2 = tgcoco.getTGConnectingPointP2(); - TGComponent tgc = getComponentToWhichBelongs(p2); - if (tgc instanceof TMLCompositionOperator) { - return ((TMLCompositionOperator)tgc).isToggledVisible(); - } - return false; - } - - /*public void makePostLoadingProcessing() throws MalformedModelingException { - TGComponent tgc; - Iterator iterator = componentList.listIterator(); + String [] tmp = Conversion.wrapText(mainCode); - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TCDTObject) { - ((TCDTObject)tgc).postLoadingProcessing(); - } + for(int i=0; i<tmp.length; i++) { + s += "<MainCode value=\"" + GTURTLEModeling.transformString(tmp[i]) + "\"/>\n"; } + + return s; } - public TCDTData findTData(String name) { - TGComponent tgc; - Iterator iterator = componentList.listIterator(); - - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TCDTData) { - if (tgc.getValue().equals(name)) { - return (TCDTData)tgc; - } - } - } - - return null; - } - - public TCDTClass getTCDTClass(String name) { - TGComponent tgc; - Iterator iterator = componentList.listIterator(); - - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TCDTClass) { - if (((TCDTClass)tgc).getClassName().equals(name)) { - return (TCDTClass)tgc; - } - } - } - - return null; - } - - public boolean areAllVisible() { - return channelsVisible && eventsVisible && requestsVisible; - } - - public boolean areChannelsVisible() { - return channelsVisible; - } - - public boolean areEventsVisible() { - return eventsVisible; - } - - public boolean areRequestsVisible() { - return requestsVisible; - } - - public void setChannelsVisible(boolean b) { - channelsVisible = b; - } - public void setEventsVisible(boolean b) { - eventsVisible = b; - } - - public void setRequestsVisible(boolean b) { - requestsVisible = b; - }*/ + public void loadExtraParameters(Element elt) { String s; - //System.out.println("Extra parameter"); - /*try { - s = elt.getAttribute("channels"); - //System.out.println("S=" + s); - if (s.compareTo("false") ==0) { - setChannelsVisible(false); - } else { - setChannelsVisible(true); - } - s = elt.getAttribute("events"); - if (s.compareTo("false") ==0) { - setEventsVisible(false); - } else { - setEventsVisible(true); - } - s = elt.getAttribute("requests"); - if (s.compareTo("false") ==0) { - setRequestsVisible(false); - } else { - setRequestsVisible(true); - } - - } catch (Exception e) { - // Model was saved in an older version of TTool - //System.out.println("older format"); - setChannelsVisible(true); - setEventsVisible(true); - setRequestsVisible(true); - }*/ - } - - /*public ArrayList<String> getAllTMLTaskNames(String _topname) { - TGComponent tgc; - Iterator iterator = componentList.listIterator(); - ArrayList<String> list = new ArrayList<String>(); + + NodeList nl = elt.getElementsByTagName("MainCode"); + TraceManager.addDev("Extra parameter of block diagram nbOfElements: " + nl.getLength()); + Node n; - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TMLTaskOperator) { - list.add(_topname + "::" + ((TMLTaskOperator)tgc).getTaskName()); - } - } - - return list; - } - - public ArrayList<String> getAllTMLCommunicationNames(String _topname) { - TGComponent tgc; - Iterator iterator = componentList.listIterator(); - ArrayList<String> list = new ArrayList<String>(); - String name = ""; - String type = ""; - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TMLCompositionOperator) { - if (tgc instanceof TMLEventOperator) { - name = ((TMLEventOperator)tgc).getEventName(); - type = "Event"; - } - if (tgc instanceof TMLChannelOperator) { - name = ((TMLChannelOperator)tgc).getChannelName(); - type = "Channel"; - } - if (tgc instanceof TMLRequestOperator) { - name = ((TMLRequestOperator)tgc).getRequestName(); - type = "Request"; - } - - list.add(_topname + "::" + name + " (" + type + ")"); - } - } - - return list; - } - - public ArrayList<String> getAllNonMappedTMLTaskNames(String _topName, TMLArchiDiagramPanel _tadp, boolean ref, String _name) { - TGComponent tgc; - Iterator iterator = componentList.listIterator(); - ArrayList<String> list = new ArrayList<String>(); - String name; - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TMLTaskOperator) { - name = ((TMLTaskOperator)tgc).getTaskName(); - if (ref && name.equals(_name)) { - list.add(_topName + "::" + name); - } else { - if (!_tadp.isMapped(_topName, name)) { - list.add(_topName + "::" + name); - } - } - } + try { + if (nl.getLength()>0) { + mainCode = ""; + } + for(int i=0; i<nl.getLength(); i++) { + n = nl.item(i); + if (n.getNodeType() == Node.ELEMENT_NODE) { + s = ((Element)n).getAttribute("value"); + TraceManager.addDev("Found value=" + s); + if (s != null) { + mainCode += s + "\n"; + } + } + + } + } catch (Exception e) { + // Model was saved in an older version of TTool + TraceManager.addDev("Exception when loading parameter of block diagram:" + e.getMessage()); + } - - return list; - } + } - public TMLTaskOperator getTaskByName(String _name) { - TGComponent tgc; - Iterator iterator = componentList.listIterator(); - ArrayList<String> list = new ArrayList<String>(); - - while(iterator.hasNext()) { - tgc = (TGComponent)(iterator.next()); - if (tgc instanceof TMLTaskOperator) { - if (((TMLTaskOperator)tgc).getTaskName().equals(_name)) { - return ((TMLTaskOperator)tgc); - } - } - } - - return null; - }*/ public void updateAllSignalsOnConnectors() { TGComponent tgc; diff --git a/src/ui/window/JDialogAvatarBlock.java b/src/ui/window/JDialogAvatarBlock.java index 696cc4297e25c9096826ce96146a859508c7f5ba..14b4628b88afe6726938793a109ba176c59bcfe7 100755 --- a/src/ui/window/JDialogAvatarBlock.java +++ b/src/ui/window/JDialogAvatarBlock.java @@ -67,6 +67,8 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis protected String [] globalCode; protected JTextArea jtaGlobalCode; protected boolean hasGlobalCode; + protected String mainCode; + protected JTextArea jtaMainCode; private JPanel panel1, panel2; @@ -114,13 +116,14 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis private JButton cancelButton; /** Creates new form */ - public JDialogAvatarBlock(Vector _attributes, Vector _methods, Vector _signals, Vector _forbidden, Frame f, String title, String attrib, int _tab, String []_globalCode, boolean _hasGlobalCode) { + public JDialogAvatarBlock(Vector _attributes, Vector _methods, Vector _signals, Vector _forbidden, Frame f, String title, String attrib, int _tab, String []_globalCode, boolean _hasGlobalCode, String _mainCode) { super(f, title, true); frame = f; attributesPar = _attributes; methodsPar = _methods; signalsPar = _signals; globalCode = _globalCode; + mainCode = _mainCode; if (methodsPar == null) { @@ -343,6 +346,7 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis panel3.add(new JLabel("method:"), c3); // second line panel3 + c3.fill = GridBagConstraints.HORIZONTAL; methodText = new JTextField(); methodText.setColumns(50); methodText.setEditable(true); @@ -436,6 +440,7 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis // second line panel5 c5.gridwidth = 1; + c5.fill = GridBagConstraints.HORIZONTAL; Vector v = new Vector(); v.add("in"); v.add("out"); @@ -498,7 +503,7 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis panelCode = new JPanel(); panelCode.setLayout(gridbag7); - panelCode.setBorder(new javax.swing.border.TitledBorder("Global code of block")); + panelCode.setBorder(new javax.swing.border.TitledBorder("Global code")); // guard c7.weighty = 1.0; c7.weightx = 1.0; @@ -507,8 +512,27 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis c7.fill = GridBagConstraints.BOTH; c7.gridwidth = GridBagConstraints.REMAINDER; c7.gridheight = 1; + + panelCode.add(new JLabel("Global code of application:"), c7); + jtaMainCode = new JTextArea(); + jtaMainCode.setEditable(true); + jtaMainCode.setMargin(new Insets(10, 10, 10, 10)); + jtaMainCode.setTabSize(3); + String tmp = ""; + if (mainCode != null) { + tmp = mainCode; + } + + jtaMainCode.append(tmp); + if (mainCode == null) { + jtaMainCode.setEnabled(false); + } + jtaMainCode.setFont(new Font("times", Font.PLAIN, 12)); + JScrollPane jsp = new JScrollPane(jtaMainCode, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + jsp.setPreferredSize(new Dimension(300, 200)); + panelCode.add(jsp, c2); - panelCode.add(new JLabel("Global code:"), c7); + panelCode.add(new JLabel("Global code of block:"), c7); jtaGlobalCode = new JTextArea(); jtaGlobalCode.setEditable(true); jtaGlobalCode.setMargin(new Insets(10, 10, 10, 10)); @@ -521,7 +545,7 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis } jtaGlobalCode.append(files); jtaGlobalCode.setFont(new Font("times", Font.PLAIN, 12)); - JScrollPane jsp = new JScrollPane(jtaGlobalCode, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + jsp = new JScrollPane(jtaGlobalCode, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jsp.setPreferredSize(new Dimension(300, 200)); panelCode.add(jsp, c2); @@ -908,6 +932,7 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis signalsPar.addElement(signals.elementAt(i)); } globalCode = Conversion.wrapText(jtaGlobalCode.getText()); + mainCode = jtaMainCode.getText(); dispose(); } @@ -1018,5 +1043,9 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis public String[] getGlobalCode() { return globalCode; } + + public String getMainCode() { + return mainCode; + } }