/**
* generated by Xtext
*/
package de.unidue.ecg.dialogScript.ui.quickfix;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import de.unidue.ecg.common.linking.CustomLinkingDiagnosticMessageProvider;
import de.unidue.ecg.dialogScript.dialogScript.CharacterDefinition;
import de.unidue.ecg.dialogScript.dialogScript.CharactersDefinition;
import de.unidue.ecg.dialogScript.dialogScript.ConditionDefinition;
import de.unidue.ecg.dialogScript.dialogScript.ConditionList;
import de.unidue.ecg.dialogScript.dialogScript.ConditionsDefinition;
import de.unidue.ecg.dialogScript.dialogScript.DialogLine;
import de.unidue.ecg.dialogScript.dialogScript.DialogScriptFactory;
import de.unidue.ecg.dialogScript.dialogScript.DialogScriptPackage;
import de.unidue.ecg.dialogScript.dialogScript.Script;
import de.unidue.ecg.dialogScript.dialogScript.Switch;
import de.unidue.ecg.dialogScript.dialogScript.SwitchDefinition;
import de.unidue.ecg.dialogScript.dialogScript.SwitchList;
import de.unidue.ecg.dialogScript.dialogScript.SwitchOff;
import de.unidue.ecg.dialogScript.dialogScript.SwitchOn;
import de.unidue.ecg.dialogScript.dialogScript.SwitchValue;
import de.unidue.ecg.dialogScript.dialogScript.SwitchesDefinition;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.EcoreUtil2;
import org.eclipse.xtext.diagnostics.Diagnostic;
import org.eclipse.xtext.ui.editor.model.edit.IModificationContext;
import org.eclipse.xtext.ui.editor.model.edit.ISemanticModification;
import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider;
import org.eclipse.xtext.ui.editor.quickfix.Fix;
import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor;
import org.eclipse.xtext.validation.Issue;
/**
* Custom quickfixes.
*
* see http://www.eclipse.org/Xtext/documentation.html#quickfixes
*/
@SuppressWarnings("all")
public class DialogScriptQuickfixProvider extends DefaultQuickfixProvider {
@Inject
private CustomLinkingDiagnosticMessageProvider customLinkingDiagnosticMessageProvider;
/**
* WHY IS THAT EVEN NEEDED?
* @Fix(DialogScriptValidator.WRONG_CONDTIONAL_USAGE)
* def makeConditionSingle(Issue issue, IssueResolutionAcceptor acceptor) {
* acceptor.accept(issue, 'Add \'single\' modifier', 'Add \'single\' modifier', null) [ element, context |
* val index = Integer.parseInt(issue.data.get(0))
* val hub = element as Hub
* val conditional = hub.choiceDialogs.get(index) as Conditional
* conditional.modifiers.add(Modifier.SINGLE)
* ]
* }
*
*
* @Fix(DialogScriptValidator.WRONG_CONDTIONAL_USAGE)
* def addExitHubStatement(Issue issue, IssueResolutionAcceptor acceptor) {
* acceptor.accept(issue, 'Add \'exit hub\' statement', 'Add \'exit hub\' statement', null) [ element, context |
* val index = Integer.parseInt(issue.data.get(0))
* val hub = element as Hub
* val conditional = hub.choiceDialogs.get(index) as Conditional
* if (conditional.body == null)
* conditional.body = DialogScriptFactory.eINSTANCE.createConditionalBody
* val exit = DialogScriptFactory.eINSTANCE.createExit
* exit.setExitHub(true)
* conditional.body.setJump(exit)
* ]
* }
*/
@Fix(Diagnostic.LINKING_DIAGNOSTIC)
public void conditionUnknown(final Issue issue, final IssueResolutionAcceptor acceptor) {
EClass _conditionDefinition = DialogScriptPackage.eINSTANCE.getConditionDefinition();
String linkText = this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _conditionDefinition);
boolean _notEquals = (!Objects.equal(linkText, null));
if (_notEquals) {
final ISemanticModification _function = new ISemanticModification() {
public void apply(final EObject element, final IModificationContext context) throws Exception {
if ((element instanceof ConditionList)) {
final Script root = EcoreUtil2.<Script>getContainerOfType(element, Script.class);
final ConditionDefinition condition = DialogScriptFactory.eINSTANCE.createConditionDefinition();
EClass _conditionDefinition = DialogScriptPackage.eINSTANCE.getConditionDefinition();
String _linkText = DialogScriptQuickfixProvider.this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _conditionDefinition);
condition.setName(_linkText);
final SwitchList switchList = DialogScriptFactory.eINSTANCE.createSwitchList();
SwitchesDefinition _switchesDefinition = root.getSwitchesDefinition();
boolean _equals = Objects.equal(_switchesDefinition, null);
if (_equals) {
final SwitchDefinition switch_ = DialogScriptFactory.eINSTANCE.createSwitchDefinition();
switch_.setName("switch1");
switch_.setValue(SwitchValue.OFF);
SwitchesDefinition _createSwitchesDefinition = DialogScriptFactory.eINSTANCE.createSwitchesDefinition();
root.setSwitchesDefinition(_createSwitchesDefinition);
SwitchesDefinition _switchesDefinition_1 = root.getSwitchesDefinition();
EList<SwitchDefinition> _switches = _switchesDefinition_1.getSwitches();
_switches.add(switch_);
final Switch switchRef = DialogScriptFactory.eINSTANCE.createSwitch();
switchRef.setSwitch(switch_);
switchRef.setValue(SwitchValue.OFF);
EList<Switch> _switches_1 = switchList.getSwitches();
_switches_1.add(switchRef);
} else {
SwitchesDefinition _switchesDefinition_2 = root.getSwitchesDefinition();
EList<SwitchDefinition> _switches_2 = _switchesDefinition_2.getSwitches();
final SwitchDefinition switch__1 = _switches_2.get(0);
final Switch switchRef_1 = DialogScriptFactory.eINSTANCE.createSwitch();
switchRef_1.setSwitch(switch__1);
switchRef_1.setValue(SwitchValue.OFF);
EList<Switch> _switches_3 = switchList.getSwitches();
_switches_3.add(switchRef_1);
}
condition.setSwitchList(switchList);
ConditionsDefinition _conditionsDefinition = root.getConditionsDefinition();
boolean _equals_1 = Objects.equal(_conditionsDefinition, null);
if (_equals_1) {
ConditionsDefinition _createConditionsDefinition = DialogScriptFactory.eINSTANCE.createConditionsDefinition();
root.setConditionsDefinition(_createConditionsDefinition);
}
ConditionsDefinition _conditionsDefinition_1 = root.getConditionsDefinition();
EList<ConditionDefinition> _conditions = _conditionsDefinition_1.getConditions();
_conditions.add(condition);
}
}
};
acceptor.accept(issue, (("Create condition \'" + linkText) + "\'"), (("Create condition \'" + linkText) + "\'"),
null, _function);
}
}
@Fix(Diagnostic.LINKING_DIAGNOSTIC)
public void characterUnknown(final Issue issue, final IssueResolutionAcceptor acceptor) {
EClass _characterDefinition = DialogScriptPackage.eINSTANCE.getCharacterDefinition();
final String linkText = this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _characterDefinition);
boolean _notEquals = (!Objects.equal(linkText, null));
if (_notEquals) {
final ISemanticModification _function = new ISemanticModification() {
public void apply(final EObject element, final IModificationContext context) throws Exception {
if ((element instanceof DialogLine)) {
final Script root = EcoreUtil2.<Script>getContainerOfType(element, Script.class);
final CharacterDefinition charaDef = DialogScriptFactory.eINSTANCE.createCharacterDefinition();
charaDef.setName(linkText);
CharactersDefinition _charactersDefinition = root.getCharactersDefinition();
boolean _equals = Objects.equal(_charactersDefinition, null);
if (_equals) {
CharactersDefinition _createCharactersDefinition = DialogScriptFactory.eINSTANCE.createCharactersDefinition();
root.setCharactersDefinition(_createCharactersDefinition);
}
CharactersDefinition _charactersDefinition_1 = root.getCharactersDefinition();
EList<CharacterDefinition> _characters = _charactersDefinition_1.getCharacters();
_characters.add(charaDef);
}
}
};
acceptor.accept(issue, (("Create character \'" + linkText) + "\'"), (("Create character \'" + linkText) + "\'"), null, _function);
}
}
@Fix(Diagnostic.LINKING_DIAGNOSTIC)
public void switchUnknown(final Issue issue, final IssueResolutionAcceptor acceptor) {
EClass _switchDefinition = DialogScriptPackage.eINSTANCE.getSwitchDefinition();
String linkText = this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _switchDefinition);
boolean _notEquals = (!Objects.equal(linkText, null));
if (_notEquals) {
final ISemanticModification _function = new ISemanticModification() {
public void apply(final EObject element, final IModificationContext context) throws Exception {
boolean _or = false;
if (((element instanceof SwitchOff) || (element instanceof SwitchOn))) {
_or = true;
} else {
_or = (((element instanceof SwitchOff) || (element instanceof SwitchOn)) || (element instanceof Switch));
}
if (_or) {
final Script root = EcoreUtil2.<Script>getContainerOfType(element, Script.class);
final SwitchDefinition switch_ = DialogScriptFactory.eINSTANCE.createSwitchDefinition();
EClass _switchDefinition = DialogScriptPackage.eINSTANCE.getSwitchDefinition();
String _linkText = DialogScriptQuickfixProvider.this.customLinkingDiagnosticMessageProvider.getLinkText(issue, _switchDefinition);
switch_.setName(_linkText);
switch_.setValue(SwitchValue.OFF);
SwitchesDefinition _switchesDefinition = root.getSwitchesDefinition();
boolean _equals = Objects.equal(_switchesDefinition, null);
if (_equals) {
SwitchesDefinition _createSwitchesDefinition = DialogScriptFactory.eINSTANCE.createSwitchesDefinition();
root.setSwitchesDefinition(_createSwitchesDefinition);
}
SwitchesDefinition _switchesDefinition_1 = root.getSwitchesDefinition();
EList<SwitchDefinition> _switches = _switchesDefinition_1.getSwitches();
_switches.add(switch_);
}
}
};
acceptor.accept(issue, (("Create switch \'" + linkText) + "\'"), (("Create switch \'" + linkText) + "\'"), null, _function);
}
}
}