/******************************************************************************* * 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.spd.internal.ui.parts; import gov.redhawk.ide.sdr.SdrRoot; import gov.redhawk.ide.sdr.ui.SdrUiPlugin; import java.util.ArrayList; import mil.jpeojtrs.sca.prf.Kind; import mil.jpeojtrs.sca.prf.PropertyConfigurationType; import mil.jpeojtrs.sca.prf.Simple; import mil.jpeojtrs.sca.spd.PropertyFile; import mil.jpeojtrs.sca.spd.SoftPkg; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.ElementListSelectionDialog; /** * */ public class PropertyElementSelectorDialog extends ElementListSelectionDialog { private final class ElementHolder { private SoftPkg pkg; private Simple prop; private ElementHolder() { } }; /** * @param parent * @param renderer */ public PropertyElementSelectorDialog(final Shell parent) { super(parent, PropertyElementSelectorDialog.createLabelProvider()); setTitle("Select Property"); setBlockOnOpen(true); setEmptyListMessage("No Properties to select."); setEmptySelectionMessage("No property selected."); this.setMessage("Select a property:"); setElements(initElements()); setAllowDuplicates(true); setMultipleSelection(false); } /** * @return */ private Object[] initElements() { // Load all devices from the local SDR root final SdrRoot sdrRoot = SdrUiPlugin.getDefault().getTargetSdrRoot(); final ArrayList<ElementHolder> elements = new ArrayList<ElementHolder>(); for (final SoftPkg deviceSpd : sdrRoot.getDevicesContainer().getComponents()) { final PropertyFile propertyFile = deviceSpd.getPropertyFile(); if ((propertyFile != null) && (propertyFile.getProperties() != null)) { // Allocation properties *must* be simple for (final Simple prop : propertyFile.getProperties().getSimple()) { for (final Kind kind : prop.getKind()) { if (kind.getType().equals(PropertyConfigurationType.ALLOCATION)) { final ElementHolder eh = new ElementHolder(); eh.pkg = deviceSpd; eh.prop = prop; elements.add(eh); } } } } } return elements.toArray(); } /** * {@inheritDoc} */ @Override public Object getFirstResult() { final Object retVal = super.getFirstResult(); if (retVal instanceof ElementHolder) { final ElementHolder v = (ElementHolder) retVal; return v.prop; } return retVal; } /** * {@inheritDoc} */ @Override public Object[] getResult() { final ArrayList<Object> results = new ArrayList<Object>(); final Object[] retVal = super.getResult(); for (final Object obj : retVal) { if (obj instanceof ElementHolder) { results.add(((ElementHolder) obj).prop); } else { results.add(obj); } } return results.toArray(); } /** * @return */ private static ILabelProvider createLabelProvider() { return new LabelProvider() { @Override public String getText(final Object element) { final ElementHolder eh = (ElementHolder) element; String name = eh.prop.getName(); if (name == null) { name = eh.prop.getId(); } return eh.pkg.getName() + " : " + name; } }; } }