< prev index next >

application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/JfrPropertySheet.java

Print this page

        

@@ -34,10 +34,11 @@
 
 import java.text.MessageFormat;
 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;
 import java.util.LinkedList;
 import java.util.List;

@@ -49,10 +50,12 @@
 import java.util.function.Predicate;
 import java.util.logging.Level;
 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;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;

@@ -87,10 +90,11 @@
 import org.openjdk.jmc.common.unit.RangeContentType;
 import org.openjdk.jmc.common.unit.UnitLookup;
 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;
 import org.openjdk.jmc.flightrecorder.ui.selection.IFilterFlavor;
 import org.openjdk.jmc.flightrecorder.ui.selection.IFlavoredSelection;

@@ -113,14 +117,17 @@
 import org.openjdk.jmc.ui.misc.TypedLabelProvider;
 
 // 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<IType<?>> selectedTypes = Collections.emptySet();
         private static class PropertySheetRowSelection extends FlavoredSelectionBase {
 
                 private final PropertySheetRow row;
 
                 PropertySheetRowSelection(PropertySheetRow row) {

@@ -296,14 +303,16 @@
                                         if (p == CALCULATING) {
                                                 return Messages.JFR_PROPERTIES_CALCULATING;
                                         } 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);
                                         } else if (value instanceof IDescribable) {
                                                 return ((IDescribable) value).getName();

@@ -312,11 +321,15 @@
                                                 return "[" + values[0].getName() + " ... " //$NON-NLS-1$ //$NON-NLS-2$
                                                                 + values[values.length - 1].getName() + "]"; //$NON-NLS-1$
                                         } 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<IType<?>>((Collection<IType<?>>) value)
+                                                        .stream().collect(Collectors.toSet());
+
                                                 return limitedDeepToString(((Collection<?>) value).toArray(), this::getValueString);
                                         }
                                         return TypeHandling.getValueString(value);
                                 }
 

@@ -329,10 +342,22 @@
                                         return JfrPropertySheet.getVerboseString(value);
                                 };
 
                         }).build();
 
+        private static void updateSelectedTypes(Object value) {
+                if (value instanceof IType<?>) {
+                        selectedTypes = new HashSet<IType<?>>();
+                        selectedTypes.add((IType<?>) value);
+                }
+                else if (value instanceof Collection<?>) {
+                        selectedTypes = new HashSet<IType<?>>((Collection<IType<?>>) value)
+                                        .stream().collect(Collectors.toSet());
+                }
+                
+        }
+        
         private static String limitedDeepToString(Object[] array, Function<Object, String> valueToStringProvider) {
                 return limitedDeepToString(array, new StringBuilder(), true, valueToStringProvider);
         }
 
         private static String limitedDeepToString(

@@ -441,10 +466,13 @@
                                 }
                         }
                         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)));
                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
                                 ActionToolkit.forListSelection(viewer, Messages.STORE_AND_ACTIVATE_SELECTION_ACTION, false,
< prev index next >