You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2015/07/14 21:53:04 UTC

svn commit: r1691068 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger: streampane/Stream.java streampane/StreamPaneView.java ui/Tree.java

Author: jahewson
Date: Tue Jul 14 19:53:03 2015
New Revision: 1691068

URL: http://svn.apache.org/r1691068
Log:
PDFBOX-2530: Show filters in menu labels

Modified:
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPaneView.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java?rev=1691068&r1=1691067&r2=1691068&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java Tue Jul 14 19:53:03 2015
@@ -21,10 +21,11 @@ import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSStream;
@@ -39,8 +40,7 @@ import org.apache.pdfbox.pdmodel.graphic
  */
 class Stream
 {
-    public static final String UNFILTERED = "unfiltered";
-    public static final String FILTERED = "Filtered";
+    public static final String UNFILTERED = "Unfiltered";
     public static final String IMAGE = "Image";
 
     private final COSStream stream;
@@ -73,11 +73,42 @@ class Stream
      * XObject image type stream "Image" is also included in the list.
      * @return An array of String.
      */
-    public String[] getFilterList ()
+    public List<String> getFilterList()
     {
-        Set<String> set = filters.keySet();
-        String[] filterArray = new String[set.size()];
-        return set.toArray(filterArray);
+        List<String> list = new ArrayList<String>();
+        for (Map.Entry<String, List<String>> entry : filters.entrySet()) {
+            list.add(entry.getKey());
+        }
+        return list;
+    }
+
+    /**
+     * Returns the label for the "Unfiltered" menu item.
+     */
+    private String getFilteredLabel()
+    {
+        StringBuilder sb = new StringBuilder();
+        COSBase filters = stream.getFilters();
+        if (filters != null)
+        {
+            if (sb.length() > 0)
+            {
+                sb.append(", ");
+            }
+            if (filters instanceof COSName)
+            {
+                sb.append(((COSName) filters).getName());
+            }
+            else if (filters instanceof COSArray)
+            {
+                COSArray filterArray = (COSArray) filters;
+                for (int i = 0; i < filterArray.size(); i++)
+                {
+                    sb.append(((COSName) filterArray.get(i)).getName());
+                }
+            }
+        }
+        return "Filtered (" + sb.toString() + ")" ;
     }
 
     /**
@@ -94,7 +125,7 @@ class Stream
             {
                 return stream.getUnfilteredStream();
             }
-            else if (FILTERED.equals(key))
+            else if (getFilteredLabel().equals(key))
             {
                 return stream.getFilteredStream();
             }
@@ -131,8 +162,13 @@ class Stream
 
     private Map<String, List<String>> createFilterList(COSStream stream)
     {
-        Map<String, List<String>> filterList = new HashMap<String, List<String>>();
+        Map<String, List<String>> filterList = new LinkedHashMap<String, List<String>>();
 
+        if (isImage)
+        {
+            filterList.put(IMAGE, null);
+        }
+        
         filterList.put(UNFILTERED, null);
         PDStream pdStream = new PDStream(stream);
 
@@ -144,11 +180,7 @@ class Stream
             {
                 filterList.put(getPartialStreamCommand(i), getStopFilterList(i));
             }
-            filterList.put(FILTERED, null);
-        }
-        if (isImage)
-        {
-            filterList.put(IMAGE, null);
+            filterList.put(getFilteredLabel(), null);
         }
         return filterList;
     }

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPaneView.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPaneView.java?rev=1691068&r1=1691067&r2=1691068&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPaneView.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPaneView.java Tue Jul 14 19:53:03 2015
@@ -21,6 +21,7 @@ import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.awt.event.ActionListener;
 import java.awt.image.BufferedImage;
+import java.util.List;
 import javax.swing.BoxLayout;
 import javax.swing.JComboBox;
 import javax.swing.JPanel;
@@ -41,7 +42,7 @@ class StreamPaneView extends JPanel
      * @param initialChoice String instance. Initial choice for showing in the pane.
      * @param listener ActionListener that listens for stream version choice changing.
      */
-    StreamPaneView(String[] filterTypes, String initialChoice, ActionListener listener)
+    StreamPaneView(List<String> filterTypes, String initialChoice, ActionListener listener)
     {
         headerPanel = createHeaderPanel(filterTypes, initialChoice, listener);
         contentPanel = new JPanel(new BorderLayout());
@@ -74,9 +75,9 @@ class StreamPaneView extends JPanel
         this.validate();
     }
 
-    private JPanel createHeaderPanel(String[] availableFilters, String i, ActionListener actionListener)
+    private JPanel createHeaderPanel(List<String> availableFilters, String i, ActionListener actionListener)
     {
-        JComboBox filters = new JComboBox(availableFilters);
+        JComboBox filters = new JComboBox(availableFilters.toArray());
         filters.setSelectedItem(i);
         filters.addActionListener(actionListener);
 

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java?rev=1691068&r1=1691067&r2=1691068&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java Tue Jul 14 19:53:03 2015
@@ -34,6 +34,7 @@ import javax.swing.JPopupMenu;
 import javax.swing.JTree;
 import javax.swing.tree.TreePath;
 import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.io.IOUtils;
@@ -93,6 +94,8 @@ public class Tree extends JTree
         Object obj = nodePath.getLastPathComponent();
         List<JMenuItem> menuItems = new ArrayList<JMenuItem>();
 
+        menuItems.add(getTreePathMenuItem(nodePath));
+
         if (obj instanceof MapEntry)
         {
             obj = ((MapEntry) obj).getValue();
@@ -118,8 +121,7 @@ public class Tree extends JTree
                 menuItems.add(getFilteredStreamSaveMenu(stream));
             }
         }
-
-        menuItems.add(getTreePathMenuItem(nodePath));
+        
         return menuItems;
     }
 
@@ -130,7 +132,7 @@ public class Tree extends JTree
      */
     private JMenuItem getTreePathMenuItem(final TreePath path)
     {
-        JMenuItem copyPathMenuItem = new JMenuItem("Copy tree path");
+        JMenuItem copyPathMenuItem = new JMenuItem("Copy Tree Path");
         copyPathMenuItem.addActionListener(new ActionListener()
         {
             @Override
@@ -150,7 +152,7 @@ public class Tree extends JTree
      */
     private JMenuItem getFilteredStreamSaveMenu(final COSStream cosStream)
     {
-        JMenuItem saveMenuItem = new JMenuItem("Save filtered stream ...");
+        JMenuItem saveMenuItem = new JMenuItem("Save Filtered Stream (" + getFilters(cosStream) + ")...");
         saveMenuItem.addActionListener(new ActionListener()
         {
             @Override
@@ -170,6 +172,35 @@ public class Tree extends JTree
         return saveMenuItem;
     }
 
+    /**
+     * Returns the filters used by the given stream.
+     */
+    private String getFilters(COSStream cosStream)
+    {
+        StringBuilder sb = new StringBuilder();
+        COSBase filters = cosStream.getFilters();
+        if (filters != null)
+        {
+            if (sb.length() > 0)
+            {
+                sb.append(", ");
+            }
+            if (filters instanceof COSName)
+            {
+                sb.append(((COSName) filters).getName());
+            }
+            else if (filters instanceof COSArray)
+            {
+                COSArray filterArray = (COSArray) filters;
+                for (int i = 0; i < filterArray.size(); i++)
+                {
+                    sb.append(((COSName) filterArray.get(i)).getName());
+                }
+            }
+        }
+        return sb.toString();
+    }
+    
 
     /**
      * Produce JMenuItem that saves unfiltered stream
@@ -178,7 +209,7 @@ public class Tree extends JTree
      */
     private JMenuItem getUnFilteredStreamSaveMenu(final COSStream cosStream)
     {
-        JMenuItem saveMenuItem = new JMenuItem("Save unfiltered stream ...");
+        JMenuItem saveMenuItem = new JMenuItem("Save Unfiltered Stream...");
         saveMenuItem.addActionListener(new ActionListener()
         {
             @Override