blob: fd4a0c2b109aed401331f134d116e4e62fba5b28 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2020 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* R.Dvorak and others - QVTo debugger framework
* E.D.Willink - revised API for OCL/QVTi debugger framework
*******************************************************************************/
package org.eclipse.qvtd.debug.ui.launching;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.qvtd.debug.launching.QVTiLaunchConstants;
import org.eclipse.qvtd.pivot.qvtbase.Transformation;
import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
public abstract class QVTDirectionalMainTab<TX extends Transformation> extends DirectionalMainTab<TX>
{
private void gatherOutputModels(@NonNull List<@NonNull TypedModel> outputModels, @NonNull TypedModel typedModel) {
if (!outputModels.contains(typedModel)) {
outputModels.add(typedModel);
for (@NonNull TypedModel anotherTypedModel : QVTbaseUtil.getDependsOns(typedModel)) {
gatherOutputModels(outputModels, anotherTypedModel);
}
}
}
@Override
protected void updateDirection(@NonNull TX transformation) {
// System.out.println("updateDirection");
Set<@NonNull String> enforceableDirectionNames = new HashSet<>();
for (@NonNull TypedModel typedModel : QVTbaseUtil.getEnforceableTypedModels(transformation)) {
String name = typedModel.getName();
if (name != null) {
enforceableDirectionNames.add(name);
}
}
setDirections(enforceableDirectionNames);
}
@Override
protected void updateGroups(@NonNull TX transformation,
@NonNull Map<@NonNull String, @Nullable String> oldInputsMap, @NonNull Map<@NonNull String, @Nullable String> newInputsMap,
@NonNull Map<@NonNull String, @Nullable String> oldOutputsMap, @NonNull Map<@NonNull String, @Nullable String> newOutputsMap,
@NonNull Map<@NonNull String, @Nullable String> intermediateMap) {
super.updateGroups(transformation, oldInputsMap, newInputsMap, oldOutputsMap, newOutputsMap, intermediateMap);
Set<@NonNull TypedModel> inputs = new HashSet<>();
Set<@NonNull TypedModel> outputs = new HashSet<>();
String directionName = directionCombo.getText();
List<@NonNull TypedModel> inputModels = new ArrayList<>();
List<@NonNull TypedModel> outputModels = new ArrayList<>();
Iterable<@NonNull TypedModel> modelParameters = QVTbaseUtil.getModelParameters(transformation);
TypedModel traceModel = QVTbaseUtil.basicGetTraceTypedModel(modelParameters);
for (@NonNull TypedModel typedModel : modelParameters) {
if (!typedModel.isIsPrimitive() && !typedModel.isIsThis() && !typedModel.isIsTrace() && (typedModel != traceModel) && ClassUtil.safeEquals(typedModel.getName(), directionName)) {
gatherOutputModels(outputModels, typedModel);
}
}
for (@NonNull TypedModel typedModel : modelParameters) {
if (!typedModel.isIsPrimitive() && !typedModel.isIsThis() && !typedModel.isIsTrace() && (typedModel != traceModel) && !outputModels.contains(typedModel)) {
inputModels.add(typedModel);
}
}
String modeName = modeCombo.getText();
if (QVTiLaunchConstants.CHECK_MODE.equals(modeName)) {
for (@NonNull TypedModel inputModel : inputModels) {
if (inputs.add(inputModel)) {
String name = QVTbaseUtil.getName(inputModel);
newInputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
}
}
for (@NonNull TypedModel outputModel : outputModels) {
if (outputs.add(outputModel)) {
String name = QVTbaseUtil.getName(outputModel);
oldOutputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
}
}
if (traceModel != null) {
newOutputsMap.put(QVTbaseUtil.getTraceName(traceModel), null); //getDefaultPath(outputsGroup, name));
}
}
else if (QVTiLaunchConstants.ENFORCE_CREATE_MODE.equals(modeName)) {
for (@NonNull TypedModel inputModel : inputModels) {
if (inputs.add(inputModel)) {
String name = QVTbaseUtil.getName(inputModel);
newInputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
}
}
for (@NonNull TypedModel outputModel : outputModels) {
if (outputs.add(outputModel)) {
String name = QVTbaseUtil.getName(outputModel);
newOutputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
}
}
if (traceModel != null) {
newOutputsMap.put(QVTbaseUtil.getTraceName(traceModel), null); //getDefaultPath(outputsGroup, name));
}
}
else if (QVTiLaunchConstants.ENFORCE_UPDATE_MODE.equals(modeName)) {
for (@NonNull TypedModel inputModel : inputModels) {
if (inputs.add(inputModel)) {
String name = QVTbaseUtil.getName(inputModel);
oldInputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
newInputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
}
}
for (@NonNull TypedModel outputModel : outputModels) {
if (outputs.add(outputModel)) {
String name = QVTbaseUtil.getName(outputModel);
oldOutputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
newOutputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
}
}
if (traceModel != null) {
String traceName = QVTbaseUtil.getTraceName(traceModel);
oldInputsMap.put(traceName, null); //getDefaultPath(outputsGroup, name));
newOutputsMap.put(traceName, null); //getDefaultPath(outputsGroup, name));
}
}
/* for (TypedModel outputModel : outputModels) {
if (outputs.add(outputModel)) {
String name = QVTbaseUtil.getName(outputModel);
newOutputsMap.put(name, null); //getDefaultPath(outputsGroup, name));
}
}
checkables.addAll(enforceables);
checkables.removeAll(outputModels);
for (TypedModel inputModel : checkables) {
if (inputs.add(inputModel)) {
String name = QVTbaseUtil.getName(inputModel);
newInputsMap.put(name, null); //getDefaultPath(inputsGroup, name));
}
} */
}
}