Skip to content

Commit

Permalink
First transformation on stakeholders (PoC)
Browse files Browse the repository at this point in the history
  • Loading branch information
stefan-ka committed Aug 14, 2024
1 parent cfe8769 commit 0d64c2a
Show file tree
Hide file tree
Showing 6 changed files with 316 additions and 34 deletions.
17 changes: 16 additions & 1 deletion org.contextmapper.dsl.ui/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@
<extension point="org.eclipse.ui.handlers">
<handler
class="org.contextmapper.dsl.ui.ContextMappingDSLExecutableExtensionFactory:org.contextmapper.dsl.ui.handler.SplitAggregateByEntitiesRefactoringHandler"
commandId="org.contextmapper.dsl.ui.handler.SplitAggregateByEntitiesRefactoringCommand">
commandId="org.contextmapper.dsl.ui.handler.Command">
<activeWhen>
<reference
definitionId="org.contextmapper.dsl.ContextMappingDSL.Editor.opened">
Expand Down Expand Up @@ -562,6 +562,15 @@
</reference>
</activeWhen>
</handler>
<handler
class="org.contextmapper.dsl.ui.ContextMappingDSLExecutableExtensionFactory:org.contextmapper.dsl.ui.handler.stakeholders.MoveStakeholderToNewGroupHandler"
commandId="org.contextmapper.dsl.ui.handler.stakeholders.MoveStakeholderToNewGroupRefactoringCommand">
<activeWhen>
<reference
definitionId="org.contextmapper.dsl.ContextMappingDSL.Editor.opened">
</reference>
</activeWhen>
</handler>
</extension>
<extension
point="org.eclipse.ui.commands">
Expand Down Expand Up @@ -665,6 +674,12 @@
id="org.contextmapper.dsl.ui.handler.ExtractSuggestedServiceRefactoringCommand">
</command>
</extension>
<extension
point="org.eclipse.ui.commands">
<command name="Move Stakeholder To New Group" categoryId="org.eclipse.xtext.ui.category.refactoring"
id="org.contextmapper.dsl.ui.handler.stakeholders.MoveStakeholderToNewGroupRefactoringCommand">
</command>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:#TextEditorContext?after=group.edit">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright 2024 The Context Mapper Project Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.contextmapper.dsl.ui.handler.stakeholders;

import org.contextmapper.dsl.cml.CMLResource;
import org.contextmapper.dsl.contextMappingDSL.Stakeholder;
import org.contextmapper.dsl.refactoring.SemanticCMLRefactoring;
import org.contextmapper.dsl.refactoring.stakeholders.MoveStakeholderToNewStakeholderGroupRefactoring;
import org.contextmapper.dsl.ui.handler.AbstractRefactoringHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.emf.ecore.EObject;

