From 7247e6e28e0169cb07f588396bc8e010184027a5 Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr> Date: Mon, 21 Jun 2010 13:16:46 +0000 Subject: [PATCH] Update on AVATAR Data Types --- src/avatartranslator/AvatarBlock.java | 11 +- .../touppaal/AVATAR2UPPAAL.java | 3 + src/ui/AvatarDesignPanelTranslator.java | 199 +++++++++++++++--- src/ui/AvatarMethod.java | 3 +- src/ui/ColorManager.java | 1 + src/ui/GTURTLEModeling.java | 4 +- src/ui/MainGUI.java | 28 +-- src/ui/TDiagramPanel.java | 40 ++++ src/ui/TGComponentManager.java | 6 + src/ui/TGUIAction.java | 4 +- src/ui/avatarbd/AvatarBDBlock.java | 14 +- src/ui/avatarbd/AvatarBDPanel.java | 44 +++- src/ui/avatarbd/AvatarBDToolBar.java | 6 + src/ui/window/JDialogAvatarBlock.java | 30 ++- 14 files changed, 329 insertions(+), 64 deletions(-) diff --git a/src/avatartranslator/AvatarBlock.java b/src/avatartranslator/AvatarBlock.java index 9a6f048e5e..4739c5f3ae 100644 --- a/src/avatartranslator/AvatarBlock.java +++ b/src/avatartranslator/AvatarBlock.java @@ -189,6 +189,8 @@ public class AvatarBlock extends AvatarElement { } public boolean isAValidMethodCall(String _s) { + TraceManager.addDev("****** method=" + _s); + int index0 = _s.indexOf("("); int index1 = _s.indexOf(")"); if ((index0 == -1) || (index1 == -1) || (index1 < index0)) { @@ -196,7 +198,7 @@ public class AvatarBlock extends AvatarElement { } String method = _s.substring(0, index0); - TraceManager.addDev("method=" + method); + AvatarMethod am = getAvatarMethodWithName(method); if (am == null) { return false; @@ -219,13 +221,16 @@ public class AvatarBlock extends AvatarElement { AvatarAttribute aa; for(int i=0; i<actions.length; i++) { - TraceManager.addDev("params=" + params + "actions=" + actions[i]); - aa = getAvatarAttributeWithName(actions[i]); + TraceManager.addDev("params=" + params + " actions=" + actions[i]); + aa = getAvatarAttributeWithName(actions[i].trim()); if (aa == null) { + TraceManager.addDev("Failed for attribute " + actions[i]); return false; } } + TraceManager.addDev("Ok for method " + _s); + return true; } diff --git a/src/avatartranslator/touppaal/AVATAR2UPPAAL.java b/src/avatartranslator/touppaal/AVATAR2UPPAAL.java index 17aea97e68..675dca2316 100755 --- a/src/avatartranslator/touppaal/AVATAR2UPPAAL.java +++ b/src/avatartranslator/touppaal/AVATAR2UPPAAL.java @@ -613,6 +613,9 @@ public class AVATAR2UPPAAL { TraceManager.addDev("Attribute #j: " + tmps); aa = _block.getAvatarAttributeWithName(tmps); if (aa != null) { + if ((nbOfInt > 0) || (nbOfBool > 0)) { + result = result + ",\n"; + } if (aa.isInt() || aa.isNat()) { result = result + ACTION_INT + nbOfInt + " =" + aa.getName(); nbOfInt ++; diff --git a/src/ui/AvatarDesignPanelTranslator.java b/src/ui/AvatarDesignPanelTranslator.java index 080d708152..89f87f2d62 100644 --- a/src/ui/AvatarDesignPanelTranslator.java +++ b/src/ui/AvatarDesignPanelTranslator.java @@ -97,6 +97,20 @@ public class AvatarDesignPanelTranslator { return as; } + public void addRegularAttribute(AvatarBlock _ab, TAttribute _a, String _preName) { + int type = 0; + if (_a.getType() == TAttribute.INTEGER){ + type = AvatarType.INTEGER; + } else if (_a.getType() == TAttribute.NATURAL){ + type = AvatarType.NATURAL; + } else if (_a.getType() == TAttribute.BOOLEAN) { + type = AvatarType.BOOLEAN; + } + AvatarAttribute aa = new AvatarAttribute(_preName + _a.getId(), type, _a); + aa.setInitialValue(_a.getInitialValue()); + _ab.addAttribute(aa); + } + public void createBlocks(AvatarSpecification _as, LinkedList<AvatarBDBlock> _blocks) { AvatarBlock ab; Vector v; @@ -108,6 +122,7 @@ public class AvatarDesignPanelTranslator { avatartranslator.AvatarMethod atam; avatartranslator.AvatarSignal atas; TGComponent tgc1, tgc2; + Vector types; for(AvatarBDBlock block: _blocks) { ab = new AvatarBlock(block.getBlockName(), block); @@ -119,19 +134,27 @@ public class AvatarDesignPanelTranslator { for(i=0; i<v.size(); i++) { a = (TAttribute)(v.elementAt(i)); if (a.getType() == TAttribute.INTEGER){ - aa = new AvatarAttribute(a.getId(), AvatarType.INTEGER, a); - aa.setInitialValue(a.getInitialValue()); - ab.addAttribute(aa); - } - if (a.getType() == TAttribute.NATURAL){ - aa = new AvatarAttribute(a.getId(), AvatarType.NATURAL, a); - aa.setInitialValue(a.getInitialValue()); - ab.addAttribute(aa); - } - if (a.getType() == TAttribute.BOOLEAN) { - aa = new AvatarAttribute(a.getId(), AvatarType.BOOLEAN, a); - aa.setInitialValue(a.getInitialValue()); - ab.addAttribute(aa); + addRegularAttribute(ab, a, ""); + } else if (a.getType() == TAttribute.NATURAL){ + addRegularAttribute(ab, a, ""); + } else if (a.getType() == TAttribute.BOOLEAN) { + addRegularAttribute(ab, a, ""); + } else { + // other + //TraceManager.addDev(" -> Other type found: " + a.getTypeOther()); + types = adp.getAvatarBDPanel().getAttributesOfDataType(a.getTypeOther()); + if (types == null) { + CheckingError ce = new CheckingError(CheckingError.STRUCTURE_ERROR, "Unknown data type: " + a.getTypeOther() + " used in " + ab.getName()); + ce.setAvatarBlock(ab); + ce.setTDiagramPanel(adp.getAvatarBDPanel()); + addCheckingError(ce); + return; + } else { + for(int j=0; j<types.size(); j++) { + addRegularAttribute(ab, (TAttribute)(types.elementAt(j)), a.getId() + "__"); + } + } + } } @@ -182,13 +205,77 @@ public class AvatarDesignPanelTranslator { String typeIds[] = _uiam.getTypeIds(); String types[] = _uiam.getTypes(); AvatarAttribute aa; + TAttribute ta; + Vector v; + int type = 0; for(int i=0; i<types.length; i++) { - aa = new AvatarAttribute(typeIds[i], AvatarType.getType(types[i]), _uiam); - _atam.addParameter(aa); + v = adp.getAvatarBDPanel().getAttributesOfDataType(types[i]); + if (v == null) { + aa = new AvatarAttribute(typeIds[i], AvatarType.getType(types[i]), _uiam); + _atam.addParameter(aa); + } else { + for(int j=0; j<v.size(); j++) { + ta = (TAttribute)(v.get(j)); + if (ta.getType() == TAttribute.INTEGER){ + type = AvatarType.INTEGER; + } else if (ta.getType() == TAttribute.NATURAL){ + type = AvatarType.NATURAL; + } else if (ta.getType() == TAttribute.BOOLEAN) { + type = AvatarType.BOOLEAN; + } + aa = new AvatarAttribute(typeIds[i] + "__" + ta.getId(), type, _uiam); + _atam.addParameter(aa); + } + } } } + public void manageAttribute(String _name, AvatarBlock _ab, AvatarActionOnSignal _aaos, TDiagramPanel _tdp, TGComponent _tgc, String _idOperator) { + TAttribute ta = adp.getAvatarBDPanel().getAttribute(_name, _ab.getName()); + if (ta == null) { + CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed parameter: " + _name + " in signal expression: " + _idOperator); + ce.setAvatarBlock(_ab); + ce.setTDiagramPanel(_tdp); + ce.setTGComponent(_tgc); + addCheckingError(ce); + TraceManager.addDev("not found"); + return ; + } + + TraceManager.addDev("Found: " + ta.getId()); + + AvatarAttribute aa; + Vector v = new Vector(); + int i; + TAttribute tatmp; + + if (ta.getType() == TAttribute.OTHER) { + Vector v0 = adp.getAvatarBDPanel().getAttributesOfDataType(ta.getTypeOther()); + for(i=0; i<v0.size(); i++) { + tatmp = (TAttribute)(v0.get(i)); + v.add(_name + "__" + tatmp.getId()); + } + } else { + v.add(_name); + } + for(i=0; i<v.size(); i++) { + aa = _ab.getAvatarAttributeWithName((String)(v.get(i))); + if (aa == null) { + CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed parameter: " + _name + " in signal expression: " + _idOperator); + ce.setAvatarBlock(_ab); + ce.setTDiagramPanel(_tdp); + ce.setTGComponent(_tgc); + addCheckingError(ce); + return ; + } else { + _aaos.addValue(_name); + } + } + + + } + public void makeStateMachine(AvatarSpecification _as, AvatarBlock _ab) { AvatarBDBlock block = (AvatarBDBlock)(listE.getTG(_ab)); if (block == null) { @@ -266,6 +353,7 @@ public class AvatarDesignPanelTranslator { AvatarState astate; int i; String tmp; + TAttribute ta; while(iterator.hasNext()) { tgc = (TGComponent)(iterator.next()); @@ -280,6 +368,7 @@ public class AvatarDesignPanelTranslator { ce.setTDiagramPanel(tdp); ce.setTGComponent(tgc); addCheckingError(ce); + } else { aaos = new AvatarActionOnSignal("action_on_signal", atas, tgc); if (aaos.isSending()) { @@ -305,7 +394,11 @@ public class AvatarDesignPanelTranslator { ce.setTGComponent(tgc); addCheckingError(ce); } else { + manageAttribute(tmp, _ab, aaos, tdp, tgc, asmdrs.getValue()); // Check that tmp is the identifier of an attribute + // Find the TAttribute + /*ta = getTAttribute(tmp); + aa = _ab.getAvatarAttributeWithName(tmp); if (aa == null) { CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed parameter: " + tmp + " in signal expression: " + asmdrs.getValue()); @@ -315,7 +408,7 @@ public class AvatarDesignPanelTranslator { addCheckingError(ce); } else { aaos.addValue(tmp); - } + }*/ } } //adag.setActionValue(makeTIFAction(asmdrs.getValue(), "?")); @@ -323,6 +416,8 @@ public class AvatarDesignPanelTranslator { asm.addElement(aaos); } } + + // Send signals } else if (tgc instanceof AvatarSMDSendSignal) { asmdss = (AvatarSMDSendSignal)tgc; atas = _ab.getAvatarSignalWithName(asmdss.getSignalName()); @@ -357,8 +452,9 @@ public class AvatarDesignPanelTranslator { ce.setTGComponent(tgc); addCheckingError(ce); } else { + manageAttribute(tmp, _ab, aaos, tdp, tgc, asmdss.getValue()); // Check that tmp is the identifier of an attribute - aa = _ab.getAvatarAttributeWithName(tmp); + /*aa = _ab.getAvatarAttributeWithName(tmp); if (aa == null) { CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed parameter: " + tmp + " in signal expression: " + asmdss.getValue()); ce.setAvatarBlock(_ab); @@ -367,7 +463,7 @@ public class AvatarDesignPanelTranslator { addCheckingError(ce); } else { aaos.addValue(tmp); - } + }*/ } } //adag.setActionValue(makeTIFAction(asmdrs.getValue(), "?")); @@ -447,7 +543,7 @@ public class AvatarDesignPanelTranslator { at = new AvatarTransition("avatar transition", tgc); // Guard - tmp = asmdco.getGuard(); + tmp = modifyString(asmdco.getGuard()); error = AvatarSyntaxChecker.isAValidGuard(_as, _ab, tmp); if (error < 0) { makeError(error, tdp, _ab, tgc, "transition guard", tmp); @@ -456,13 +552,13 @@ public class AvatarDesignPanelTranslator { } // Delays - tmp1 = asmdco.getAfterMinDelay(); + tmp1 = modifyString(asmdco.getAfterMinDelay()); error = AvatarSyntaxChecker.isAValidIntExpr(_as, _ab, tmp1); if (error < 0) { makeError(error, tdp, _ab, tgc, "after min delay", tmp1); tmp1 = null; } - tmp2 = asmdco.getAfterMaxDelay(); + tmp2 = modifyString(asmdco.getAfterMaxDelay()); error = AvatarSyntaxChecker.isAValidIntExpr(_as, _ab, tmp2); if (error < 0) { makeError(error, tdp, _ab, tgc, "after max delay", tmp2); @@ -474,13 +570,13 @@ public class AvatarDesignPanelTranslator { } // Compute min and max - tmp1 = asmdco.getComputeMinDelay(); + tmp1 = modifyString(asmdco.getComputeMinDelay()); error = AvatarSyntaxChecker.isAValidIntExpr(_as, _ab, tmp1); if (error < 0) { makeError(error, tdp, _ab, tgc, "compute min ", tmp1); tmp1 = null; } - tmp2 = asmdco.getComputeMaxDelay(); + tmp2 = modifyString(asmdco.getComputeMaxDelay()); error = AvatarSyntaxChecker.isAValidIntExpr(_as, _ab, tmp2); if (error < 0) { makeError(error, tdp, _ab, tgc, "compute max ", tmp2); @@ -495,11 +591,12 @@ public class AvatarDesignPanelTranslator { vs = asmdco.getActions(); for(String s: vs) { if (s.trim().length() > 0) { - s = s.trim(); + s = modifyString(s.trim()); // Variable assignation or method call? error = s.indexOf("="); if (error == -1) { // Method call + s = modifyStringMethodCall(s, _ab.getName()); if(!_ab.isAValidMethodCall(s)) { CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed transition method call: " + s); ce.setAvatarBlock(_ab); @@ -624,6 +721,60 @@ public class AvatarDesignPanelTranslator { warnings.addElement(ce); } + private String modifyString(String _input) { + return Conversion.replaceAllChar(_input, '.', "__"); + } + + private String modifyStringMethodCall(String _input, String _blockName) { + int index0 = _input.indexOf('('); + int index1 = _input.indexOf(')'); + + if ((index0 == -1) || (index1 == -1) || (index1 < index0)) { + return _input; + } + + String s = _input.substring(index0+1, index1).trim(); + String output = ""; + + if (s.length() == 0) { + return _input; + } + + //TraceManager.addDev("Analyzing method call " + s); + TAttribute ta, tatmp; + + String [] actions = s.split(","); + s = ""; + for(int i=0; i<actions.length; i++) { + ta = adp.getAvatarBDPanel().getAttribute(actions[i].trim(), _blockName); + if (ta == null) { + s = s + actions[i].trim(); + } else { + if (ta.getType() == TAttribute.OTHER) { + Vector v0 = adp.getAvatarBDPanel().getAttributesOfDataType(ta.getTypeOther()); + for(int j=0; j<v0.size(); j++) { + tatmp = (TAttribute)(v0.get(j)); + s += actions[i].trim() + "__" + tatmp.getId(); + if (j != v0.size()-1) { + s = s + ", "; + } + } + } else { + s = s + actions[i].trim(); + } + } + if (i != actions.length-1) { + s = s + ", "; + } + } + + s = _input.substring(0, index0) + "(" + s + ")"; + + //TraceManager.addDev("Returning method call " + s); + + return s; + } + /*public TURTLEModeling generateTURTLEModeling() { LinkedList<AvatarBDBlock> blocks = adp.getAvatarBDPanel().getFullBlockList(); return generateTURTLEModeling(blocks, ""); diff --git a/src/ui/AvatarMethod.java b/src/ui/AvatarMethod.java index 48b90a3fa2..4af5c49282 100644 --- a/src/ui/AvatarMethod.java +++ b/src/ui/AvatarMethod.java @@ -59,6 +59,7 @@ public class AvatarMethod { public final static int NATURAL = 0; public final static int BOOLEAN = 1; public final static int INTEGER = 2; + public final static int OTHER = 3; protected String id; protected String typeIds[]; @@ -267,7 +268,7 @@ public class AvatarMethod { } else if (s.equals("int")) { return INTEGER; } - return -1; + return OTHER; } public static String getStringType(int type) { diff --git a/src/ui/ColorManager.java b/src/ui/ColorManager.java index bf8060d61e..9fdc389b38 100755 --- a/src/ui/ColorManager.java +++ b/src/ui/ColorManager.java @@ -133,6 +133,7 @@ public class ColorManager { //public static final Color AVATAR_BLOCK = new Color(128, 180, 205); //public static final Color AVATAR_BLOCK = new Color(158, 218, 227); public static final Color AVATAR_BLOCK = new Color(149, 193, 210); + public static final Color AVATAR_DATATYPE = new Color(109, 193, 210); public static final Color AVATAR_SEND_SIGNAL = new Color(128, 180, 205); public static final Color AVATAR_RECEIVE_SIGNAL = new Color(128, 180, 205); public static final Color AVATAR_GUARD = new Color(128, 180, 205); diff --git a/src/ui/GTURTLEModeling.java b/src/ui/GTURTLEModeling.java index 5a1d77a4d1..e211c37741 100755 --- a/src/ui/GTURTLEModeling.java +++ b/src/ui/GTURTLEModeling.java @@ -4367,7 +4367,7 @@ public class GTURTLEModeling { throw new MalformedModelingException(); } - TraceManager.addDev("Making TGComponent of type " + myType + " and of name " + myName); + //TraceManager.addDev("Making TGComponent of type " + myType + " and of name " + myName); //TGComponent is ready to be built if(fatherId != -1) { fatherId += decId; @@ -4409,7 +4409,7 @@ public class GTURTLEModeling { } else { tgc = TGComponentManager.addComponent(myX, myY, myType, tdp); } - TraceManager.addDev("TGComponent built " + myType); + //TraceManager.addDev("TGComponent built " + myType); if (tgc == null) { throw new MalformedModelingException(); diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java index ae74a8941f..771530e8ff 100755 --- a/src/ui/MainGUI.java +++ b/src/ui/MainGUI.java @@ -4508,22 +4508,10 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener { return getUseCaseDiagramPanel(tp, indexTab, s); } - /*public UseCaseDiagramPanel getUseCaseDiagramPanel(int index, int indexTab, String s) { - System.out.println("Searching for " + s + " at index =" + indexTab); - TURTLEPanel tp = (TURTLEPanel)(tabs.elementAt(index)); - return getUseCaseDiagramPanel(tp, indexTab, s); - }*/ - public UseCaseDiagramPanel getUseCaseDiagramPanel(TURTLEPanel tp, int indexTab, String s) { if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) { return (UseCaseDiagramPanel)(tp.panelAt(indexTab)); } - /*for(int i=0; i<tp.tabbedPane.getTabCount(); i++) { - if (tp.tabbedPane.getTitleAt(i).equals(s)) { - if (tp.panelAt(i) instanceof UseCaseDiagramPanel) - return (UseCaseDiagramPanel)(tp.panelAt(i)); - } - }*/ return null; } @@ -5206,21 +5194,21 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener { } public boolean newAvatarBDBlockName(TURTLEPanel tp, String old, String niou) { - TraceManager.addDev("Panel=" + tp + " Old task name = " + old + " New task name=" + niou); + //TraceManager.addDev("Panel=" + tp + " Old task name = " + old + " New task name=" + niou); JTabbedPane jtp = tp.tabbedPane; int i; for(i = 0; i<jtp.getTabCount(); i++) { - TraceManager.addDev("jtp = " + jtp.getTitleAt(i)); + //TraceManager.addDev("jtp = " + jtp.getTitleAt(i)); if (jtp.getTitleAt(i).equals(niou)) { return false; } } - TraceManager.addDev("old " + old + " niou " + niou); - TraceManager.addDev("nb Of panels:"+ jtp.getTabCount()); + //TraceManager.addDev("old " + old + " niou " + niou); + //TraceManager.addDev("nb Of panels:"+ jtp.getTabCount()); for(i = 0; i<jtp.getTabCount(); i++) { //TraceManager.addDev("Tab " + i + " = " + mainTabbedPane.getTitleAt(i)); - TraceManager.addDev("jtp = >" + jtp.getTitleAt(i) + "<"); - TraceManager.addDev("old = >" + old + "<"); + //TraceManager.addDev("jtp = >" + jtp.getTitleAt(i) + "<"); + //TraceManager.addDev("old = >" + old + "<"); if (jtp.getTitleAt(i).compareTo(old) == 0) { jtp.setTitleAt(i, niou); jtp.setToolTipTextAt(i, "Opens the state machine of " + niou); @@ -5230,7 +5218,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener { tdp = (TDiagramPanel)(tp.panels.elementAt(j)); if (tdp.getName().equals(old)) { tdp.setName(niou); - TraceManager.addDev("Renamed to " + niou); + //TraceManager.addDev("Renamed to " + niou); } } @@ -6069,6 +6057,8 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener { // AVATAR BD } else if (command.equals(actions[TGUIAction.ABD_BLOCK].getActionCommand())) { actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.AVATARBD_BLOCK); + } else if (command.equals(actions[TGUIAction.ABD_DATATYPE].getActionCommand())) { + actionOnButton(TGComponentManager.COMPONENT, TGComponentManager.AVATARBD_DATATYPE); } else if (command.equals(actions[TGUIAction.ABD_COMPOSITION_CONNECTOR].getActionCommand())) { actionOnButton(TGComponentManager.CONNECTOR, TGComponentManager.AVATARBD_COMPOSITION_CONNECTOR); } else if (command.equals(actions[TGUIAction.ABD_PORT_CONNECTOR].getActionCommand())) { diff --git a/src/ui/TDiagramPanel.java b/src/ui/TDiagramPanel.java index 8b6b0a72fd..d2bce40b2f 100755 --- a/src/ui/TDiagramPanel.java +++ b/src/ui/TDiagramPanel.java @@ -2761,6 +2761,30 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { return true; } + public boolean isAvatarBlockNameUnique(String s) { + Object o; + AvatarBDBlock block; + AvatarBDDataType type; + Iterator iterator = componentList.listIterator(); + + while(iterator.hasNext()) { + o = (TGComponent)(iterator.next()); + if (o instanceof AvatarBDBlock) { + block = (AvatarBDBlock)o; + if (block.getBlockName().equals(s)) { + return false; + } + } + if (o instanceof AvatarBDDataType) { + type = (AvatarBDDataType)o; + if (type.getDataTypeName().equals(s)) { + return false; + } + } + } + return true; + } + public boolean isNCNameUnique(String s) { Object o; TGComponent tgc; @@ -2891,6 +2915,22 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree { return v; } + + public Vector<String> getAllDataTypes() { + Vector<String> v = new Vector<String>(); + TGComponent tgc; + Iterator iterator = componentList.listIterator(); + + while(iterator.hasNext()) { + tgc = (TGComponent)(iterator.next()); + + if (tgc instanceof AvatarBDDataType) { + v.add(((AvatarBDDataType)(tgc)).getDataTypeName()); + } + } + + return v; + } public void removeSynchronizedGates(Vector v, TClassInterface t, TCDSynchroGateList tcdsgl ) { TGComponent tgc; diff --git a/src/ui/TGComponentManager.java b/src/ui/TGComponentManager.java index cf37f5c985..5119a505e0 100755 --- a/src/ui/TGComponentManager.java +++ b/src/ui/TGComponentManager.java @@ -291,6 +291,7 @@ public class TGComponentManager { public static final int AVATARBD_BLOCK = 5000; public static final int AVATARBD_COMPOSITION_CONNECTOR = 5001; public static final int AVATARBD_PORT_CONNECTOR = 5002; + public static final int AVATARBD_DATATYPE = 5003; // AVATAR SMD -> starts at 5100 public static final int AVATARSMD_START_STATE = 5100; @@ -336,6 +337,9 @@ public class TGComponentManager { // AVATAR case AVATARBD_BLOCK: tgc = new AvatarBDBlock(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp); + break; + case AVATARBD_DATATYPE: + tgc = new AvatarBDDataType(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp); break; case AVATARSMD_START_STATE: tgc = new AvatarSMDStartState(x, y, tdp.getMinX(), tdp.getMaxX(), tdp.getMinY(), tdp.getMaxY(), false, null, tdp); @@ -810,6 +814,8 @@ public class TGComponentManager { // AVATAR BD if (tgc instanceof AvatarBDBlock) { return AVATARBD_BLOCK; + } else if (tgc instanceof AvatarBDDataType) { + return AVATARBD_DATATYPE; } else if (tgc instanceof AvatarBDCompositionConnector) { return AVATARBD_COMPOSITION_CONNECTOR; } else if (tgc instanceof AvatarBDPortConnector) { diff --git a/src/ui/TGUIAction.java b/src/ui/TGUIAction.java index 4ad5a4ae0e..5c90e2f349 100755 --- a/src/ui/TGUIAction.java +++ b/src/ui/TGUIAction.java @@ -297,6 +297,7 @@ public class TGUIAction extends AbstractAction { // AVATAR Block Diagram public static final int ABD_BLOCK = 289; + public static final int ABD_DATATYPE = 324; public static final int ABD_COMPOSITION_CONNECTOR = 290; public static final int ABD_PORT_CONNECTOR = 295; @@ -443,7 +444,7 @@ public class TGUIAction extends AbstractAction { //Action for the help button created by Solange public static final int PRUEBA_1 = 205; - public static final int NB_ACTION = 324; + public static final int NB_ACTION = 325; private static final TAction [] actions = new TAction[NB_ACTION]; @@ -826,6 +827,7 @@ public class TGUIAction extends AbstractAction { // AVATAR Block Diagrams actions[ABD_BLOCK] = new TAction("abd-block", "Add a block", IconManager.imgic5000, IconManager.imgic5000, "Block", "Add a SysML Block to the currently opened AVATAR Block Diagram", 0); + actions[ABD_DATATYPE] = new TAction("abd-datatype", "Add a data type", IconManager.imgic5000, IconManager.imgic5000, "Data type", "Add a SysML Block representing a Data Type to the currently opened AVATAR Block Diagram", 0); actions[ABD_COMPOSITION_CONNECTOR] = new TAction("abd-composition-connector", "Add a composition connector between blocks", IconManager.imgic5002, IconManager.imgic5002, "Composition connector", "Add a composition between blocks of the currently opened AVATAR Block Diagram", 0); actions[ABD_PORT_CONNECTOR] = new TAction("abd-port-connector", "Add a composition connector between blocks", IconManager.imgic5004, IconManager.imgic5004, "Port connector", "Add a port link between blocks of the currently opened AVATAR Block Diagram", 0); diff --git a/src/ui/avatarbd/AvatarBDBlock.java b/src/ui/avatarbd/AvatarBDBlock.java index 44ca4e6cec..d983d2ab99 100644 --- a/src/ui/avatarbd/AvatarBDBlock.java +++ b/src/ui/avatarbd/AvatarBDBlock.java @@ -434,7 +434,7 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S return false; } - if (!tdp.isBlockNameUnique(s)) { + if (!tdp.isAvatarBlockNameUnique(s)) { JOptionPane.showMessageDialog(frame, "Could not change the name of the Block: the new name is already in use", "Error", @@ -501,6 +501,12 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S _jdab.addType(TAttribute.getStringType(TAttribute.NATURAL), true); _jdab.addType(TAttribute.getStringType(TAttribute.BOOLEAN), true); _jdab.addType(TAttribute.getStringType(TAttribute.INTEGER), true); + + for(String s: tdp.getAllDataTypes()) { + _jdab.addType(s, false); + } + + _jdab.enableInitialValue(true); _jdab.enableRTLOTOSKeyword(false); _jdab.enableJavaKeyword(false); @@ -840,16 +846,16 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S _id = _id.substring(0, index0); } _id = _id.trim(); - TraceManager.addDev("Searching for signal with id=" + _id); + //TraceManager.addDev("Searching for signal with id=" + _id); AvatarSignal as; for(int i=0; i<mySignals.size(); i++) { as = (AvatarSignal)(mySignals.get(i)); if (as.getId().compareTo(_id) == 0) { - TraceManager.addDev("found"); + //TraceManager.addDev("found"); return as; } } - TraceManager.addDev("Not found"); + //TraceManager.addDev("Not found"); return null; } diff --git a/src/ui/avatarbd/AvatarBDPanel.java b/src/ui/avatarbd/AvatarBDPanel.java index e8e0271aa2..21766bb8c1 100644 --- a/src/ui/avatarbd/AvatarBDPanel.java +++ b/src/ui/avatarbd/AvatarBDPanel.java @@ -53,6 +53,8 @@ import ui.*; import ui.tmldd.*; import java.util.*; +import myutil.*; + public class AvatarBDPanel extends TDiagramPanel { public AvatarBDPanel(MainGUI mgui, TToolBar _ttb) { @@ -68,10 +70,9 @@ public class AvatarBDPanel extends TDiagramPanel { AvatarBDBlock b = (AvatarBDBlock)tgc; //System.out.println("oldValue:" + b.oldValue); return mgui.newAvatarBDBlockName(tp, b.oldValue, b.getValue()); - } /*else if (tgc instanceof TMLActivityDiagramBox) { - if (tgc.getFather() instanceof TMLTaskOperator) { - mgui.selectTab(tp, tgc.getFather().getValue()); - }*/ + } else if (tgc instanceof AvatarBDDataType) { + return true; + } //return false; // because no change made on any diagram //} return false; @@ -588,5 +589,40 @@ public class AvatarBDPanel extends TDiagramPanel { } return null; } + + public Vector getAttributesOfDataType(String _name) { + TGComponent tgc; + Iterator iterator = componentList.listIterator(); + AvatarBDDataType adt; + + while(iterator.hasNext()) { + tgc = (TGComponent)(iterator.next()); + if (tgc instanceof AvatarBDDataType) { + adt = (AvatarBDDataType)tgc; + if (adt.getDataTypeName().compareTo(_name) == 0) { + return adt.getAttributeList(); + } + } + } + + return null; + } + + public TAttribute getAttribute(String _name, String _nameOfBlock) { + + //TraceManager.addDev("Searching for attribute: " + _name + " of block " + _nameOfBlock); + + TAttribute ta; + Vector v = getAllAttributesOfBlock(_nameOfBlock); + + for(int i=0; i<v.size(); i++) { + ta = (TAttribute)(v.get(i)); + if (ta.getId().compareTo(_name) ==0) { + return ta; + } + } + + return null; + } } diff --git a/src/ui/avatarbd/AvatarBDToolBar.java b/src/ui/avatarbd/AvatarBDToolBar.java index 43196bf0ce..8bfb903d78 100644 --- a/src/ui/avatarbd/AvatarBDToolBar.java +++ b/src/ui/avatarbd/AvatarBDToolBar.java @@ -71,6 +71,7 @@ public class AvatarBDToolBar extends TToolBar { mgui.actions[TGUIAction.CONNECTOR_COMMENT].setEnabled(b); mgui.actions[TGUIAction.ABD_BLOCK].setEnabled(b); + mgui.actions[TGUIAction.ABD_DATATYPE].setEnabled(b); mgui.actions[TGUIAction.ABD_COMPOSITION_CONNECTOR].setEnabled(b); mgui.actions[TGUIAction.ABD_PORT_CONNECTOR].setEnabled(b); @@ -101,6 +102,11 @@ public class AvatarBDToolBar extends TToolBar { this.addSeparator(); button = this.add(mgui.actions[TGUIAction.ABD_BLOCK]); + button.addMouseListener(mgui.mouseHandler); + + this.addSeparator(); + + button = this.add(mgui.actions[TGUIAction.ABD_DATATYPE]); button.addMouseListener(mgui.mouseHandler); this.addSeparator(); diff --git a/src/ui/window/JDialogAvatarBlock.java b/src/ui/window/JDialogAvatarBlock.java index 37d3c27a85..c955b16471 100755 --- a/src/ui/window/JDialogAvatarBlock.java +++ b/src/ui/window/JDialogAvatarBlock.java @@ -81,6 +81,7 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis private JButton removeButton; // Method + private boolean hasMethods = true; private JPanel panel3, panel4; private JTextField methodText; private JButton addMethodButton; @@ -90,6 +91,7 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis private JButton removeMethodButton; // Signals + private boolean hasSignals = true; private JPanel panel5, panel6; private JComboBox signalInOutBox; private JTextField signalText; @@ -110,6 +112,18 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis attributesPar = _attributes; methodsPar = _methods; signalsPar = _signals; + + + if (methodsPar == null) { + methodsPar = new Vector(); + hasMethods = false; + } + + if (signalsPar == null) { + signalsPar = new Vector(); + hasSignals = false; + } + forbidden = _forbidden; initValues = new Vector(); this.attrib = attrib; @@ -457,13 +471,17 @@ public class JDialogAvatarBlock extends javax.swing.JDialog implements ActionLis panelAttr.add(panel2, BorderLayout.EAST); tabbedPane.addTab("Attributes", panelAttr); - panelMethod.add(panel3, BorderLayout.WEST); - panelMethod.add(panel4, BorderLayout.EAST); - tabbedPane.addTab("Methods", panelMethod); + if (hasMethods) { + panelMethod.add(panel3, BorderLayout.WEST); + panelMethod.add(panel4, BorderLayout.EAST); + tabbedPane.addTab("Methods", panelMethod); + } - panelSignal.add(panel5, BorderLayout.WEST); - panelSignal.add(panel6, BorderLayout.EAST); - tabbedPane.addTab("Signals", panelSignal); + if (hasSignals) { + panelSignal.add(panel5, BorderLayout.WEST); + panelSignal.add(panel6, BorderLayout.EAST); + tabbedPane.addTab("Signals", panelSignal); + } tabbedPane.setSelectedIndex(tab); -- GitLab