Commit a2c1c7fa authored by Saad bin Abid's avatar Saad bin Abid
Browse files

Moved the Code specification part (i.e., ECore classes...

Moved the Code specification part (i.e., ECore classes FunctionalSpecification, FunctionalComponent and RelatedTo) to the Functional package of the mira model. Also cleaned the code for the functional specification editor and now no more RelatedTo Section as per Vincent's feedback (i.e., it feels awkward to see relations with the non-functional aspects in the functional aspect). Also made changes in the code where required for the code specification editor.
refs 3033
parent 84e6ecf5
......@@ -19,11 +19,9 @@ package org.fortiss.af3.mira.ui.editor;
import static org.eclipse.core.runtime.IStatus.ERROR;
import static org.eclipse.jface.dialogs.ErrorDialog.openError;
import static org.fortiss.af3.mira.model.MiraPackage.Literals.FUNCTIONAL_SPECIFICATION__CODE_SPECIFICATION;
import static org.fortiss.af3.mira.model.MiraPackage.Literals.FUNCTIONAL_SPECIFICATION__STATEMENT_SEQUENCE;
import static org.fortiss.af3.mira.ui.utils.HighlightUtils.createSourceViewer;
import static org.fortiss.af3.mira.model.functional.FunctionalPackage.Literals.FUNCTIONAL_SPECIFICATION__STATEMENT_SEQUENCE;
import static org.fortiss.af3.mira.ui.utils.HighlightUtils.createSimpleSourceViewer;
import static org.fortiss.af3.mira.ui.utils.MiraLayoutUtils.multiLineInputFactory;
import static org.fortiss.af3.mira.ui.utils.MiraLayoutUtils.multiLineLabelFactory;
import static org.fortiss.tooling.kernel.ui.util.DataBindingUtils.performComplexTextBinding;
import static org.fortiss.tooling.kernel.ui.util.ObservableUtils.observeValue;
import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickFirstInstanceOf;
......@@ -38,7 +36,6 @@ import org.conqat.ide.commons.ui.jface.TreeContentProviderBase;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.text.ITextListener;
import org.eclipse.jface.text.TextEvent;
......@@ -48,23 +45,17 @@ import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ComboBoxViewerCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ST;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.fortiss.af3.expression.model.definitions.FunctionDefinition;
......@@ -72,16 +63,14 @@ import org.fortiss.af3.expression.model.definitions.library.FunctionDefinitionRe
import org.fortiss.af3.expression.ui.databinding.convert.StatementSequenceToStringConverter;
import org.fortiss.af3.expression.ui.databinding.convert.StringToStatementSequenceConverter;
import org.fortiss.af3.expression.ui.databinding.validate.StringToStatementSequenceValidator;
import org.fortiss.af3.mira.model.FunctionalComponent;
import org.fortiss.af3.mira.model.FunctionalSpecification;
import org.fortiss.af3.mira.model.MiraFactory;
import org.fortiss.af3.mira.model.RelatedTo;
import org.fortiss.af3.mira.model.Requirement;
import org.fortiss.af3.mira.model.functional.FunctionalComponent;
import org.fortiss.af3.mira.model.functional.FunctionalFactory;
import org.fortiss.af3.mira.model.functional.FunctionalSpecification;
import org.fortiss.tooling.base.model.element.IModelElementSpecification;
import org.fortiss.tooling.base.ui.ToolingBaseUIActivator;
import org.fortiss.tooling.base.ui.editor.TextCellEditorWithTextStyledTextActionHandler;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.service.ILibraryService;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.service.IActionService;
import org.fortiss.tooling.kernel.ui.util.SelectionUtils;
......@@ -120,13 +109,9 @@ public class FunctionalRequirementEditor<T extends Requirement> extends AspectEd
* not cost anything.
*/
private TreeViewer viewer;
private TreeViewer viewer1;
private TreeViewer viewer2;
/** Top level element for the edited object. */
private ITopLevelElement top;
private ITopLevelElement top1;
/** {@inheritDoc} */
@Override
protected void createAspectSection() {
......@@ -134,8 +119,6 @@ public class FunctionalRequirementEditor<T extends Requirement> extends AspectEd
EList<IModelElementSpecification> specs = editedObject.getSpecifications();
funcSpec = pickFirstInstanceOf(FunctionalSpecification.class, specs);
addFunctionalSpecificationSection(funcSpec);
createNonFunctionalRelationshipSection(funcSpec);
createCodeSpecificationSection(funcSpec);
}
......@@ -246,7 +229,7 @@ public class FunctionalRequirementEditor<T extends Requirement> extends AspectEd
if(!emptyOrAlreadyExists((String)value)) {
top.runAsCommand(() -> {
FunctionalComponent newFuncComp =
MiraFactory.eINSTANCE.createFunctionalComponent();
FunctionalFactory.eINSTANCE.createFunctionalComponent();
newFuncComp.setName((String)value);
funcSpec.getFunctionalComponent().add(newFuncComp);
......@@ -265,7 +248,7 @@ public class FunctionalRequirementEditor<T extends Requirement> extends AspectEd
if(!emptyOrAlreadyExists((String)value)) {
top.runAsCommand(() -> {
FunctionalComponent newFuncComp =
MiraFactory.eINSTANCE.createFunctionalComponent();
FunctionalFactory.eINSTANCE.createFunctionalComponent();
newFuncComp.setName((String)value);
funcSpec.getFunctionalComponent().add(newFuncComp);
......@@ -410,241 +393,45 @@ public class FunctionalRequirementEditor<T extends Requirement> extends AspectEd
};
}
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* section for related to non functional aspects.......
*/
public Composite createNonFunctionalRelationshipSection(FunctionalSpecification ms1) {
Composite nonFunctionalReqRelationsSection =
createNewSection("Non-functional aspect(s)",
"Relationships between this functional specification and other non-functional aspects");
nonFunctionalReqRelationsSection.setLayout(new GridLayout(1, false));
viewer1 = new TreeViewer(nonFunctionalReqRelationsSection, SWT.BORDER | SWT.FULL_SELECTION);
Tree tree = viewer1.getTree();
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).minSize(300, 300)
.applyTo(tree);
tree.setLinesVisible(true);
tree.setHeaderVisible(true);
TreeViewerColumn nonFunctionalRequirementnameColumn =
new TreeViewerColumn(viewer1, SWT.NONE);
TreeColumn trclmnMode = nonFunctionalRequirementnameColumn.getColumn();
trclmnMode.setWidth(300);
trclmnMode.setText("Non-Functional Aspect Name");
nonFunctionalRequirementnameColumn.setLabelProvider(new ColumnLabelProvider() {
/** {@inheritDoc} */
@Override
public String getText(Object element) {
if(element instanceof FakeChild) {
return "Click to add relationship with a non-functional aspect";
}
return funcSpec.getRelatedTo().get((Integer)element).getName();
}
});
nonFunctionalRequirementnameColumn.setEditingSupport(createRelatedToSectionEditingSupport(
viewer1, nonFunctionalRequirementnameColumn));
viewer1.setContentProvider(new TreeContentProviderBase() {
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof List<?>) {
List<Object> range = new ArrayList<Object>();
range.add(new FakeChild());
range.addAll(IntStream.rangeClosed(0, ms1.getRelatedTo().size() - 1).boxed()
.collect(Collectors.toList()));
return range.toArray();
}
return new Object[0];
}
});
viewer1.getControl().addKeyListener(new ViewerKeyAdapter1());
viewer1.setInput(funcSpec.getRelatedTo());
return nonFunctionalReqRelationsSection;
}
/** {@link EditingSupport} for the name column for RelatedTo. */
private EditingSupport createRelatedToSectionEditingSupport(TreeViewer viewer1,
TreeViewerColumn nonFunctionalRequirementnameColumn) {
top1 = IPersistencyService.getInstance().getTopLevelElementFor(getEditedObject());
return new EditingSupport(nonFunctionalRequirementnameColumn.getViewer()) {
@Override
protected void setValue(Object element, Object value) {
if(element instanceof FakeChild) {
if(!emptyOrAlreadyExists((String)value)) {
top1.runAsCommand(() -> {
RelatedTo newRelatedTo = MiraFactory.eINSTANCE.createRelatedTo();
newRelatedTo.setName((String)value);
funcSpec.getRelatedTo().add(newRelatedTo);
viewer1.refresh();
});
}
}
if(element instanceof RelatedTo) {
RelatedTo relatedTo = funcSpec.getRelatedTo().get((Integer)element);
if(relatedTo.getName().equals(value)) {
return;
}
if(!emptyOrAlreadyRelatedToExists((String)value)) {
top1.runAsCommand(() -> {
RelatedTo newRelatedTo = MiraFactory.eINSTANCE.createRelatedTo();
newRelatedTo.setName((String)value);
funcSpec.getRelatedTo().add(newRelatedTo);
viewer1.refresh();
});
}
}
}
@Override
protected Object getValue(Object element) {
return element instanceof RelatedTo ? funcSpec.getRelatedTo().get((Integer)element)
.getName() : "";
}
@Override
protected CellEditor getCellEditor(Object element) {
return new TextCellEditorWithTextStyledTextActionHandler(
getTextStyledTextActionHandler(), (Composite)getViewer().getControl());
}
@Override
protected boolean canEdit(Object element) {
// System.out.println("element type----------->" + element.getClass());
// return element instanceof FakeChild;
return true;
}
};
}
/**
* Checks if the name is empty or already exists among current modes, if so displays an error
* message and return true, otherwise returns false.
*/
private boolean emptyOrAlreadyRelatedToExists(String name) {
if(name.equals("") ||
name.equals(CLICK_TO_ADD_A_NEW_RELATIONSHIP_WITH_NON_FUNCTIONAL_ASPECT)) {
Status status =
new Status(ERROR, ToolingBaseUIActivator.PLUGIN_ID, 0,
"Non-Functional Aspect name is not valid.", null);
openError(Display.getCurrent().getActiveShell(), "Error", null, status);
return true;
}
List<String> relatedToNames =
funcSpec.getRelatedTo().stream().map(c -> c.getName().toLowerCase())
.collect(Collectors.toList());
if(relatedToNames.contains(name.toLowerCase()) ||
name.toLowerCase().equals(
CLICK_TO_ADD_A_NEW_RELATIONSHIP_WITH_NON_FUNCTIONAL_ASPECT)) {
Status status =
new Status(ERROR, ToolingBaseUIActivator.PLUGIN_ID, 0,
"A Non-Functional Aspect with this name already exists.", null);
openError(Display.getCurrent().getActiveShell(), "Error", null, status);
return true;
}
return false;
}
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/** Section for code Specification. */
private Composite createCodeSpecificationSection(FunctionalSpecification ms2) {
Composite parent =
createNewSection(
"Code Specification",
"This Section provides a Code Specification Section to Define Functions Between input(s) and output(s)");
parent.setLayout(new GridLayout(2, false));
parent.setLayout(new GridLayout(1, false));
SourceViewer desc =
createMultiLineFreeInputRequirementField(parent, "",
FUNCTIONAL_SPECIFICATION__CODE_SPECIFICATION);
createSimpleSourceViewer(form, parent, SWT.BORDER | SWT.V_SCROLL | SWT.WRAP |
SWT.MULTI, analysis);
multiLineInputFactory.copy().hint(SWT.FILL, 200).applyTo(desc.getTextWidget());
viewer2 = new TreeViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
Tree tree = viewer2.getTree();
viewer2.setContentProvider(new TreeContentProviderBase() {
multiLineInputFactory.applyTo(desc.getTextWidget());
localRegisteredSourceViewers.add(desc);
desc.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof List<?>) {
List<Object> range = new ArrayList<Object>();
range.add(new FakeChild());
range.add(ms2.getStatementSequence());
return range.toArray();
}
return new Object[0];
public void selectionChanged(SelectionChangedEvent event) {
// TODO Auto-generated method stub
}
});
viewer2.getControl().addKeyListener(new ViewerKeyAdapter());
viewer2.setInput(funcSpec.getStatementSequence());
return parent;
}
/** Create a multi line field of a requirement with free text input. */
private SourceViewer createMultiLineFreeInputRequirementField(Composite composite,
String labelName, EStructuralFeature observedStructuralFeature) {
Label label = toolkit.createLabel(composite, labelName + " ", SWT.READ_ONLY);
multiLineLabelFactory.applyTo(label);
SourceViewer input =
createSourceViewer(form, composite, SWT.BORDER | SWT.V_SCROLL | SWT.WRAP |
SWT.MULTI, analysis, getEditedObject());
multiLineInputFactory.applyTo(input.getTextWidget());
localRegisteredSourceViewers.add(input);
// System.out.println("edited object-------------" + analysis..editedObject);
// bind(dbc, input.getTextWidget(), editedObject, observedStructuralFeature);
// EAttribute nameAttribute = FortissToolingKernelPackage.Literals.INAMED_ELEMENT__NAME;
// function = (FunctionDefinition)input;
// IObservableValue modelObservable = observeValue(function.getFunction(), nameAttribute);
// dbc.bindValue(observeText(nameText, SWT.Modify), modelObservable, null, null);
// modelObservable =
// observeValue(function, DefinitionsPackage.Literals.FUNCTION_DEFINITION__DEFINITION);
// performComplexTextBinding(dbc, definitionText, modelObservable,
// new StatementSequenceToStringConverter(true),
// new StringToStatementSequenceConverter(function),
// new StringToStatementSequenceValidator(function), null);
// set code font
// input.getTextWidget().setFont(new Font(Display.getCurrent(), getOSSpecificCodeFont()));
// new UndoRedo(input.getTextWidget());
input.getTextWidget().setFont(new Font(Display.getCurrent(), getOSSpecificCodeFont()));
input.addTextListener(new ITextListener() {
desc.addTextListener(new ITextListener() {
@Override
public void textChanged(TextEvent event) {
// System.out.println("text changed is------------->" + event.getText());
Object o = (Object)input;
if(input instanceof FunctionDefinitionRef) {
Object o = (Object)desc;
if(o instanceof FunctionDefinitionRef) {
function = (FunctionDefinition)o;
System.out.println("function defintion caught");
}
if(event.getDocumentEvent() != null) {
// showErrors();
}
}
});
viewer.getControl().addKeyListener(new ViewerKeyAdapter());
updateModel(input);
if(ILibraryService.getInstance().isLibraryElementShadow(editedObject)) {
input.getControl().setEnabled(false);
}
// // Context menu
Menu menu = new Menu(composite.getShell(), SWT.POP_UP);
final StyledText editor = input.getTextWidget();
createMenuItem(menu, "Cut", () -> editor.invokeAction(ST.CUT));
createMenuItem(menu, "Copy", () -> editor.invokeAction(ST.COPY));
createMenuItem(menu, "Paste", () -> editor.invokeAction(ST.PASTE));
editor.setMenu(menu);
// bind(dbc, input.getTextWidget(), getEditedObject(), observedStructuralFeature);
return input;
return parent;
}
/** Returns the font specific for the used operation system. */
/** Returns the font specific font for the used operation system. */
private FontData getOSSpecificCodeFont() {
String os = System.getProperty("os.name");
String font = "Courier";
......@@ -661,13 +448,6 @@ public class FunctionalRequirementEditor<T extends Requirement> extends AspectEd
/** Performs the text to model binding. */
private void updateModel(SourceViewer input) {
// IObservableValue modelObservable =
// observeValue(getEditedObject(), FUNCTIONAL_SPECIFICATION__STATEMENT_SEQUENCE);
// performComplexTextBinding(dbc, input.getTextWidget(), modelObservable,
// new StatementSequenceToStringConverter(true),
// new StringToStatementSequenceConverter(getEditedObject()),
// new StringToStatementSequenceValidator(getEditedObject()), null);
IObservableValue modelObservable =
observeValue(getEditedObject(), FUNCTIONAL_SPECIFICATION__STATEMENT_SEQUENCE);
performComplexTextBinding(dbc, input.getTextWidget(), modelObservable,
......@@ -676,21 +456,4 @@ public class FunctionalRequirementEditor<T extends Requirement> extends AspectEd
new StringToStatementSequenceValidator(getEditedObject()), null);
localRegisteredSourceViewers.add(input);
}
/**
* Adds a menu item to <code>menu</code> with description <code>description</code>, triggering
* <code>r</code> when selected.
*/
private static void createMenuItem(Menu menu, String description, Runnable r) {
MenuItem pasteItem = new MenuItem(menu, SWT.PUSH);
pasteItem.setText(description);
pasteItem.addSelectionListener(new SelectionAdapter() {
/** {@inheritDoc} */
@Override
public void widgetSelected(SelectionEvent e) {
r.run();
}
});
}
}
......@@ -39,12 +39,12 @@ import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.fortiss.af3.mira.model.Analysis;
import org.fortiss.af3.mira.model.ContextElement;
import org.fortiss.af3.mira.model.FunctionalComponent;
import org.fortiss.af3.mira.model.FunctionalSpecification;
import org.fortiss.af3.mira.model.Mode;
import org.fortiss.af3.mira.model.ModeSpecification;
import org.fortiss.af3.mira.model.Requirement;
import org.fortiss.af3.mira.model.WordElement;
import org.fortiss.af3.mira.model.functional.FunctionalComponent;
import org.fortiss.af3.mira.model.functional.FunctionalSpecification;
import org.fortiss.af3.mira.model.functional.Signal;
import org.fortiss.af3.mira.model.glossary.Glossary;
import org.fortiss.af3.mira.model.glossary.GlossaryEntry;
......
......@@ -22,11 +22,11 @@ import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickFirstInstanceOf;
import org.eclipse.ui.IEditorPart;
import org.fortiss.af3.mira.model.DerivedRequirementSpecification;
import org.fortiss.af3.mira.model.FunctionalSpecification;
import org.fortiss.af3.mira.model.ModeSpecification;
import org.fortiss.af3.mira.model.Requirement;
import org.fortiss.af3.mira.model.SafetyLevelRequirementSpecification;
import org.fortiss.af3.mira.model.functional.FormalSpecification;
import org.fortiss.af3.mira.model.functional.FunctionalSpecification;
import org.fortiss.af3.mira.model.functional.SignalContainerSpecification;
import org.fortiss.af3.mira.model.interfacebehaviour.InterfaceBehaviourSpecification;
import org.fortiss.af3.mira.model.timing.TimingRequirement;
......
......@@ -26,11 +26,11 @@ import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.resource.ImageDescriptor;
import org.fortiss.af3.mira.model.DerivedRequirementSpecification;
import org.fortiss.af3.mira.model.FunctionalSpecification;
import org.fortiss.af3.mira.model.ModeSpecification;
import org.fortiss.af3.mira.model.Requirement;
import org.fortiss.af3.mira.model.SafetyLevelRequirementSpecification;
import org.fortiss.af3.mira.model.functional.FormalSpecification;
import org.fortiss.af3.mira.model.functional.FunctionalSpecification;
import org.fortiss.af3.mira.model.functional.SignalContainerSpecification;
import org.fortiss.af3.mira.model.interfacebehaviour.InterfaceBehaviourSpecification;
import org.fortiss.af3.mira.model.timing.TimingRequirement;
......
......@@ -28,11 +28,11 @@ import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.resource.ImageDescriptor;
import org.fortiss.af3.mira.model.DerivedRequirementSpecification;
import org.fortiss.af3.mira.model.FunctionalSpecification;
import org.fortiss.af3.mira.model.ModeSpecification;
import org.fortiss.af3.mira.model.Requirement;
import org.fortiss.af3.mira.model.SafetyLevelRequirementSpecification;
import org.fortiss.af3.mira.model.functional.FormalSpecification;
import org.fortiss.af3.mira.model.functional.FunctionalSpecification;
import org.fortiss.af3.mira.model.functional.SignalContainerSpecification;
import org.fortiss.af3.mira.model.interfacebehaviour.InterfaceBehaviourSpecification;
import org.fortiss.af3.mira.model.timing.TimingRequirement;
......
......@@ -164,6 +164,32 @@ public class HighlightUtils {
return viewer;
}
/**
* @param form
* cached form object.. this is a simple form not specific to a requirement
* @param parent
* parent {@link Composite}
* @param styles
* the styles of the SourceViewer
* @param analysis
* the {@link Analysis} container of the edited object
* @return {@link SourceViewer} to show highlighted texts
*/
public static SourceViewer createSimpleSourceViewer(final ScrolledForm form, Composite parent,
int styles, final Analysis analysis) {
final SourceViewer viewer = new SourceViewer(parent, null, styles);
viewer.setDocument(new Document());
viewer.configure(new ConnectionHighlightConfiguration(viewer, analysis));
Menu menu = new Menu(parent.getShell(), SWT.POP_UP);
final StyledText editor = viewer.getTextWidget();
createMenuItem(menu, "Cut", () -> editor.invokeAction(ST.CUT));
createMenuItem(menu, "Copy", () -> editor.invokeAction(ST.COPY));
createMenuItem(menu, "Paste", () -> editor.invokeAction(ST.PASTE));
editor.setMenu(menu);
return viewer;
}
/**
* @param form
* @param analysis
......
......@@ -309,19 +309,6 @@
eType="#//Requirement"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Mode" eSuperTypes="platform:/resource/org.fortiss.tooling.kernel/model/kernel.ecore#//INamedCommentedElement"/>
<eClassifiers xsi:type="ecore:EClass" name="FunctionalSpecification" eSuperTypes="platform:/resource/org.fortiss.tooling.base/model/base.ecore#//element/IModelElementSpecification">
<eStructuralFeatures xsi:type="ecore:EReference" name="functionalComponent" upperBound="-1"
eType="#//FunctionalComponent" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="relatedTo" upperBound="-1"
eType="#//RelatedTo" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="codeSpecification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="statementSequence" eType="ecore:EClass platform:/resource/org.fortiss.af3.expression/model/expression.ecore#//terms/imperative/StatementSequence"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="RelatedTo" eSuperTypes="platform:/resource/org.fortiss.tooling.kernel/model/kernel.ecore#//INamedCommentedElement"/>
<eClassifiers xsi:type="ecore:EClass" name="FunctionalComponent" eSuperTypes="platform:/resource/org.fortiss.tooling.kernel/model/kernel.ecore#//INamedCommentedElement">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="output" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
</eClassifiers>
<eSubpackages name="usecase" nsURI="http://www.fortiss.org/af3/mira/usecase" nsPrefix="org-fortiss-af3-mira-usecase">
<eClassifiers xsi:type="ecore:EClass" name="UseCase" eSuperTypes="#//Requirement platform:/resource/org.fortiss.tooling.base/model/base.ecore#//element/IHierarchicElementContainer #//usecase/UseCaseSpecification">
<eOperations name="getScopeSpecification" eType="#//usecase/ScopeSpecification">
......@@ -541,6 +528,19 @@
eType="#//functional/Signal"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="SignalContainerSpecification" eSuperTypes="#//functional/ISignalsContainer platform:/resource/org.fortiss.tooling.base/model/base.ecore#//element/IModelElementSpecification"/>
<eClassifiers xsi:type="ecore:EClass" name="FunctionalSpecification" eSuperTypes="platform:/resource/org.fortiss.tooling.base/model/base.ecore#//element/IModelElementSpecification">
<eStructuralFeatures xsi:type="ecore:EReference" name="functionalComponent"
upperBound="-1" eType="#//functional/FunctionalComponent" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="relatedTo" upperBound="-1"
eType="#//functional/RelatedTo" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="codeSpecification" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="statementSequence" eType="ecore:EClass platform:/resource/org.fortiss.af3.expression/model/expression.ecore#//terms/imperative/StatementSequence"
containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="RelatedTo" eSuperTypes="platform:/resource/org.fortiss.tooling.kernel/model/kernel.ecore#//INamedCommentedElement"/>
<eClassifiers xsi:type="ecore:EClass" name="FunctionalComponent" eSuperTypes="platform:/resource/org.fortiss.tooling.kernel/model/kernel.ecore#//INamedCommentedElement">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="output" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
</eClassifiers>
</eSubpackages>
<eSubpackages name="glossary" nsURI="http://www.fortiss.org/af3/mira/glossary" nsPrefix="org-fortiss-af3-mira-glossary">
<eClassifiers xsi:type="ecore:EClass" name="Glossary" eSuperTypes="platform:/resource/org.fortiss.tooling.kernel/model/kernel.ecore#//INamedCommentedElement platform:/resource/org.fortiss.tooling.base/model/base.ecore#//element/IHierarchicElement">
......
......@@ -151,16 +151,6 @@
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference mira.ecore#//Trace/targets"/>
</genClasses>
<genClasses ecoreClass="mira.ecore#//Mode"/>
<genClasses ecoreClass="mira.ecore#//FunctionalSpecification">
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference mira.ecore#//FunctionalSpecification/functionalComponent"/>
<genFeatures createChild="false" ecoreFeature="ecore:EReference mira.ecore#//FunctionalSpecification/relatedTo"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute mira.ecore#//FunctionalSpecification/codeSpecification"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference mira.ecore#//FunctionalSpecification/statementSequence"/>
</genClasses>
<genClasses ecoreClass="mira.ecore#//RelatedTo"/>
<genClasses ecoreClass="mira.ecore#//FunctionalComponent">
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute mira.ecore#//FunctionalComponent/output"/>
</genClasses>
<nestedGenPackages prefix="Usecase" basePackage="org.fortiss.af3.mira.model" disposableProviderFactory="true"
ecorePackage="mira.ecore#//usecase">
<genEnums typeSafeEnumCompatible="false" ecoreEnum="mira.ecore#//usecase/ScenarioStepActionType">
......@@ -293,6 +283,16 @@
ecoreFeature="ecore:EReference mira.ecore#//functional/SignalsWithoutTypesStatus/signals"/>
</genClasses>
<genClasses ecoreClass="mira.ecore#//functional/SignalContainerSpecification"/>
<genClasses ecoreClass="mira.ecore#//functional/FunctionalSpecification">
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference mira.ecore#//functional/FunctionalSpecification/functionalComponent"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference mira.ecore#//functional/FunctionalSpecification/relatedTo"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute mira.ecore#//functional/FunctionalSpecification/codeSpecification"/>
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference mira.ecore#//functional/FunctionalSpecification/statementSequence"/>