Skip to content
Snippets Groups Projects
Commit fc8c2e7d authored by Vincent Aravantinos's avatar Vincent Aravantinos
Browse files

introduces fixes in IConstraintUI

refs 2727
parent 53c2eb9f
No related branches found
No related tags found
No related merge requests found
......@@ -17,9 +17,12 @@ $Id$
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.extension;
import java.util.List;
import org.eclipse.jface.resource.ImageDescriptor;
import org.fortiss.tooling.kernel.model.constraints.ConstraintInstance;
import org.fortiss.tooling.kernel.model.constraints.IConstraintInstanceStatus;
import org.fortiss.tooling.kernel.ui.service.IConstraintUIService.IFix;
/**
* Interface for the GUI of constraints.
......@@ -27,7 +30,7 @@ import org.fortiss.tooling.kernel.model.constraints.IConstraintInstanceStatus;
* @author aravantinos
* @author $Author$
* @version $Rev$
* @ConQAT.Rating YELLOW Hash: B9C83F5BA9158F7F9F978DC6D75134DD
* @ConQAT.Rating YELLOW Hash: D340C6D8EA531E21906D9DD90FE79994
*/
public interface IConstraintUI {
......@@ -49,6 +52,12 @@ public interface IConstraintUI {
/** Returns a short user-friendly description for the current status of the constraint instance. */
public String getMessage(ConstraintInstance ci, IConstraintInstanceStatus s);
/**
* Returns a list of possible automatic fixes for the given constraint instance. A constraint
* instance should be candidate to fixing if its status is anything but successful or outdated.
*/
List<IFix> fixes(ConstraintInstance ci, IConstraintInstanceStatus s);
/**
* Set to <code>true</code> if you want that a failure of your constraint be displayed as a
* warning rather than as an error.
......
......@@ -20,6 +20,7 @@ package org.fortiss.tooling.kernel.ui.extension.base;
import static org.fortiss.tooling.kernel.ui.util.ConstraintsUIUtils.triggerMarkersRefresh;
import static org.fortiss.tooling.kernel.utils.ConstraintsUtils.createOutdatedStatus;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
......@@ -45,9 +46,9 @@ import org.fortiss.tooling.kernel.model.constraints.FailedConstraintInstanceStat
import org.fortiss.tooling.kernel.model.constraints.IConstraintInstanceStatus;
import org.fortiss.tooling.kernel.model.constraints.OutdatedConstraintInstanceStatus;
import org.fortiss.tooling.kernel.service.IConstraintService;
import org.fortiss.tooling.kernel.service.IConstraintService.IFix;
import org.fortiss.tooling.kernel.ui.extension.IConstraintUI;
import org.fortiss.tooling.kernel.ui.service.IConstraintUIService;
import org.fortiss.tooling.kernel.ui.service.IConstraintUIService.IFix;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
/**
......@@ -56,7 +57,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
* @author aravantinos
* @author $Author$
* @version $Rev$
* @ConQAT.Rating YELLOW Hash: FC8F2C0D248E94320058F960CAFDE0A2
* @ConQAT.Rating YELLOW Hash: BEC8E8474DCB6D8CE152902F2CB93239
*/
public class ConstraintUIBases {
......@@ -68,6 +69,14 @@ public class ConstraintUIBases {
return status instanceof OutdatedConstraintInstanceStatus;
}
/** {@inheritDoc} */
@Override
public List<IFix> fixes(ConstraintInstance ci, IConstraintInstanceStatus status) {
// No fix by default, it is however strongly recommended to override in order to improve
// user experience.
return new ArrayList<IFix>();
}
/** {@inheritDoc} */
@Override
public boolean openStatus(ConstraintInstance ci, IConstraintInstanceStatus status) {
......@@ -85,7 +94,7 @@ public class ConstraintUIBases {
}
if(status instanceof FailedConstraintInstanceStatus ||
status instanceof ErrorConstraintInstanceStatus) {
List<IFix> fixes = IConstraintService.getInstance().fixes(ci);
List<IFix> fixes = IConstraintUIService.getInstance().fixes(ci);
Shell shell = Display.getCurrent().getActiveShell();
int result = new FixDialog(shell, status, getMessage(ci, status), fixes).open();
if(fixes.size() == 1 && result == 0) {
......
......@@ -56,7 +56,7 @@ import org.fortiss.tooling.kernel.utils.LoggingUtils;
* @author aravantinos
* @author $Author$
* @version $Rev$
* @ConQAT.Rating YELLOW Hash: 7C87877F9798208FD6C226A58DD7466D
* @ConQAT.Rating YELLOW Hash: 5045179FD7A46C6B2BE7499C021C0190
*/
public final class ConstraintUIService implements IConstraintUIService, IIntrospectiveKernelService {
......@@ -463,4 +463,15 @@ public final class ConstraintUIService implements IConstraintUIService, IIntrosp
Class<? extends IConstraint> cstrClass = string2cstrMap.get(ci.getConstraintName());
return instanceMap.get(cstr2cstrUIMap.get(cstrClass)).getDescription();
}
/** {@inheritDoc} */
@Override
public List<IFix> fixes(ConstraintInstance ci) {
List<IFix> fixes = null;
IConstraintUI cstr = getConstraintUI(ci);
if(cstr != null) {
fixes = cstr.fixes(ci, ci.getStatus());
}
return fixes != null ? fixes : new ArrayList<IFix>();
}
}
......@@ -32,14 +32,13 @@ import org.fortiss.tooling.kernel.model.constraints.IConstraintInstanceStatus;
import org.fortiss.tooling.kernel.model.constraints.OutdatedConstraintInstanceStatus;
import org.fortiss.tooling.kernel.model.constraints.SuccessConstraintInstanceStatus;
import org.fortiss.tooling.kernel.service.ICommandStackService;
import org.fortiss.tooling.kernel.service.IConstraintService;
import org.fortiss.tooling.kernel.service.IConstraintService.IFix;
import org.fortiss.tooling.kernel.ui.ESharedImages;
import org.fortiss.tooling.kernel.ui.ToolingKernelUIActivator;
import org.fortiss.tooling.kernel.ui.extension.IContextMenuContributor;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
import org.fortiss.tooling.kernel.ui.service.IConstraintUIService;
import org.fortiss.tooling.kernel.ui.service.IConstraintUIService.IFix;
import org.fortiss.tooling.kernel.ui.service.IContextMenuService;
import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
......@@ -50,7 +49,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
* @author hoelzl
* @author $Author$
* @version $Rev$
* @ConQAT.Rating YELLOW Hash: FBEDF95A872CF35E4760DA22C581BCD8
* @ConQAT.Rating YELLOW Hash: 8BAACE2F49DCFCAFA68F0D0AC25800DB
*/
public class ConstraintMenu implements IContextMenuContributor {
......@@ -253,7 +252,7 @@ public class ConstraintMenu implements IContextMenuContributor {
public KnowMoreAboutUnsuccessfulConstraintAction(ConstraintInstance ci,
IConstrained selectedElt, String suffix) {
super(ci, selectedElt, suffix, getOverlay(ci));
List<IFix> fixes = IConstraintService.getInstance().fixes(ci);
List<IFix> fixes = IConstraintUIService.getInstance().fixes(ci);
if(fixes != null) {
for(IFix fix : fixes) {
this.add(new ActionContributionItem(new FixAction(fix)));
......
package org.fortiss.tooling.kernel.ui.service;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.resource.ImageDescriptor;
......@@ -18,7 +19,7 @@ import org.fortiss.tooling.kernel.ui.internal.ConstraintUIService;
* @author aravantinos
* @author $Author$
* @version $Rev$
* @ConQAT.Rating YELLOW Hash: A8B1FB41DE1F79D3BA503C914A986F80
* @ConQAT.Rating YELLOW Hash: 3D2F650246DB024D643254A1F66C0917
*/
public interface IConstraintUIService {
......@@ -63,6 +64,24 @@ public interface IConstraintUIService {
*/
IConstraintInstanceStatus getStatus(ConstraintInstance ci);
/**
* Returns a list of possible automatic fixes for <code>ci</code>. A constraint instance should
* be candidate to fixing if it is anything but successful or outdated.
*/
List<IFix> fixes(ConstraintInstance ci);
/** Interface for a "fix". */
public interface IFix {
/**
* Description of the fix. Useful to allow the user distinguish the fix in case there are
* several.
*/
String getDescription();
/** Fixes (the constraint instance of) <code>status</code>. */
void runFix(IConstraintInstanceStatus status);
}
/** Returns a list of all available constraints. */
Set<Class<? extends IConstraint>> getAllConstraints();
......
......@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import org.eclipse.emf.ecore.EObject;
......@@ -44,6 +45,7 @@ import org.fortiss.tooling.kernel.model.constraints.IConstraintInstanceStatus;
import org.fortiss.tooling.kernel.model.constraints.OutdatedConstraintInstanceStatus;
import org.fortiss.tooling.kernel.model.constraints.SuccessConstraintInstanceStatus;
import org.fortiss.tooling.kernel.ui.service.IConstraintUIService;
import org.fortiss.tooling.kernel.ui.service.IConstraintUIService.IFix;
import org.fortiss.tooling.kernel.utils.EcoreUtils;
/**
......@@ -52,7 +54,7 @@ import org.fortiss.tooling.kernel.utils.EcoreUtils;
* @author aravantinos
* @author $Author$
* @version $Rev$
* @ConQAT.Rating YELLOW Hash: B0B5292B6B483943B7569735FD98865D
* @ConQAT.Rating YELLOW Hash: 97453A8CA6928F43F260FB918B4C1AA4
*/
public class ConstraintsUIUtils {
......@@ -334,4 +336,31 @@ public class ConstraintsUIUtils {
msg += "subsequent runs should be unnoticed.";
MessageDialog.openWarning(shell, title, msg);
}
/** Base for fixes. */
public static class FixBase implements IFix {
/** The description. */
private String description;
/** The fix itself. */
private Consumer<IConstraintInstanceStatus> fix;
/** Constructor. */
public FixBase(String description, Consumer<IConstraintInstanceStatus> fix) {
this.description = description;
this.fix = fix;
}
/** {@inheritDoc} */
@Override
public String getDescription() {
return description;
}
/** {@inheritDoc} */
@Override
public void runFix(IConstraintInstanceStatus status) {
fix.accept(status);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment