--- old/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/JfrPropertySheet.java 2019-04-02 15:48:52.450349467 -0400 +++ new/application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/JfrPropertySheet.java 2019-04-02 15:48:52.376349926 -0400 @@ -36,6 +36,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; @@ -51,6 +52,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ISelection; @@ -89,6 +92,7 @@ import org.openjdk.jmc.common.util.TypeHandling; import org.openjdk.jmc.flightrecorder.JfrAttributes; import org.openjdk.jmc.flightrecorder.ui.common.DataPageToolkit; +import org.openjdk.jmc.flightrecorder.ui.common.ImageConstants; import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages; import org.openjdk.jmc.flightrecorder.ui.preferences.PreferenceKeys; import org.openjdk.jmc.flightrecorder.ui.selection.FlavoredSelectionBase; @@ -115,10 +119,12 @@ // FIXME: fields - units - filters - icons etc. should be handled more properly public class JfrPropertySheet extends Page implements IPropertySheetPage { + private static final ImageDescriptor NEW_PAGE_ICON = FlightRecorderUI.getDefault() + .getMCImageDescriptor(ImageConstants.ICON_NEW_PAGE); private static final String HELP_CONTEXT_ID = FlightRecorderUI.PLUGIN_ID + ".JfrPropertiesView"; //$NON-NLS-1$ private static final Object TOO_MANY_VALUES = new Object(); private static final PropertySheetRow CALCULATING = new PropertySheetRow(null, null); - + private static Set> selectedTypes = Collections.emptySet(); private static class PropertySheetRowSelection extends FlavoredSelectionBase { private final PropertySheetRow row; @@ -298,10 +304,12 @@ } else if (value == TOO_MANY_VALUES) { return Messages.JFR_PROPERTIES_TOO_MANY_VALUES; } + updateSelectedTypes(value); return getValueString(value); }; // FIXME: Merge with TypeHandling.getValueString + @SuppressWarnings("unchecked") private String getValueString(Object value) { if (value instanceof IItemCollection) { return itemCollectionDescription((IItemCollection) value); @@ -314,7 +322,11 @@ } else if (value instanceof Object[]) { return limitedDeepToString((Object[]) value, this::getValueString); - } else if (value instanceof Collection) { + } else if (value instanceof Collection) { + System.out.println(value); + selectedTypes = new HashSet>((Collection>) value) + .stream().collect(Collectors.toSet()); + return limitedDeepToString(((Collection) value).toArray(), this::getValueString); } return TypeHandling.getValueString(value); @@ -330,7 +342,19 @@ }; }).build(); - + + private static void updateSelectedTypes(Object value) { + if (value instanceof IType) { + selectedTypes = new HashSet>(); + selectedTypes.add((IType) value); + } + else if (value instanceof Collection) { + selectedTypes = new HashSet>((Collection>) value) + .stream().collect(Collectors.toSet()); + } + + } + private static String limitedDeepToString(Object[] array, Function valueToStringProvider) { return limitedDeepToString(array, new StringBuilder(), true, valueToStringProvider); } @@ -443,6 +467,9 @@ return null; }; // FIXME: Break out to other place where these actions are added to menus + IAction addPageAction = ActionToolkit.action(() -> DataPageToolkit.addPage(selectedTypes), + Messages.EventBrowserPage_NEW_PAGE_USING_TYPES_ACTION, NEW_PAGE_ICON); + mm.appendToGroup(MCContextMenuManager.GROUP_NEW, addPageAction); mm.appendToGroup(MCContextMenuManager.GROUP_EDIT, ActionToolkit.forListSelection(viewer, Messages.STORE_SELECTION_ACTION, false, actionProvider.apply(controller.getSelectionStore()::addSelection)));