public class MoveStakeholderToNewGroupHandler extends AbstractRefactoringHandler {

@Override
protected void executeRefactoring(CMLResource resource, ExecutionEvent event) {
Stakeholder stakeholder = (Stakeholder) getSelectedElement();
SemanticCMLRefactoring ar = new MoveStakeholderToNewStakeholderGroupRefactoring(stakeholder.getName());
ar.refactor(resource, getAllResources());
ar.persistChanges(serializer);
}

@Override
public boolean isEnabled() {
EObject obj = getSelectedElement();

if (obj == null || !super.isEnabled())
return false;

return (obj instanceof Stakeholder);
}

}
68 changes: 37 additions & 31 deletions org.contextmapper.dsl/.launch/LaunchRuntimeEclipse.launch
Original file line number Diff line number Diff line change
@@ -1,34 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
<booleanAttribute key="append.args" value="true"/>
<booleanAttribute key="askclear" value="true"/>
<booleanAttribute key="automaticAdd" value="true"/>
<booleanAttribute key="automaticValidate" value="false"/>
<stringAttribute key="bad_container_name" value="/org.contextmapper.dsl/.launch/"/>
<stringAttribute key="bootstrap" value=""/>
<stringAttribute key="checked" value="[NONE]"/>
<booleanAttribute key="clearConfig" value="false"/>
<booleanAttribute key="clearws" value="false"/>
<booleanAttribute key="clearwslog" value="false"/>
<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Launch Runtime Eclipse"/>
<booleanAttribute key="default" value="true"/>
<booleanAttribute key="includeOptional" value="true"/>
<stringAttribute key="location" value="${workspace_loc}/../runtime-EclipseXtext"/>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.platform.ide"/>
<booleanAttribute key="show_selected_only" value="false"/>
<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useDefaultConfig" value="true"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
<booleanAttribute key="useProduct" value="true"/>
<booleanAttribute key="usefeatures" value="false"/>
<booleanAttribute key="append.args" value="true"/>
<booleanAttribute key="askclear" value="true"/>
<booleanAttribute key="automaticAdd" value="true"/>
<booleanAttribute key="automaticValidate" value="false"/>
<stringAttribute key="bad_container_name" value="/org.contextmapper.dsl/.launch/"/>
<stringAttribute key="bootstrap" value=""/>
<stringAttribute key="checked" value="[NONE]"/>
<booleanAttribute key="clearConfig" value="false"/>
<booleanAttribute key="clearws" value="false"/>
<booleanAttribute key="clearwslog" value="false"/>
<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/LaunchRuntimeEclipse"/>
<booleanAttribute key="default" value="true"/>
<booleanAttribute key="includeOptional" value="true"/>
<stringAttribute key="location" value="${workspace_loc}/../runtime-EclipseXtext"/>
<booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
<mapAttribute key="org.eclipse.debug.core.environmentVariables">
<mapEntry key="WEBKIT_DISABLE_DMABUF_RENDERER" value="1"/>
</mapAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.platform.ide"/>
<booleanAttribute key="show_selected_only" value="false"/>
<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
<booleanAttribute key="useDefaultConfig" value="true"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
<booleanAttribute key="useProduct" value="true"/>
<booleanAttribute key="usefeatures" value="false"/>
</launchConfiguration>
1 change: 1 addition & 0 deletions org.contextmapper.dsl/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ Export-Package: org.contextmapper.dsl,
org.contextmapper.dsl.quickfixes.tactic,
org.contextmapper.dsl.refactoring,
org.contextmapper.dsl.refactoring.exception,
org.contextmapper.dsl.refactoring.stakeholders,
org.contextmapper.dsl.scoping,
org.contextmapper.dsl.serializer,
org.contextmapper.dsl.services,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2018 The Context Mapper Project Team
* Copyright 2018-2024 The Context Mapper Project Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -37,6 +37,18 @@ import org.contextmapper.dsl.contextMappingDSL.UserStory
import org.contextmapper.dsl.services.ContextMappingDSLGrammarAccess
import org.contextmapper.tactic.dsl.formatting2.TacticDDDLanguageFormatter
import org.eclipse.xtext.formatting2.IFormattableDocument
import org.contextmapper.dsl.contextMappingDSL.Stakeholders
import org.contextmapper.dsl.contextMappingDSL.ValueRegister
import org.contextmapper.dsl.contextMappingDSL.Stakeholder
import org.contextmapper.dsl.contextMappingDSL.StakeholderGroup
import org.contextmapper.dsl.contextMappingDSL.ValueEpic
import org.contextmapper.dsl.contextMappingDSL.ValueNarrative
import org.contextmapper.dsl.contextMappingDSL.ValueWeigthing
import org.contextmapper.dsl.contextMappingDSL.ValueCluster
import org.contextmapper.dsl.contextMappingDSL.Value
import org.contextmapper.dsl.contextMappingDSL.ValueElicitation
import org.contextmapper.dsl.contextMappingDSL.Consequence
import org.contextmapper.dsl.contextMappingDSL.Action

