You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2020/12/29 12:16:39 UTC

svn commit: r1884904 - /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

Author: msahyoun
Date: Tue Dec 29 12:16:39 2020
New Revision: 1884904

URL: http://svn.apache.org/viewvc?rev=1884904&view=rev
Log:
PDFBOX-2602: fix calling PDFDebugger from pdfbox app

Modified:
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1884904&r1=1884903&r2=1884904&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java Tue Dec 29 12:16:39 2020
@@ -132,6 +132,8 @@ import picocli.CommandLine;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
 import picocli.CommandLine.Parameters;
+import picocli.CommandLine.Spec;
+import picocli.CommandLine.Model.CommandSpec;
 
 /**
  * PDF Debugger.
@@ -142,7 +144,8 @@ import picocli.CommandLine.Parameters;
  */
 @SuppressWarnings({ "serial", "squid:MaximumInheritanceDepth", "squid:S1948" })
 @Command(name = "pdfdebugger", description = "Analyzes and inspects the internal structure of a PDF document")
-public class PDFDebugger extends JFrame {
+public class PDFDebugger extends JFrame implements Callable<Integer>
+{
     private static final Set<COSName> SPECIALCOLORSPACES = new HashSet<>(
             Arrays.asList(COSName.INDEXED, COSName.SEPARATION, COSName.DEVICEN));
 
@@ -181,12 +184,11 @@ public class PDFDebugger extends JFrame
     // Expected for CLI app to write to System.out/Sytem.err
     @SuppressWarnings("squid:S106")
     private static final PrintStream SYSERR = System.err;
-    private static final PrintStream SYSOUT = System.out;
 
     @Option(names = { "-h", "--help" }, usageHelp = true, description = "display this help message")
     boolean usageHelpRequested;
 
-    @Option(names = "-password", description = "the password for the PDF or certificate in keystore.", arity = "0..1", interactive = true)
+    @Option(names = "-password", description = "password to decrypt the document", arity = "0..1", interactive = true)
     private String password;
 
     @Option(names = "-viewstructure", description = "activate structure mode on startup")
@@ -198,12 +200,12 @@ public class PDFDebugger extends JFrame
     // configuration
     public static final Properties configuration = new Properties();
 
+    @Spec CommandSpec spec;
+
     /**
      * Constructor.
      */
     public PDFDebugger() {
-        loadConfiguration();
-        initComponents();
     }
 
     /**
@@ -213,51 +215,48 @@ public class PDFDebugger extends JFrame
      *                   structure is to be displayed.
      */
     public PDFDebugger(boolean isPageMode) {
-        this.viewstructure = !isPageMode;
-        loadConfiguration();
-        initComponents();
+        this.viewstructure = isPageMode ? false : true;
     }
 
     /**
      * Entry point.
      * 
      * @param args the command line arguments
-     * @throws Exception if anything goes wrong.
      */
-    public static void main(String[] args) throws Exception
+    public static void main(String[] args)
     {
-        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-        if (System.getProperty("apple.laf.useScreenMenuBar") == null)
+        int exitCode = new CommandLine(new PDFDebugger()).execute(args);
+        if (exitCode > 0)
         {
-            System.setProperty("apple.laf.useScreenMenuBar", "true");
+            System.exit(exitCode);
         }
+    }
 
-        // handle uncaught exceptions
-        Thread.setDefaultUncaughtExceptionHandler(
-                (thread, throwable) -> new ErrorDialog(throwable).setVisible(true));
-
-
+    public Integer call()
+    {
         try
         {
-            CommandLine commandLine  = new CommandLine(PDFDebugger.class);
-            commandLine.parseArgs(args);
-            PDFDebugger viewer = commandLine.getCommand();
-            
-            if (viewer.usageHelpRequested)
+            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+            if (System.getProperty("apple.laf.useScreenMenuBar") == null)
             {
-                commandLine.usage(SYSOUT);
-                System.exit(0);
+                System.setProperty("apple.laf.useScreenMenuBar", "true");
             }
-
+    
+            // handle uncaught exceptions
+            Thread.setDefaultUncaughtExceptionHandler(
+                    (thread, throwable) -> new ErrorDialog(throwable).setVisible(true));
+    
+            loadConfiguration();
+            initComponents();
 
             // use our custom logger
             // this works only if there is no "LogFactory.getLog()" in this class,
             // and if there are no methods that call logging, even invisible
             // use reduced file from PDFBOX-3653 to see logging
-            LogDialog.init(viewer, viewer.statusBar.getLogLabel());
+            LogDialog.init(this,statusBar.getLogLabel());
             System.setProperty("org.apache.commons.logging.Log", "org.apache.pdfbox.debugger.ui.DebugLog");
 
-            TextDialog.init(viewer);
+            TextDialog.init(this);
 
             // trigger premature initializations for more accurate rendering benchmarks
             // See discussion in PDFBOX-3988
@@ -270,19 +269,19 @@ public class PDFDebugger extends JFrame
                 FilterFactory.INSTANCE.getFilter(COSName.FLATE_DECODE);
             }
 
-            if (viewer.infile != null && viewer.infile.exists())
+            if (infile != null && infile.exists())
             {
-                viewer.readPDFFile(viewer.infile, viewer.password);
+                readPDFFile(infile, password);
             }
 
-            viewer.setPageMode(true);
-            viewer.setVisible(true);
+            setVisible(true);
         }
         catch (Exception ex)
         {
             SYSERR.println( "Error viewing document: " + ex.getMessage());
-            System.exit(4);
+            return 4;
         }
+        return 0;
     }
 
     public boolean isPageMode()