chiark / gitweb /
status info in main MarketUploader window shows last island
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Sep 2010 14:34:42 +0000 (15:34 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sat, 4 Sep 2010 14:34:42 +0000 (15:34 +0100)
src/com/tedpearson/ypp/market/MarketUploader.java

index 666ad23..e09a876 100644 (file)
@@ -38,6 +38,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
        private JFrame frame = null;
        private Window window = null;
        private JButton findMarket = null;
+       private JLabel resultSummary = null;
 
        private final static String PCTB_LIVE_HOST_URL = "http://pctb.crabdance.com/";
        private final static String PCTB_TEST_HOST_URL = "http://pctb.ilk.org/";
@@ -252,7 +253,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                }
                frame = new JFrame("MarketUploader");
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-               frame.getContentPane().setLayout(new FlowLayout());
+               frame.getContentPane().setLayout(new GridLayout(2,1));
                //frame.setPreferredSize(new Dimension(200, 60));
                
                findMarket = new JButton("Upload Market Data");
@@ -261,11 +262,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                                findMarket.setEnabled(false);
                                new Thread() {
                                        public void run() {
+                                               resultSummary.setText("");
                                                try {
                                                        runPCTB();
                                                } catch(Exception e) {
                                                        error(e.toString());
                                                        e.printStackTrace();
+                                                       resultSummary.setText("failed");
                                                } finally {
                                                        if(sidePanel != null) {
                                                                // remove it if it's still attached
@@ -279,6 +282,10 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                        }
                });
                frame.add(findMarket);
+
+               resultSummary = new JLabel("ready");
+               frame.add(resultSummary);
+               
                frame.pack();
        }
        
@@ -372,6 +379,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                ProgressMonitor pm = new ProgressMonitor(frame,"Processing Market Data","Getting table data",0,100);
                pm.setMillisToDecideToPopup(0);
                pm.setMillisToPopup(0);
+               boolean doneyarrg = false, donepctb = false;
 
                if (uploadToYarrg) {
                        yarrgts = getYarrgTimestamp();
@@ -424,7 +432,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                        pm.setNote("Uploading to Yarrg");
 
                        if (islandName != null) {
-                               runYarrg(yarrgts, oceanName, islandName, yarrgdata);
+                               doneyarrg = runYarrg(yarrgts, oceanName, islandName, yarrgdata);
                        } else {
                                System.out.println("Couldn't upload to Yarrg - no island name found");
                        }
@@ -476,9 +484,18 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                                return;
                        }
                        pm.setNote("Waiting for PCTB...");
-                       finishUpload(in);
+                       donepctb = finishUpload(in);
                }
                pm.setProgress(100);
+
+               if ((uploadToPCTB && !donepctb) ||
+                   (uploadToYarrg && !doneyarrg)) {
+                       resultSummary.setText("trouble");
+               } else if (donepctb || doneyarrg) {
+                       resultSummary.setText("Done " + islandName);
+               } else {
+                       resultSummary.setText("uploaded nowhere!");
+               }
        }
        
        /**
@@ -852,7 +869,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
        *
        *       @param in stream of data from the server to read
        */
-       private void finishUpload(InputStream in) throws IOException {
+       private boolean finishUpload(InputStream in) throws IOException {
                String html = readstreamstring(in);
                //System.out.println(html);
                String topIsland = "0", ocean, islandNum, action, forceReload, filename;
@@ -895,7 +912,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                                                                JOptionPane.QUESTION_MESSAGE, null, myOceansList, null);
                                                        if(option == null) {
                                                                error_html("Unable to determine the current island!", html);
-                                                               return;
+                                                               return false;
                                                        }
                                                        ocean = islandNumbers.get(option).toString();
                                                } else {
@@ -903,11 +920,11 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                                                }
                                        } else {
                                                error_html("Unknown island or other problem!", html);
-                                               return;
+                                               return false;
                                        }
                                } else {
                                        error_html("Unable to determine island name from the client!", html);
-                                       return;
+                                       return false;
                                }
                        } else {
                                topIsland = m.group(1);
@@ -919,7 +936,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                m = oceanIslandNum.matcher(html);
                if(!m.find()) {
                        error_html("This does not seem to be a valid island! Unable to upload.", html);
-                       return;
+                       return false;
                }
                islandNum = m.group(1);
                Pattern params = Pattern.compile("(?s)<input type=\"hidden\" name=\"action\" value=\"([^\"]+)\" />.+?<input type=\"hidden\" name=\"forcereload\" value=\"([^\"]+)\" />.+?<input type=\"hidden\" name=\"filename\" value=\"([^\"]+)\" />");
@@ -927,7 +944,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                if(!m.find()) {
                        error_html("The PCTB server returned unusual data. Maybe you're using an old version of the uploader?",
                                   html);
-                       return;
+                       return false;
                }
                action = m.group(1);
                forceReload = m.group(2);
@@ -938,9 +955,11 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                Pattern done = Pattern.compile("Your data has been integrated into the database. Thank you!");
                m = done.matcher(complete);
                if(m.find()) {
-                       //System.out.println("FILE upload successful!!!");
+                       System.out.println("FILE upload successful!!!");
+                       return true;
                } else {
                        error_html("Something was wrong with the final upload parameters!", complete);
+                       return false;
                }
        }
 
@@ -966,7 +985,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
        return tsresult.substring(3, tsresult.length()-1);
     }
 
-    private void runYarrg(String timestamp, String ocean, String island, String yarrgdata) throws IOException {
+    private boolean runYarrg(String timestamp, String ocean, String island, String yarrgdata) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        BufferedOutputStream bufos = new BufferedOutputStream(new GZIPOutputStream(bos));
        bufos.write(yarrgdata.getBytes() );
@@ -982,12 +1001,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
        http.setParameter("island", island);
        http.setParameter("data", "deduped.tsv.gz", file, "application/octet-stream");
        InputStream in = post_for_yarrg(http);
-       if (in == null) return;
+       if (in == null) return false;
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String yarrgresult; 
        while((yarrgresult = br.readLine()) != null) {
            System.out.println(yarrgresult);
        }
+       return true;
     }
     
 }