/** * */ package org.feature.multi.perspective.utilities; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.feature.multi.perspective.model.viewmodel.AbstractGroup; import org.feature.multi.perspective.model.viewmodel.CoreGroup; import org.feature.multi.perspective.model.viewmodel.Group; import org.feature.multi.perspective.model.viewmodel.GroupModel; import org.feature.multi.perspective.model.viewmodel.ViewPoint; import org.feature.multi.perspective.model.viewmodel.ViewPointContainer; /** * * Utility class for commonly used GroupModel access and modification methods. * * @author <a href=mailto:info@juliaschroeter.de>Julia Schroeter</a> * */ public final class GroupModelUtil { /** * get all groups contained in the groupmodel. * * @param grupModel * @return list containing all groups */ public static List<AbstractGroup> getAllGroups(GroupModel groupModel, boolean containCoreGroup) { List<AbstractGroup> result = new ArrayList<AbstractGroup>(); CoreGroup core = groupModel.getCoreGroup(); if (core != null) { if (containCoreGroup){ result.add(core); } result.addAll(getGroups(core)); } return result; } private static List<AbstractGroup> getGroups(AbstractGroup parent) { List<AbstractGroup> result = new ArrayList<AbstractGroup>(); EList<Group> groups = parent.getGroups(); result.addAll(groups); for (AbstractGroup group : groups) { result.addAll(getGroups(group)); } return result; } /** * Get a viewpoint from the groupmodel by name. * @param viewpointName * @param groupModel * @return */ public static ViewPoint getViewpointByName(String viewpointName, GroupModel groupModel) { ViewPoint viewpoint = null; ViewPointContainer container = groupModel.getViewPointContainer(); for (ViewPoint vp : container.getViewPoints()) { if (viewpointName.equals(vp.getName())) { viewpoint = vp; break; } } return viewpoint; } /** * get the Ecore GroupModel instance from a GroupModel resource. * @param resource * @return */ public static GroupModel getGroupModel(Resource resource){ GroupModel groupModel = null; if (resource.isLoaded()){ EList<EObject> contents = resource.getContents(); for (EObject eObject : contents) { if (eObject instanceof GroupModel) { groupModel = (GroupModel) eObject; break; } } } return groupModel; } /** * gets all direct and indirect parent groups related to the given group in the view model hierarchy including the given group. * @param group * @return list of all parent view groups including the given view group itself. */ public static List<AbstractGroup> getAllAnchestorGroups(AbstractGroup group){ List<AbstractGroup> anchestorGroups = new ArrayList<AbstractGroup>(); getAllAnchestorGroupsInternal(anchestorGroups, group); return anchestorGroups; } private static void getAllAnchestorGroupsInternal(List<AbstractGroup> anchestorGroups, AbstractGroup group){ if (group != null){ anchestorGroups.add(group); AbstractGroup parent = getParent(group); getAllAnchestorGroupsInternal(anchestorGroups, parent); } } private static AbstractGroup getParent(AbstractGroup origGroup){ AbstractGroup parentGroup = null; if (origGroup instanceof Group) { Group group = (Group) origGroup; parentGroup = group.getParentGroup(); } return parentGroup; } }