chiark / gitweb /
show pctb server's html if things don't go well
[jarrg-ian.git] / src / com / tedpearson / ypp / market / MarketUploader.java
index 84ca983c89c080a7feee58e7ba602babfa3e35f1..5ecc9ab7592ed9578a0b4be17cb5d5c07e7b1850 100644 (file)
@@ -340,6 +340,25 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                JOptionPane.showMessageDialog(frame,msg,"Error",JOptionPane.ERROR_MESSAGE);
        }
        
+       private void error_html(String msg, String html) {
+               //System.err.println("===" + html + "===");
+
+               Pattern body = Pattern.compile("<body>(.*)</body>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
+               Matcher m = body.matcher(html);
+               if (m.find()) {
+                       html = m.group(1);
+                       Pattern fixup = Pattern.compile("<(\\w+) */>");;
+                       m = fixup.matcher(html);
+                       html = m.replaceAll("<$1>");
+                       m = Pattern.compile("[\\r\\n]+").matcher(html);
+                       html = m.replaceAll(" ");
+               }
+               String whole_msg = "<html><h1>Error</h1>"+msg+"<h1>PCTB Server said:</h1><blockquote>"+html+"</blockquote>";
+               //System.err.println("###" + whole_msg + "###");
+
+               JOptionPane.showMessageDialog(frame,whole_msg,"Error",JOptionPane.ERROR_MESSAGE);
+       }
+       
        /**
        *       Run the data collection process, and upload the results. This is the method
        *       that calls most of the other worker methods for the process. If an error occurs,
@@ -597,7 +616,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                        //System.out.println(xml);
                        Reader reader = new CharArrayReader(xml.toCharArray());
                        Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(reader));
-                       NodeList maps = d.getElementsByTagName("c");
+                       NodeList maps = d.getElementsByTagName("CommodMap");
                        for(int i=0;i<maps.getLength();i++) {
                                NodeList content = maps.item(i).getChildNodes();
                                Integer num = Integer.parseInt(content.item(1).getTextContent());
@@ -664,9 +683,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                                        buySellCount[1]++;
                                }
                        } catch(IllegalArgumentException e) {
-                               // System.err.println("Error: Unsupported Commodity \"" + offer.get(0) + "\"");
+                               System.err.println("Error: Unsupported Commodity \"" + offer.get(0) + "\"");
                        }
                }
+               if (buySellCount[0]==0 && buySellCount[1]==0) {
+                   error("No (valid) offers for PCTB?!");
+                   throw new IllegalArgumentException();
+               }
                return buySellCount;
        }
        
@@ -861,7 +884,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                                                                islandName +"\" on " + myOceansList.length + " oceans:","Choose Ocean",
                                                                JOptionPane.QUESTION_MESSAGE, null, myOceansList, null);
                                                        if(option == null) {
-                                                               error("Unable to determine the current island!");
+                                                               error_html("Unable to determine the current island!", html);
                                                                return;
                                                        }
                                                        ocean = islandNumbers.get(option).toString();
@@ -869,11 +892,11 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                                                        ocean = myOceanNums.get(0).toString();
                                                }
                                        } else {
-                                               error("Unknown island!");
+                                               error_html("Unknown island or other problem!", html);
                                                return;
                                        }
                                } else {
-                                       error("Unable to determine island name from the client!");
+                                       error_html("Unable to determine island name from the client!", html);
                                        return;
                                }
                        } else {
@@ -885,14 +908,15 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                Pattern oceanIslandNum = Pattern.compile("islands\\[" + ocean + "\\]\\[\\d+\\]=new Option\\(\"" + islandName + "\",(\\d+)");
                m = oceanIslandNum.matcher(html);
                if(!m.find()) {
-                       error("This does not seem to be a valid island! Unable to upload.");
+                       error_html("This does not seem to be a valid island! Unable to upload.", html);
                        return;
                }
                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=\"([^\"]+)\" />");
                m = params.matcher(html);
                if(!m.find()) {
-                       error("The PCTB server returned unusual data. Maybe you're using an old version of the uploader?");
+                       error_html("The PCTB server returned unusual data. Maybe you're using an old version of the uploader?",
+                                  html);
                        return;
                }
                action = m.group(1);
@@ -911,9 +935,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis
                if(m.find()) {
                        //System.out.println("FILE upload successful!!!");
                } else {
-                       error("Something was wrong with the final upload parameters!");
-                       System.err.println(sb.toString());
-                       System.err.println(html);
+                       error_html("Something was wrong with the final upload parameters!", html);
                }
        }