Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • af3/kernel
  • diewald/kernel
2 results
Show changes
package org.fortiss.tooling.kernel.service;
import java.util.List;
import org.fortiss.tooling.kernel.extension.IConstraint;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.internal.ConstraintService;
import org.fortiss.tooling.kernel.model.constraints.ConstraintInstance;
import org.fortiss.tooling.kernel.model.constraints.OutdatedConstraintInstanceStatus;
/**
* The verification service allows to register constraints. See KISS documentation for more details.
*/
public interface IConstraintService {
/** Returns the service instance. */
public static IConstraintService getInstance() {
return ConstraintService.getInstance();
}
/**
* Verifies the constraint instance <code>ci</code>. The service always runs the verification
* in a command. Should not yield any "useless" change because verification should always update
* the constraint instance status and the checksums anyways.
*/
void verify(ConstraintInstance ci);
/**
* Tries to cancel the last verification of the constraint instance <code>ci</code>. The actual
* actions to take upon cancellation are up to the constraint.
*/
void cancel(ConstraintInstance ci);
/**
* @return <code>true</code> if the constraint instance <code>ci</code> is up to date.
* This does not just look at the status but computes a diff between the constrained
* element and the one for which the constraint instance was last time checked. In the
* standard case, it is enough to call IConstraintVerificationUIService.getStatus and
* see if the result is an instance of {@link OutdatedConstraintInstanceStatus}. You
* should use <code>isUpToDate</code> *only if
* IConstraintVerificationUIService.getStatus does not provide the information you
* want*.
*/
boolean isUpToDate(ConstraintInstance ci);
/**
* Completes <code>top</code> with missing constraints instances of constraint handled by
* <code>cstrClass</code>, if applicable.
*
* @return List of added constraints instances.
*
*/
List<ConstraintInstance> addMissingConstraintsInstances(ITopLevelElement top,
Class<? extends IConstraint> cstrClass);
/** Returns the name of the given constraint, usable for serialization. */
public String getName(Class<? extends IConstraint> cstrClass);
/**
* @param cstrClass
* @return name of the group that a particular constraint belong to
*/
public String getGroupName(Class<? extends IConstraint> cstrClass);
/** Returns a constraint, given its name. */
public Class<? extends IConstraint> getConstraintByName(String name);
/** Registers the given verifier with the service. */
void registerConstraint(Class<? extends IConstraint> cstrClass);
/** <code>true</code> if the given instance is queued for update. */
boolean isUpdating(ConstraintInstance ci);
/**
* Marks the given instance as being queued for update.
*
* ONLY FOR INTERNAL USE.
*/
void markAsUpdating(ConstraintInstance ci);
}
CompositionUtils.java 34c0a191bd0fb4176c94b4d61abb5c88a679d5e8 GREEN
ConstraintsUtils.java 0f8be020f2ca4bb08931c32452163c04a28e30ce GREEN
EMFResourceUtils.java 979d0e1f4f66a2b3e715d2da0ebef6493f547fd7 GREEN
EcoreSerializerBase.java 0a0c2969d793d2e68094c55c8f7b0a662ef6e5d5 GREEN
EcoreUtils.java 18416b5c214410a02eb35596fd807a1cc27d6b35 GREEN
......@@ -10,6 +9,6 @@ JavaUtils.java 65cdadfb9137a240ad59992eacf53a15b7f20804 GREEN
KernelModelElementUtils.java fded09befe7e543fc04ea5184ffc1c8a309d7a66 GREEN
LoggingUtils.java 0e0aa5d466d80ea29cfc7e91178b23a5cdd4ddf7 GREEN
PrototypesUtils.java ec75bed75cfc5103f1f38e3a29df86f729428775 GREEN
ResourceUtils.java e31eda3fdbedd2e44c85d471f717b14f92a3c663 GREEN
ResourceUtils.java 7f4941a83115dfbed75eb58b79c0a372fe1cbb94 GREEN
TransformationUtils.java 552d3a9d56d34450be781af828efe0b8aa5d359e GREEN
UniqueIDUtils.java 665955b1790c1bd1c2087e23114da920bfec2265 GREEN
/*-------------------------------------------------------------------------+
| Copyright 2011 fortiss GmbH |
| |
| 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.fortiss.tooling.kernel.utils;
import java.util.NoSuchElementException;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.kernel.extension.IConstraint;
import org.fortiss.tooling.kernel.model.IIdLabeled;
import org.fortiss.tooling.kernel.model.constraints.ConstraintInstance;
import org.fortiss.tooling.kernel.model.constraints.ConstraintsFactory;
import org.fortiss.tooling.kernel.model.constraints.ErrorConstraintInstanceStatus;
import org.fortiss.tooling.kernel.model.constraints.FailedConstraintInstanceStatus;
import org.fortiss.tooling.kernel.model.constraints.IConstrained;
import org.fortiss.tooling.kernel.model.constraints.IConstraintInstanceContainer;
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.IConstraintService;
/**
* Utility methods for dealing with constraints.
*
* @author aravantinos
*/
public class ConstraintsUtils {
/**
* Returns the container of <code>ci</code>. Assumes that it is of type
* {@link IConstraintInstanceContainer}!
*/
public static IConstraintInstanceContainer
getConstraintInstanceContainer(ConstraintInstance ci) {
return (IConstraintInstanceContainer)ci.eContainer();
}
/**
* Defines <code>constrained</code> as the <code>i</code>-th constrained model element of
* <code>ci</code>. Leaves the other elements as they are if they exist, fill them with
* <code>constrained</code> till <code>i</code> otherwise (we cannot set to <code>null</code>).
*/
public static void setConstrainedElement(ConstraintInstance ci, IConstrained constrained,
int i) {
EList<IConstrained> constraineds = ci.getConstraineds();
for(int j = constraineds.size(); j <= i; j++) {
constraineds.add(j, constrained);
}
if(!constrained.getConstraintInstances().contains(ci)) {
constrained.getConstraintInstances().add(ci);
}
}
/** @return the first constraint instance of type <code>cstr</code> in <code>c</code>. */
public static ConstraintInstance getConstraintInstanceOfType(IConstrained c, IConstraint cstr) {
return getConstraintInstanceOfType(c, cstr.getClass());
}
/** @return the first constraint instance of type <code>cstr</code> in <code>c</code>. */
public static ConstraintInstance getConstraintInstanceOfType(IConstrained c,
Class<? extends IConstraint> cstrClass) {
try {
String name = cstrClass.getName();
return c.getConstraintInstances().stream()
.filter(x -> name.equals(x.getConstraintName())).findFirst().get();
} catch(NoSuchElementException e) {
return null;
}
}
/** Exception which embeds a constraint error status. */
public static class ErrorEmbeddingException extends RuntimeException {
/** The embedded error. */
public ErrorConstraintInstanceStatus error;
/** Constructor. */
public ErrorEmbeddingException(ErrorConstraintInstanceStatus error) {
super();
this.error = error;
}
}
/** @return A "success" status. */
public static SuccessConstraintInstanceStatus createSuccessStatus() {
return ConstraintsFactory.eINSTANCE.createSuccessConstraintInstanceStatus();
}
/** @return A "outdated" status for <code>ci</code>. */
public static OutdatedConstraintInstanceStatus createOutdatedStatus(ConstraintInstance ci) {
OutdatedConstraintInstanceStatus status;
if(ci.getStatus() instanceof OutdatedConstraintInstanceStatus) {
status = (OutdatedConstraintInstanceStatus)ci.getStatus();
} else {
status = ConstraintsFactory.eINSTANCE.createOutdatedConstraintInstanceStatus();
ci.setStatus(status);
}
return status;
}
/** @return A "outdated" status. */
public static OutdatedConstraintInstanceStatus createOutdatedStatus() {
return ConstraintsFactory.eINSTANCE.createOutdatedConstraintInstanceStatus();
}
/** @return A "fail" status. */
public static FailedConstraintInstanceStatus createFailStatus() {
return ConstraintsFactory.eINSTANCE.createFailedConstraintInstanceStatus();
}
/** @return An "error" status. */
public static ErrorConstraintInstanceStatus createErrorStatus() {
return ConstraintsFactory.eINSTANCE.createErrorConstraintInstanceStatus();
}
/** @return the first element constrained by <code>ci</code> */
public static IConstrained getFirstConstrained(ConstraintInstance ci) {
try {
// get(0) because the constraint instance shall contain at least one constrained element
// (responsibility of the caller!) and because we want the first element.
return ci.getConstraineds().get(0);
} catch(IndexOutOfBoundsException e) {
return null;
}
}
/** Sets the first constrained element of <code>ci</code> to <code>constrained</code>. */
public static void setFirstConstrained(ConstraintInstance ci, IConstrained constrained) {
setConstrainedElement(ci, constrained, 0);
}
/** @return the second element constrained by <code>ci</code> */
public static IConstrained getSecondConstrained(ConstraintInstance ci) {
try {
// get(1) because the constraint instance shall contain at least one constrained element
// (responsibility of the caller!) and because we want the first element.
return ci.getConstraineds().get(1);
} catch(IndexOutOfBoundsException e) {
return null;
}
}
/** Sets the second constrained element of <code>ci</code> to <code>constrained</code>. */
public static void setSecondConstrained(ConstraintInstance ci, IConstrained constrained) {
setConstrainedElement(ci, constrained, 1);
}
/**
* @return the element constrained by <code>ci</code>.
* Use this function if your constraint constrains only one element!
*/
public static IConstrained getConstrained(ConstraintInstance ci) {
return getFirstConstrained(ci);
}
/**
* Sets the constrained element of <code>ci</code> to <code>constrained</code>.
* Use this function if your constraint constrains only one element!
*/
public static void setConstrained(ConstraintInstance ci, IConstrained constrained) {
setConstrainedElement(ci, constrained, 0);
}
/**
* @return a constraint instance of type <code>cstrClass</code> constraining
* <code>constrained</code>
*/
public static ConstraintInstance createConstraintInstance(
Class<? extends IConstraint> cstrClass, IConstrained constrained) {
ConstraintInstance ci = ConstraintsFactory.eINSTANCE.createConstraintInstance();
ci.setConstraintName(cstrClass.getName());
setConstrained(ci, constrained);
createOutdatedStatus(ci);
return ci;
}
/**
* @return a constraint instance of type <code>cstrClass</code> constraining
* <code>constrained1</code> and <code>constrained2</code>.
*/
public static ConstraintInstance createConstraintInstance(
Class<? extends IConstraint> cstrClass, IConstrained constrained1,
IConstrained constrained2) {
ConstraintInstance c = ConstraintsFactory.eINSTANCE.createConstraintInstance();
c.setConstraintName(IConstraintService.getInstance().getName(cstrClass));
setFirstConstrained(c, constrained1);
setSecondConstrained(c, constrained2);
createOutdatedStatus(c);
return c;
}
/** @return a successful status if <code>b</code> is true, a fail status otherwise */
static public IConstraintInstanceStatus successIfTrue(boolean b) {
return b ? createSuccessStatus() : createFailStatus();
}
/** Removes the IDs of the given object and of its sub-elements. */
public static void filterIDs(EObject obj) {
if(obj instanceof IIdLabeled) {
((IIdLabeled)obj).setId(0);
}
TreeIterator<EObject> it = obj.eAllContents();
while(it.hasNext()) {
EObject elt = it.next();
if(elt instanceof IIdLabeled) {
((IIdLabeled)elt).setId(0);
}
}
}
}
......@@ -117,11 +117,11 @@ public final class ResourceUtils {
for(ManyReference ref : forwardManyReferences) {
Object[] values = ref.getValues();
for(String id : (String[])values) {
for(Object id : values) {
EObject obj;
try {
obj = xmlResource.getEObject(id);
obj = xmlResource.getEObject((String)id);
} catch(RuntimeException exception) {
obj = null;
}
......