/******************************************************************************* * 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.internal.ui.templates; 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.IdlLibrary; import gov.redhawk.eclipsecorba.library.provider.RepositoryItemProviderAdapterFactory; import gov.redhawk.ide.sdr.SdrRoot; import gov.redhawk.ide.sdr.provider.SdrItemProviderAdapterFactory; import mil.jpeojtrs.sca.dcd.DeviceConfiguration; import mil.jpeojtrs.sca.sad.SoftwareAssembly; import mil.jpeojtrs.sca.spd.SoftPkg; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.pde.ui.templates.BaseOptionTemplateSection; import org.eclipse.pde.ui.templates.TemplateOption; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.dialogs.FilteredTree; public class SdrResourceOption extends TemplateOption { private FilteredTree viewer; private SdrRoot root; private EObject selection; /** * Constructor for ComboChoiceOption. * * @param section * the parent section. * @param name * the unique name * @param label * the presentable label */ public SdrResourceOption(BaseOptionTemplateSection section, String name, String label, SdrRoot root) { super(section, name, label); this.root = root; } /* * @see org.eclipse.pde.ui.templates.TemplateField#createControl(org.eclipse.swt.widgets.Composite, int) */ @Override public void createControl(Composite parent, int span) { Group group = new Group(parent, SWT.None); group.setLayout(new GridLayout()); group.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).hint(SWT.DEFAULT, 300).create()); group.setText(getMessageLabel()); viewer = new FilteredTree(group, SWT.FULL_SELECTION | SWT.SINGLE | SWT.H_SCROLL, new SdrPatternFilter(), true); final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); adapterFactory.addAdapterFactory(new RepositoryItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new SdrItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new IdlItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new OperationsItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new ExpressionsAdapterFactory()); adapterFactory.addAdapterFactory(new TypesItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); viewer.getViewer().setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory)); viewer.getViewer().setContentProvider(new AdapterFactoryContentProvider(adapterFactory)); viewer.getViewer().setComparator(new ViewerComparator()); viewer.getViewer().addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof IdlLibrary || parentElement instanceof SoftPkg || parentElement instanceof SoftwareAssembly || parentElement instanceof DeviceConfiguration) { return false; } return true; } }); viewer.getViewer().setInput(this.root); } public void setSelection(EObject selection) { this.selection = selection; // TODO Select element in viewer } public EObject getSelection() { if (this.selection != null) { return this.selection; } if (viewer.getViewer().getSelection().isEmpty()) { return null; } Object retVal = ((IStructuredSelection) viewer.getViewer().getSelection()).getFirstElement(); if (retVal instanceof EObject) { return (EObject) retVal; } return null; } /** * @return the viewer */ public FilteredTree getViewer() { return viewer; } /* * @see org.eclipse.pde.ui.templates.TemplateOption#isEmpty() */ @Override public boolean isEmpty() { return getSelection() != null; } }