/******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * 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 *******************************************************************************/ package gov.redhawk.ide.sad.internal.ui.properties; import gov.redhawk.eclipsecorba.idl.Identifiable; import gov.redhawk.eclipsecorba.idl.expressions.util.ExpressionsAdapterFactory; import gov.redhawk.eclipsecorba.idl.operations.provider.OperationsItemProviderAdapterFactory; import gov.redhawk.eclipsecorba.idl.provider.IdlItemProviderAdapterFactory; import gov.redhawk.eclipsecorba.idl.types.provider.TypesItemProviderAdapterFactory; import gov.redhawk.eclipsecorba.library.provider.LibraryItemProviderAdapterFactory; import gov.redhawk.ide.sdr.ui.SdrUiPlugin; import java.util.ArrayList; import java.util.List; import mil.jpeojtrs.sca.partitioning.ComponentInstantiation; import mil.jpeojtrs.sca.partitioning.ComponentSupportedInterfaceStub; import mil.jpeojtrs.sca.partitioning.FindByStub; import mil.jpeojtrs.sca.partitioning.ProvidesPortStub; import mil.jpeojtrs.sca.partitioning.UsesPortStub; import mil.jpeojtrs.sca.scd.ComponentFeatures; import mil.jpeojtrs.sca.scd.Provides; import mil.jpeojtrs.sca.scd.SupportsInterface; import mil.jpeojtrs.sca.scd.Uses; import mil.jpeojtrs.sca.spd.SoftPkg; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.properties.sections.AbstractModelerPropertySection; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.IFilter; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; /** * @since 3.0 * */ public class IdlPropertySection extends AbstractModelerPropertySection { public static class Filter implements IFilter { @Override public boolean select(final Object toTest) { if (toTest instanceof IGraphicalEditPart) { final IGraphicalEditPart part = (IGraphicalEditPart) toTest; final Object modelObj = part.getModel(); if (modelObj instanceof Node) { final Node node = (Node) modelObj; final EObject element = node.getElement(); if (element instanceof UsesPortStub) { return true; } else if (element instanceof ProvidesPortStub) { return true; } else if (element instanceof ComponentSupportedInterfaceStub) { return !(element.eContainer() instanceof FindByStub); } } } return false; } } private TreeViewer treeViewer; private ComposedAdapterFactory adapterFactory; private Label label; /** * */ public IdlPropertySection() { // TODO Auto-generated constructor stub } /** * @wbp.parser.entryPoint */ @Override public void createControls(final Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage) { super.createControls(parent, aTabbedPropertySheetPage); final Composite root = getWidgetFactory().createComposite(parent); root.setLayout(GridLayoutFactory.fillDefaults().numColumns(1).create()); this.label = getWidgetFactory().createLabel(root, ""); final Tree tree = this.getWidgetFactory().createTree(root, SWT.BORDER); tree.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); this.treeViewer = new TreeViewer(tree); this.treeViewer.setContentProvider(new AdapterFactoryContentProvider(getAdapterFactory()) { @Override public Object[] getElements(final Object object) { if (object instanceof List< ? >) { return ((List< ? >) object).toArray(); } return super.getChildren(object); } }); this.treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(getAdapterFactory())); this.treeViewer.setComparator(new ViewerComparator()); } private AdapterFactory getAdapterFactory() { if (this.adapterFactory == null) { this.adapterFactory = new ComposedAdapterFactory(); this.adapterFactory.addAdapterFactory(new LibraryItemProviderAdapterFactory()); this.adapterFactory.addAdapterFactory(new IdlItemProviderAdapterFactory()); this.adapterFactory.addAdapterFactory(new OperationsItemProviderAdapterFactory()); this.adapterFactory.addAdapterFactory(new ExpressionsAdapterFactory()); this.adapterFactory.addAdapterFactory(new TypesItemProviderAdapterFactory()); } return this.adapterFactory; } /** * {@inheritDoc} */ @Override public final void setInput(final IWorkbenchPart part, final ISelection selection) { super.setInput(part, selection); if (this.treeViewer != null) { final EObject obj = getEObject(); final List<String> repIds = new ArrayList<String>(); if (obj instanceof UsesPortStub) { final Uses uses = ((UsesPortStub) obj).getUses(); if (uses != null) { repIds.add(((UsesPortStub) obj).getUses().getRepID()); } } else if (obj instanceof ProvidesPortStub) { final Provides provides = ((ProvidesPortStub) obj).getProvides(); if (provides != null) { repIds.add(provides.getRepID()); } } else if (obj instanceof ComponentSupportedInterfaceStub) { final ComponentSupportedInterfaceStub stub = (ComponentSupportedInterfaceStub) obj; if (stub.eContainer() instanceof ComponentInstantiation) { final ComponentInstantiation instantiation = (ComponentInstantiation) stub.eContainer(); final SoftPkg spd = instantiation.getPlacement().getComponentFileRef().getFile().getSoftPkg(); final ComponentFeatures features = spd.getDescriptor().getComponent().getComponentFeatures(); for (final SupportsInterface i : features.getSupportsInterface()) { repIds.add(i.getRepId()); } } } final List<Identifiable> input = new ArrayList<Identifiable>(); if (!repIds.isEmpty()) { for (final String repId : repIds) { Identifiable item = SdrUiPlugin.getDefault().getTargetSdrRoot().getIdlLibrary().find(repId); if (item != null) { input.add(item); } } this.label.setText(repIds.toString()); } this.treeViewer.setInput(input); } } @Override public boolean shouldUseExtraSpace() { return true; } }