/******************************************************************************* * Copyright (c) 2007, 2009 Wind River Systems 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.dsf.ui.viewmodel.datamodel; import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.dsf.datamodel.CompositeDMContext; import org.eclipse.cdt.dsf.datamodel.IDMContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.jface.viewers.TreePath; /** * Object used to combine several DM Contexts found in a tree path of a viewer * update. This object allows the view model to pass complete data model context * information found in the view to the services. * * @since 1.0 */ public class CompositeDMVMContext extends CompositeDMContext { /** * Have to pass in an empty array of contexts to parent constructor * in order to be able to calculate the */ private static IDMContext[] EMPTY_CONTEXTS_ARRAY = new IDMContext[0]; /** * The list of parent contexts derived from the input object and * the path. It is calculated on demand. */ private IDMContext[] fParents; /** * Creates a composite context based in a viewer update. */ public CompositeDMVMContext(IViewerUpdate update) { this(update.getViewerInput(), update.getElementPath()); } /** * Creates a composite context based on a viewer input and a tree path. */ public CompositeDMVMContext(Object viewerInputObject, TreePath treePath) { super(EMPTY_CONTEXTS_ARRAY); List<IDMContext> parentsList = new ArrayList<IDMContext>(treePath.getSegmentCount() + 1); for (int i = treePath.getSegmentCount() - 1; i >=0 ; i--) { if (treePath.getSegment(i) instanceof IDMVMContext) { parentsList.add( ((IDMVMContext)treePath.getSegment(i)).getDMContext() ); } } if (viewerInputObject instanceof IDMVMContext) { parentsList.add( ((IDMVMContext)viewerInputObject).getDMContext() ); } fParents = parentsList.toArray(new IDMContext[parentsList.size()]); } @Override public IDMContext[] getParents() { return fParents; } }