package org.eclipse.uml2.diagram.common.commands; import java.util.ArrayList; import java.util.List; import org.eclipse.gmf.runtime.common.core.command.CompositeCommand; import org.eclipse.gmf.runtime.common.core.command.ICommand; import org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand; import org.eclipse.uml2.diagram.common.Messages; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Stereotype; public class ApplyStereotypeHelper { public static ICommand getCommand(Element subject, List<String> toApply) { List<String> applicables = new ArrayList<String>(); for (Stereotype stereo : subject.getApplicableStereotypes()) { applicables.add(stereo.getName()); } for (String str : toApply) { if (false == applicables.contains(str)) { return UnexecutableCommand.INSTANCE; } } CompositeCommand command = new CompositeCommand(Messages.ApplyStereotypeHelper_command_manage_stereotypes); for (Stereotype applied : subject.getAppliedStereotypes()) { if (false == toApply.contains(applied.getName())) { command.add(new ApplyOrUnapplyStereotypeCommand(new ApplyOrUnapplyStereotypeCommand.ApplyOrUnapplyStereotypeRequest(subject, applied, false))); } } for (Stereotype applicable : subject.getApplicableStereotypes()) { if (toApply.contains(applicable.getName()) && (subject.getAppliedStereotype(applicable.getQualifiedName()) == null)) { command.add(new ApplyOrUnapplyStereotypeCommand(new ApplyOrUnapplyStereotypeCommand.ApplyOrUnapplyStereotypeRequest(subject, applicable, true))); } } return command; } }