blob: 2d3866f7a8aaf7cb47e2cde44cf5f3115a4a18e9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2018 SAP AG 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:
* SAP AG - initial API and implementation
******************************************************************************/
package org.eclipse.ocl.examples.impactanalyzer.util;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.ocl.ecore.Constraint;
import org.eclipse.ocl.ecore.ExpressionInOCL;
import org.eclipse.ocl.ecore.OCLExpression;
public class OclHelper {
private static OclHelper instance = new OclHelper();
public static OclHelper getInstance() {
return instance;
}
public static OCLExpression getRootExpression(EObject x) {
EObject parent = (EObject) x.eContainer();
// The root expression could be contained in an Constraint or an EAnnotation. Therefore stop ascending
// if parent is instance of a container type.
while (parent != null && !(parent instanceof Constraint) && !(parent instanceof EAnnotation)
&& !(parent instanceof ExpressionInOCL)) {
x = parent;
parent = (EObject) x.eContainer();
}
if (x instanceof OCLExpression) {
return (OCLExpression) x;
}
throw new IllegalArgumentException();
}
@SuppressWarnings("unchecked")
public static Collection<Object> flatten(Object o) {
Collection<Object> result;
if (o instanceof Collection<?>) {
if (((Collection<?>) o).isEmpty()) {
result = (Collection<Object>) o;
} else {
result = new HashSet<Object>();
for (Object subO : (Collection<?>) o) {
result.addAll(flatten(subO));
}
}
} else {
result = Collections.singleton(o);
}
return result;
}
}