class ContextMappingDSLFormatter extends TacticDDDLanguageFormatter {

Expand Down Expand Up @@ -64,6 +76,12 @@ class ContextMappingDSLFormatter extends TacticDDDLanguageFormatter {
for (userRequirement : contextMappingModel.userRequirements) {
userRequirement.format
}
for (stakeholders : contextMappingModel.stakeholders) {
stakeholders.format
}
for (valueRegister : contextMappingModel.valueRegisters) {
valueRegister.format
}
}

def dispatch void format(ContextMap contextMap, extension IFormattableDocument document) {
Expand Down Expand Up @@ -323,5 +341,133 @@ class ContextMappingDSLFormatter extends TacticDDDLanguageFormatter {
aggregate.format
}
}


def dispatch void format(Stakeholders stakeholderContainer, extension IFormattableDocument document) {
interior(
stakeholderContainer.regionFor.ruleCallTo(OPENRule).append[newLine],
stakeholderContainer.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
for (stakeholder : stakeholderContainer.stakeholders) {
stakeholder.format
}
}

def dispatch void format(StakeholderGroup stakeholderGroup, extension IFormattableDocument document) {
interior(
stakeholderGroup.regionFor.ruleCallTo(OPENRule).append[newLine],
stakeholderGroup.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
for (stakeholder: stakeholderGroup.stakeholders) {
stakeholder.format
}
}

def dispatch void format(Stakeholder stakeholder, extension IFormattableDocument document) {
interior(
stakeholder.regionFor.ruleCallTo(OPENRule).append[newLine],
stakeholder.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
stakeholder.regionFor.keyword('influence').prepend[newLine]
stakeholder.regionFor.keyword('interest').prepend[newLine]
stakeholder.regionFor.keyword('description').prepend[newLine]
}

def dispatch void format(ValueRegister valueRegister, extension IFormattableDocument document) {
interior(
valueRegister.regionFor.ruleCallTo(OPENRule).append[newLine],
valueRegister.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
for (valueCluster : valueRegister.valueClusters) {
valueCluster.format
}
for (value : valueRegister.values) {
value.format
}
for (valueEpic : valueRegister.valueEpics) {
valueEpic.format
}
for (valueNarrative : valueRegister.valueNarratives) {
valueNarrative.format
}
for (valueWeighting : valueRegister.valueWeightings) {
valueWeighting.format
}
}

def dispatch void format(ValueEpic valueEpic, extension IFormattableDocument document) {
interior(
valueEpic.regionFor.ruleCallTo(OPENRule).append[newLine],
valueEpic.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
}

def dispatch void format(ValueNarrative valueNarrative, extension IFormattableDocument document) {
interior(
valueNarrative.regionFor.ruleCallTo(OPENRule).append[newLine],
valueNarrative.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
}

def dispatch void format(ValueWeigthing valueWeighting, extension IFormattableDocument document) {
interior(
valueWeighting.regionFor.ruleCallTo(OPENRule).append[newLine],
valueWeighting.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
}

def dispatch void format(ValueCluster valueCluster, extension IFormattableDocument document) {
interior(
valueCluster.regionFor.ruleCallTo(OPENRule).append[newLine],
valueCluster.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
valueCluster.regionFor.keyword('core').prepend[newLine]
valueCluster.regionFor.keyword('demonstrator').prepend[newLine]
valueCluster.regionFor.keyword('relatedValue').prepend[newLine]
valueCluster.regionFor.keyword('opposingValue').prepend[newLine]
for (value : valueCluster.values) {
value.format
}
for (elicitation : valueCluster.elicitations) {
elicitation.format
}
}

def dispatch void format(Value value, extension IFormattableDocument document) {
interior(
value.regionFor.ruleCallTo(OPENRule).append[newLine],
value.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
value.regionFor.keyword('isCore').prepend[newLine]
value.regionFor.keyword('demonstrator').prepend[newLine]
value.regionFor.keyword('relatedValue').prepend[newLine]
value.regionFor.keyword('opposingValue').prepend[newLine]
for (elicitation : value.elicitations) {
elicitation.format
}
}

def dispatch void format(ValueElicitation elicitation, extension IFormattableDocument document) {
interior(
elicitation.regionFor.ruleCallTo(OPENRule).append[newLine],
elicitation.regionFor.ruleCallTo(CLOSERule).prepend[newLine].append[newLine]
)[indent]
elicitation.regionFor.keyword('priority').prepend[newLine]
elicitation.regionFor.keyword('impact').prepend[newLine]
elicitation.regionFor.keyword('consequences').prepend[newLine]
for (consequence : elicitation.consequences) {
consequence.format
}
}

def dispatch void format(Consequence consequence, extension IFormattableDocument document) {
consequence.regionFor.keyword('good').prepend[newLine]
consequence.regionFor.keyword('bad').prepend[newLine]
consequence.regionFor.keyword('neutral').prepend[newLine]
consequence.action.format
}

def dispatch void format(Action action, extension IFormattableDocument document) {
action.regionFor.keyword('action').prepend[newLine]
}

}
Loading

0 comments on commit 0d64c2a

Please sign in to comment.