/******************************************************************************* * Copyright (c) 2011, 2014 Formal Mind GmbH and University of Dusseldorf and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Michael Jastram - initial API and implementation * Lukas Ladenberger - ProR GUI ******************************************************************************/ package org.eclipse.rmf.reqif10.common.util; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.eclipse.emf.common.command.AbstractCommand; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EObject; import org.eclipse.rmf.reqif10.ReqIF; import org.eclipse.rmf.reqif10.ReqIF10Factory; import org.eclipse.rmf.reqif10.ReqIFToolExtension; /** * {@link ReqIFToolExtension} in ReqIF models are special, as tools may insert their own models. This class contains a * number of static helper methods that helps dealing with them. */ public class ReqIFToolExtensionUtil { public static List<EObject> getToolExtensionsByNsURI(ReqIF reqIF, String nsURI) { final List<ReqIFToolExtension> reqIFToolExtensions = reqIF.getToolExtensions(); List<EObject> toolExtensions = new ArrayList<EObject>(); for (ReqIFToolExtension reqIFToolExtension : reqIFToolExtensions) { for (EObject extension : reqIFToolExtension.getExtensions()) { if (extension.eClass().getEPackage().getNsURI().equals(nsURI)) { toolExtensions.add(extension); } } } return toolExtensions; } @SuppressWarnings("unchecked") public static <T> List<T> getToolExtensionsByType(ReqIF reqIF, EClassifier type) { final List<ReqIFToolExtension> reqIFToolExtensions = reqIF.getToolExtensions(); List<T> toolExtensions = new ArrayList<T>(); for (ReqIFToolExtension reqIFToolExtension : reqIFToolExtensions) { for (EObject extension : reqIFToolExtension.getExtensions()) { if (type.isInstance(extension)) { toolExtensions.add((T) extension); } } } return toolExtensions; } // TODO: add exception in case the anchor is not part of an ReqIF model public static void addToolExtension(ReqIF reqIF, EObject toolExtension) { if (null != reqIF && null != toolExtension) { ReqIFToolExtension reqIFToolExtension = ReqIF10Factory.eINSTANCE.createReqIFToolExtension(); reqIF.getToolExtensions().add(reqIFToolExtension); reqIFToolExtension.getExtensions().add(toolExtension); } } public static Command getAddToolExtensionCommand(final ReqIF reqIF, final EObject toolExtension) { Command command = new AbstractCommand() { ReqIFToolExtension reqIFToolExtension; public void execute() { reqIFToolExtension = ReqIF10Factory.eINSTANCE.createReqIFToolExtension(); reqIF.getToolExtensions().add(reqIFToolExtension); reqIFToolExtension.getExtensions().add(toolExtension); } public void redo() { reqIF.getToolExtensions().add(reqIFToolExtension); reqIFToolExtension.getExtensions().add(toolExtension); } @Override public void undo() { reqIF.getToolExtensions().remove(reqIFToolExtension); } @Override public Collection<?> getAffectedObjects() { return Arrays.asList(reqIFToolExtension, toolExtension); } @Override protected boolean prepare() { return true; } }; return command; } }