X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=jarrg-ian.git;a=blobdiff_plain;f=src%2Fcom%2Ftedpearson%2Fypp%2Fmarket%2FMarketUploader.java;h=666ad23f844e01f1478453db2db2d3e2836fdbd5;hp=325d7cc27e133107cf9541142e8848bbceeccb3b;hb=cc270d577ac30ff93d3b6ba942f96a4cfd4c7c3d;hpb=51eeef799e34499922a74027c64622be2cc11a6d diff --git a/src/com/tedpearson/ypp/market/MarketUploader.java b/src/com/tedpearson/ypp/market/MarketUploader.java index 325d7cc..666ad23 100644 --- a/src/com/tedpearson/ypp/market/MarketUploader.java +++ b/src/com/tedpearson/ypp/market/MarketUploader.java @@ -16,11 +16,10 @@ import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilderFactory; import org.xml.sax.InputSource; import java.util.zip.GZIPOutputStream; -import com.myjavatools.web.ClientHttpRequest; +import net.chiark.yarrg.ClientHttpRequest; import java.util.regex.*; import java.util.prefs.Preferences; import java.beans.*; -import com.tedpearson.util.update.*; /** * MarketUploader is a class that handles the uploading of market @@ -46,8 +45,9 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis // Yarrg protocol parameters private final static String YARRG_CLIENTNAME = "jpctb greenend"; - private final static String YARRG_CLIENTVERSION = "0.1"; - private final static String YARRG_CLIENTFIXES = ""; + private final static String YARRG_CLIENTVERSION = + com.tedpearson.ypp.market.Version.version; + private final static String YARRG_CLIENTFIXES = "bug-094"; private final static String YARRG_LIVE_URL = "http://upload.yarrg.chiark.net/commod-update-receiver"; private final static String YARRG_TEST_URL = "http://upload.yarrg.chiark.net/test/commod-update-receiver"; private String YARRG_URL; @@ -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("(.*)", 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 = "

Error

"+msg+"

PCTB Server said:

"+html+"
"; + //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, @@ -381,7 +400,7 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis ArrayList> data = getData(t); - if (uploadToYarrg) { + if (uploadToYarrg && yarrgts != null) { pm.setNote("Preparing data for Yarrg"); pm.setProgress(10); @@ -445,12 +464,13 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis GZIPOutputStream out = new GZIPOutputStream(outStream); //FileOutputStream out = new FileOutputStream(new File("output.text")); DataOutputStream dos = new DataOutputStream(out); - dos.writeBytes("005\n"); + dos.writeBytes("005y\n"); dos.writeBytes(stallMap.size()+"\n"); dos.writeBytes(getAbbrevStallList(stallMap)); writeBuySellOffers(buys,sells,offerCount,out); out.finish(); InputStream in = sendInitialData(new ByteArrayInputStream(outStream.toByteArray())); + if (in == null) return; pm.setProgress(80); if(pm.isCanceled()) { return; @@ -597,7 +617,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.+?.+?"); 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); @@ -900,30 +934,33 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis filename = m.group(3); URL get = new URL(PCTB_HOST_URL + "upload.php?topisland=" + topIsland + "&ocean=" + ocean + "&island=" + islandNum + "&action=" + action + "&forcereload=" + forceReload + "&filename=" + filename); - // System.out.println(get); - BufferedReader br2 = new BufferedReader(new InputStreamReader(get.openStream())); - sb = new StringBuilder(); - while((str = br2.readLine()) != null) { - sb.append(str+"\n"); - } + String complete = readstreamstring(get.openStream()); Pattern done = Pattern.compile("Your data has been integrated into the database. Thank you!"); - m = done.matcher(sb.toString()); + m = done.matcher(complete); 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!", complete); } } + private InputStream post_for_yarrg(ClientHttpRequest http) throws IOException { + if (!http.post()) { + String err = readstreamstring(http.resultstream()); + error("

Error reported by YARRG server

\n" + err); + return null; + } + return http.resultstream(); + } + private String getYarrgTimestamp() throws IOException { ClientHttpRequest http = new ClientHttpRequest (YARRG_URL); http.setParameter("clientname", YARRG_CLIENTNAME); http.setParameter("clientversion", YARRG_CLIENTVERSION); http.setParameter("clientfixes", YARRG_CLIENTFIXES); http.setParameter("requesttimestamp", "y"); - InputStream in = http.post(); + InputStream in = post_for_yarrg(http); + if (in == null) return null; BufferedReader br = new BufferedReader(new InputStreamReader(in)); String tsresult = br.readLine(); return tsresult.substring(3, tsresult.length()-1); @@ -944,7 +981,8 @@ public class MarketUploader implements TopLevelWindowListener, GUIInitializedLis http.setParameter("ocean", ocean); http.setParameter("island", island); http.setParameter("data", "deduped.tsv.gz", file, "application/octet-stream"); - InputStream in = http.post(); + InputStream in = post_for_yarrg(http); + if (in == null) return; BufferedReader br = new BufferedReader(new InputStreamReader(in)); String yarrgresult; while((yarrgresult = br.readLine()) != null) {