1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/**
2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Copyright (c) 2006 IBM Corporation and others.
3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * All rights reserved. This program and the accompanying materials
4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * are made available under the terms of the Eclipse Public License v1.0
5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * which accompanies this distribution, and is available at
6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * http://www.eclipse.org/legal/epl-v10.html
7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpackage org.eclipse.releng.services.bugzilla;
10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.BufferedReader;
13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.InputStreamReader;
14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.PrintWriter;
15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.net.URL;
16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.net.URLConnection;
17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.net.URLEncoder;
18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Enumeration;
19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Hashtable;
20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Iterator;
21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.LinkedHashMap;
22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.regex.Matcher;
23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.regex.Pattern;
24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport javax.net.ssl.HttpsURLConnection;
26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.BuildException;
28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.Task;
29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.releng.util.bugzilla.Messages;
31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class UpdateBugStateTask extends Task
34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{
35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String GET = "GET"; //$NON-NLS-1$
38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String CTYPE_RDF = "&ctype=rdf"; //$NON-NLS-1$
40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String URL_TARGET_MILESTONE = "&target_milestone="; //$NON-NLS-1$
42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String URL_CHFIELDTO = "&chfieldto="; //$NON-NLS-1$
44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String URL_BUG_STATUS = "&bug_status="; //$NON-NLS-1$
46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTTPS_BUGS_ECLIPSE_ORG_BUGS_BUGLIST_CGI_PRODUCT = "https://bugs.eclipse.org/bugs/buglist.cgi?product="; //$NON-NLS-1$
48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String COOKIE = "Cookie"; //$NON-NLS-1$
50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String APPLICATION_X_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded"; //$NON-NLS-1$
52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String CONTENT_TYPE = "Content-type"; //$NON-NLS-1$
54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String POST = "POST"; //$NON-NLS-1$
56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTTPS_BUGS_ECLIPSE_ORG_BUGS_PROCESS_BUG_CGI = "https://bugs.eclipse.org/bugs/process_bug.cgi"; //$NON-NLS-1$
58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BUG_STATUS = "bug_status"; //$NON-NLS-1$
60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String AMP = "&"; //$NON-NLS-1$
62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String EQ = "="; //$NON-NLS-1$
64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTTPS_BUGS_ECLIPSE_ORG_BUGS_SHOW_BUG_CGI_ID = "https://bugs.eclipse.org/bugs/show_bug.cgi?id="; //$NON-NLS-1$
66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String CTYPE_XML = "&ctype=xml"; //$NON-NLS-1$
68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String RESOLVE = "resolve"; //$NON-NLS-1$
70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String RESOLUTION = "resolution"; //$NON-NLS-1$
72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String KNOB = "knob"; //$NON-NLS-1$
74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String LONGDESCLENGTH = "longdesclength"; //$NON-NLS-1$
76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String SHORT_DESC = "short_desc"; //$NON-NLS-1$
78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BUG_FILE_LOC = "bug_file_loc"; //$NON-NLS-1$
80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BUG_SEVERITY = "bug_severity"; //$NON-NLS-1$
82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String PRIORITY = "priority"; //$NON-NLS-1$
84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String OP_SYS = "op_sys"; //$NON-NLS-1$
86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String REP_PLATFORM = "rep_platform"; //$NON-NLS-1$
88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String TARGET_MILESTONE = "target_milestone"; //$NON-NLS-1$
90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String COMPONENT = "component"; //$NON-NLS-1$
92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String VERSION = "version"; //$NON-NLS-1$
94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String PRODUCT = "product"; //$NON-NLS-1$
96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String ID = "id"; //$NON-NLS-1$
98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String COMMENT = "comment"; //$NON-NLS-1$
100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String PROCESS_BUG = "process_bug"; //$NON-NLS-1$
102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String FORM_NAME = "form_name"; //$NON-NLS-1$
104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BUGZILLA_LOGINCOOKIE = "; Bugzilla_logincookie="; //$NON-NLS-1$
106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BUGZILLA_LOGIN = "Bugzilla_login="; //$NON-NLS-1$
108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String DIGITS_REGEX = "(\\d+)"; //$NON-NLS-1$
110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String COLON = ":"; //$NON-NLS-1$
112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String DASH = "-"; //$NON-NLS-1$
114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BUGID_REGEX = "<bz:id(?: nc:parseType=\"Integer\")>(\\d+)</bz:id>"; //$NON-NLS-1$
116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BUILDID_REGEX = "([IMNRS]?-?)(\\d{4})(\\d{2})(\\d{2})-?(\\d{2})(\\d{2})"; //$NON-NLS-1$
118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String TIMESTAMP_REGEX = "(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})"; //$NON-NLS-1$
120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String JS = "Java said:"; //$NON-NLS-1$
122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String SP = " "; //$NON-NLS-1$
124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String XML_REGEX = "<(\\S+)>([^<]+)</\\1>"; //$NON-NLS-1$
126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String NL = "\n"; //$NON-NLS-1$
128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String CSO = ", or "; //$NON-NLS-1$
130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String CS = ", "; //$NON-NLS-1$
132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_IV = "INVALID"; //$NON-NLS-1$
134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_WF = "WONTFIX"; //$NON-NLS-1$
136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_LT = "LATER"; //$NON-NLS-1$
138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_RM = "REMIND"; //$NON-NLS-1$
140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_WK = "WORKSFORME"; //$NON-NLS-1$
142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_FX = "FIXED"; //$NON-NLS-1$
144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_RE = "REOPENED"; //$NON-NLS-1$
146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_AS = "ASSIGNED"; //$NON-NLS-1$
148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_NEW = "NEW"; //$NON-NLS-1$
150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String BZ_UC = "UNCONFIRMED"; //$NON-NLS-1$
152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String EMPTY = ""; //$NON-NLS-1$
154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String LT = "<"; //$NON-NLS-1$
156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String GT = ">"; //$NON-NLS-1$
158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String QUOT = "\""; //$NON-NLS-1$
160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String APOS = "'"; //$NON-NLS-1$
162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTML_APOS = "&apos;"; //$NON-NLS-1$
164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTML_QUOT = "&quot;"; //$NON-NLS-1$
166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTML_LT = "&lt;"; //$NON-NLS-1$
168402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
169402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTML_GT = "&gt;"; //$NON-NLS-1$
170402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
171402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTML_NBSP = "&nbsp;"; //$NON-NLS-1$
172402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
173402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String HTML_AMP = "&amp;"; //$NON-NLS-1$
174402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
175402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private int debug;
176402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
177402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private int login;
178402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
179402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private int loginCookie;
180402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
181402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String product;
182402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
183402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String status;
184402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
185402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String buildID;
186402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
187402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String buildAlias;
188402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
189402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String milestone;
190402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
191402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String bugList;
192402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
193402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String resolution;
194402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
195402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String endDate;
196402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
197402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private LinkedHashMap trans;
198402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
199402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public UpdateBugStateTask()
200402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
201402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    debug = 1;
202402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
203402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    login = 0;
204402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    loginCookie = 0;
205402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    product = EMPTY;
206402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    status = EMPTY;
207402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    buildID = EMPTY;
208402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    buildAlias = EMPTY;
209402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    endDate = EMPTY;
210402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    milestone = EMPTY;
211402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    bugList = EMPTY;
212402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    resolution = BZ_FX;
213402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
214402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    trans = new LinkedHashMap(8, 0.75f, false);
215402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    trans.put(HTML_APOS, APOS);
216402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    trans.put(HTML_QUOT, QUOT);
217402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    trans.put(HTML_LT, LT);
218402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    trans.put(HTML_GT, GT);
219402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    trans.put(HTML_NBSP, SP);
220402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    trans.put(HTML_AMP, AMP);
221402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
222402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
223402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setDebug(int d)
224402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
225402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    debug = d;
226402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
227402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
228402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setBugList(String b)
229402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
230402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    bugList = b;
231402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
232402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
233402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setProduct(String p)
234402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
235402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    product = p;
236402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
237402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
238402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setStatus(String s)
239402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
240402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (s.equals(BZ_UC) || s.equals(BZ_NEW) || s.equals(BZ_AS) || s.equals(BZ_RE))
241402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
242402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      status = s;
243402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
244402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else
245402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
246402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.invalidStatus") + "!" + SP + //$NON-NLS-1$ //$NON-NLS-2$
247402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        Messages.getString("UpdateBugStateTask.expectedOne") + SP + BZ_UC + CS + BZ_NEW + CS + BZ_AS + CSO + BZ_RE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
248402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
249402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
250402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
251402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setLogin(int l)
252402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
253402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    login = l;
254402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
255402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
256402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setLoginCookie(int lc)
257402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
258402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    loginCookie = lc;
259402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
260402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
261402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setResolution(String r)
262402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
263402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (r.equals(BZ_FX) || r.equals(BZ_IV) || r.equals(BZ_WF) || r.equals(BZ_LT) || r.equals(BZ_RM) || r.equals(BZ_WK))
264402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
265402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      resolution = r;
266402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
267402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else
268402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
269402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(Messages.getString("UpdateBugStateTask.invalidResolution") + "!" + SP + //$NON-NLS-1$ //$NON-NLS-2$
270402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        Messages.getString("UpdateBugStateTask.expected") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
271402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        + SP + BZ_FX + CS + BZ_IV + CS + BZ_WF + CS + BZ_LT + CS + BZ_RM + CSO + BZ_WK + SP
272402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        + "(" + Messages.getString("UpdateBugStateTask.default") + COLON + SP + BZ_FX + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
273402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
274402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
275402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
276402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setEndDate(String t)
277402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
278402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Pattern p = Pattern.compile(TIMESTAMP_REGEX);
279402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Matcher m = p.matcher(t);
280402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (m.matches())
281402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
282402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      endDate = m.group(1) + DASH + m.group(2) + DASH + m.group(3) + SP + m.group(4) + COLON + m.group(5);
283402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
284402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else
285402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
286402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.invalidTimestamp") + COLON + SP + t + "!"); //$NON-NLS-1$ //$NON-NLS-2$
287402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
288402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
289402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
290402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setBuildID(String t)
291402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
292402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Pattern p = Pattern.compile(BUILDID_REGEX);
293402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Matcher m = p.matcher(t);
294402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (m.matches())
295402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
296402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      buildID = m.group(1) + m.group(2) + m.group(3) + m.group(4) + m.group(5) + m.group(6);
297402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
298402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else
299402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
300402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.invalidBuildID") + COLON + SP + t + "!"); //$NON-NLS-1$ //$NON-NLS-2$
301402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
302402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
303402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
304402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setBuildAlias(String b)
305402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
306402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    buildAlias = b;
307402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
308402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
309402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setMilestone(String m)
310402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
311402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    milestone = m;
312402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
313402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
314402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void execute() throws BuildException
315402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
316402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (login == 0)
317402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
318402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.expectingLogin") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
319402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
320402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (loginCookie == 0)
321402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
322402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.expectingLogincookie") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
323402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
324402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (status.equals(EMPTY))
325402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
326402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.expectingStatus") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
327402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
328402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
329402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    /* we take an explicit list OR do a query, not both */
330402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (!bugList.equals(EMPTY) && endDate.equals(EMPTY) && milestone.equals(EMPTY) && product.equals(EMPTY))
331402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
332402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 1)
333402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
334402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.usingBugList")); //$NON-NLS-1$
335402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
336402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      Pattern p = Pattern.compile(DIGITS_REGEX);
337402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      Matcher m = p.matcher(bugList);
338402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      while (m.find())
339402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
340402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        int bugID = Integer.parseInt(m.group(1));
341402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        if (debug > 1)
342402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        {
343402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          System.err.println(Messages.getString("UpdateBugStateTask.found") + SP + bugID); //$NON-NLS-1$
344402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
345402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        doBug(bugID);
346402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
347402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
348402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else if (bugList.equals(EMPTY))
349402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
350402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (product.equals(EMPTY))
351402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
352402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        throw new BuildException(Messages.getString("UpdateBugStateTask.expectingProduct") + "!"); //$NON-NLS-1$ //$NON-NLS-2$
353402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
354402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
355402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 1)
356402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
357402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.queryingFor") + SP + //$NON-NLS-1$
358402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          (!status.equals(EMPTY) ? status + SP : EMPTY) +
359402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          (!product.equals(EMPTY) ? product + SP : EMPTY) +
360402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          (!milestone.equals(EMPTY) ? milestone + SP : EMPTY) +
361402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          Messages.getString("UpdateBugStateTask.bugs")); //$NON-NLS-1$ //$NON-NLS-2$
362402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
363402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
364402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      /* the Bugzilla search form generates a massive URL, but thankfully doesn't
365402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll       * demand all sorts of superfluous fields like when updating a bug */
366402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      String url = HTTPS_BUGS_ECLIPSE_ORG_BUGS_BUGLIST_CGI_PRODUCT + urlEncode(product) + URL_BUG_STATUS + urlEncode(status)
367402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        + URL_CHFIELDTO + urlEncode(endDate) + URL_TARGET_MILESTONE + urlEncode(milestone) + CTYPE_RDF;
368402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 1)
369402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
370402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.connectingTo") + SP + //$NON-NLS-1$
371402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          url + SP + "..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
372402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
373402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      HttpsURLConnection bugsconn = getConn(url, GET, true, false, EMPTY);
374402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      String bugs = slurpStream(bugsconn);
375402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 1)
376402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
377402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.gotBugList") + COLON); //$NON-NLS-1$
378402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(bugs);
379402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
380402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
381402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      Pattern p = Pattern.compile(BUGID_REGEX);
382402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      Matcher m = p.matcher(bugs);
383402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (m.find()) {
384402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        while (m.find())
385402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        {
386402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          int bugID = Integer.parseInt(m.group(1));
387402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          if (debug > 1)
388402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          {
389402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll            System.out.println(Messages.getString("UpdateBugStateTask.found") + SP + bugID); //$NON-NLS-1$
390402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          }
391402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          doBug(bugID);
392402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
393402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
394402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      else
395402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
396402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.out.println("No bugs found matching specified state" + SP + "(" + status + "). Nothing to do!");
397402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
398402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
399402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else
400402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
401402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.ambiguousRequest") + CS + //$NON-NLS-1$
402402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        Messages.getString("UpdateBugStateTask.mutuallyExclusive") + "!"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
403402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
404402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }  private void doBug(int bugID) throws BuildException
405402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
406402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (bugID == 0)
407402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
408402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.invalidBugID") + SP + bugID + "!"); //$NON-NLS-1$ //$NON-NLS-2$
409402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
410402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
411402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String bugcookie = BUGZILLA_LOGIN + login + BUGZILLA_LOGINCOOKIE + loginCookie;
412402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String buildstring = EMPTY;
413402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (buildAlias.equals(EMPTY) && buildID.equals(EMPTY))
414402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
415402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      buildstring = Messages.getString("UpdateBugStateTask.latestBuild"); //$NON-NLS-1$
416402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
417402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else if (!buildAlias.equals(EMPTY) && !buildID.equals(EMPTY))
418402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
419402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      buildstring = buildAlias + SP + "(" + buildID + ")"; //$NON-NLS-1$ //$NON-NLS-2$
420402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
421402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else
422402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
423402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      buildstring = (!buildAlias.equals(EMPTY) ? buildAlias : buildID);
424402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
425402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
426402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Hashtable args = new Hashtable();
427402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(FORM_NAME, PROCESS_BUG);
428402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(COMMENT, Messages.getString("UpdateBugStateTask.fixedIn") + SP + buildstring + "."); //$NON-NLS-1$ //$NON-NLS-2$
429402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(ID, new Integer(bugID));
430402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(PRODUCT, EMPTY);
431402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(VERSION, EMPTY);
432402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(COMPONENT, EMPTY);
433402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(TARGET_MILESTONE, EMPTY);
434402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(REP_PLATFORM, EMPTY);
435402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(OP_SYS, EMPTY);
436402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(PRIORITY, EMPTY);
437402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(BUG_SEVERITY, EMPTY);
438402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(BUG_FILE_LOC, EMPTY);
439402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(SHORT_DESC, EMPTY);
440402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(LONGDESCLENGTH, new Integer(1)); //Bugzilla doesn't seem to use this, but demands it anyways
441402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(KNOB, RESOLVE);
442402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    args.put(RESOLUTION, resolution);
443402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
444402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (debug > 1)
445402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
446402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(Messages.getString("UpdateBugStateTask.usingCookie") + COLON + SP + bugcookie); //$NON-NLS-1$
447402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(Messages.getString("UpdateBugStateTask.usingComment") + COLON + SP + args.get(COMMENT).toString()); //$NON-NLS-1$
448402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
449402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
450402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    /* slurp xml for bugID */
451402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String url = HTTPS_BUGS_ECLIPSE_ORG_BUGS_SHOW_BUG_CGI_ID + urlEncode(args.get(ID).toString()) + CTYPE_XML;
452402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (debug > 1)
453402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
454402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(Messages.getString("UpdateBugStateTask.connectingTo") + SP + //$NON-NLS-1$
455402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        url + SP + "..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
456402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
457402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    HttpsURLConnection xmlconn = getConn(url, GET, true, false, EMPTY);
458402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String xml = slurpStream(xmlconn);
459402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (debug > 1)
460402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
461402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(Messages.getString("UpdateBugStateTask.gotXML") + COLON); //$NON-NLS-1$
462402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(xml);
463402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
464402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    xmlconn.disconnect();
465402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
466402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    /* parse xml, build post string */
467402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String req = EMPTY;
468402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Hashtable pxml = parseXML(xml);
469402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    for (Enumeration e = args.keys(); e.hasMoreElements();)
470402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
471402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      String elem = e.nextElement().toString();
472402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      /* sometimes Bugzilla omits bug_file_loc if it's blank... */
473402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (args.get(elem).equals(EMPTY) && pxml.get(elem) != null)
474402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
475402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        args.put(elem, pxml.get(elem));
476402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
477402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
478402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      req += urlEncode(elem) + EQ + urlEncode(args.get(elem).toString()) + AMP;
479402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
480402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
481402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    req = req.substring(0, req.length() - 1);
482402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
483402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    /* update bug, if applicable */
484402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (pxml.get(BUG_STATUS) == null)
485402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
486402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 0)
487402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
488402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.out.println(Messages.getString("UpdateBugStateTask.noBugStatus") + SP + //$NON-NLS-1$
489402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          bugID + CS + Messages.getString("UpdateBugStateTask.missingBug")); //$NON-NLS-1$ //$NON-NLS-2$
490402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
491402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
492402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else if (pxml.get(BUG_STATUS).equals(status))
493402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
494402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      String bugurl = HTTPS_BUGS_ECLIPSE_ORG_BUGS_PROCESS_BUG_CGI;
495402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 1)
496402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
497402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.connectingTo") + SP + //$NON-NLS-1$
498402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          bugurl + SP + "..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
499402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
500402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      HttpsURLConnection bugconn = getConn(bugurl, POST, true, true, bugcookie);
501402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
502402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 1)
503402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
504402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.postingData") + COLON); //$NON-NLS-1$
505402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(req);
506402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
507402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      sendStream(bugconn, req);
508402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      String response = slurpStream(bugconn);
509402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
510402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      // trap for invalid login cookie
511402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (response.indexOf(Messages.getString("UpdateBugStateTask.legitimateLoginAndPassword")) > 0) //$NON-NLS-1$
512402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
513402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.couldNotLogIn")); //$NON-NLS-1$
514402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.BugzillaReplied") + COLON + SP + //$NON-NLS-1$
515402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          "\"" + Messages.getString("UpdateBugStateTask.legitimateLoginAndPassword") + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
516402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        if (debug > 1)
517402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        {
518402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          System.err.println(Messages.getString("UpdateBugStateTask.gotResponse") + COLON); //$NON-NLS-1$
519402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          System.err.println(response);
520402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
521402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        bugconn.disconnect();
522402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.setBugFailed") + SP + bugID + SP + //$NON-NLS-1$
523402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          Messages.getString("UpdateBugStateTask.to") + SP + resolution + SP + //$NON-NLS-1$
524402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          "(" + Messages.getString("UpdateBugStateTask.was") + SP + pxml.get(BUG_STATUS) + ")" + COLON + SP + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
525402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          "\"" + Messages.getString("UpdateBugStateTask.fixedIn") + SP + buildstring + ".\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
526402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
527402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      else
528402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
529402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        if (debug > 1)
530402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        {
531402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          System.err.println(Messages.getString("UpdateBugStateTask.gotResponse") + COLON); //$NON-NLS-1$
532402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          System.err.println(response);
533402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
534402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        bugconn.disconnect();
535402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        if (debug > 0)
536402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        {
537402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          System.out.println(Messages.getString("UpdateBugStateTask.setBug") + SP + bugID + SP + //$NON-NLS-1$
538402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll            Messages.getString("UpdateBugStateTask.to") + SP + resolution + SP + //$NON-NLS-1$
539402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll            "(" + Messages.getString("UpdateBugStateTask.was") + SP + pxml.get(BUG_STATUS) + ")" + COLON + SP + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
540402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll            "\"" + Messages.getString("UpdateBugStateTask.fixedIn") + SP + buildstring + ".\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
541402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
542402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
543402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
544402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    else
545402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
546402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 0)
547402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
548402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.out.println(Messages.getString("UpdateBugStateTask.ignoreBug") + SP + args.get(ID).toString() + SP + //$NON-NLS-1$
549402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          "(" + Messages.getString("UpdateBugStateTask.notInExpectedState") + SP + status + ")" + COLON + SP + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
550402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll          Messages.getString("UpdateBugStateTask.was") + SP + pxml.get(BUG_STATUS).toString() + "."); //$NON-NLS-1$ //$NON-NLS-2$
551402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
552402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
553402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
554402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
555402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String urlEncode(String elem)
556402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
557402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    elem = htmlDecode(elem);
558402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
559402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
560402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
561402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      elem = URLEncoder.encode(elem, UTF_8);
562402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
563402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (java.io.UnsupportedEncodingException e)
564402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
565402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.couldntEncode") + SP + //$NON-NLS-1$
566402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        "'" + elem + "'" + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
567402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
568402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
569402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return elem;
570402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
571402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
572402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private HttpsURLConnection getConn(String url, String method, boolean in, boolean out, String cookie)
573402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
574402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    URL u = null;
575402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
576402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
577402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      u = new URL(url);
578402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
579402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (java.net.MalformedURLException e)
580402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
581402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.badURL") + CS + //$NON-NLS-1$
582402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        url + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
583402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
584402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
585402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    URLConnection conn = null;
586402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
587402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
588402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      conn = u.openConnection();
589402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
590402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (java.io.IOException e)
591402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
592402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.failedConnection") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
593402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
594402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    HttpsURLConnection sconn = (HttpsURLConnection)conn;
595402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
596402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
597402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
598402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      sconn.setRequestMethod(method);
599402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
600402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (java.net.ProtocolException e)
601402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
602402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.badHTTPMethod") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
603402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
604402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
605402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (method.equals(POST))
606402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
607402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      sconn.setRequestProperty(CONTENT_TYPE, APPLICATION_X_WWW_FORM_URLENCODED);
608402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
609402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
610402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (!cookie.equals(EMPTY))
611402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
612402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      sconn.setRequestProperty(COOKIE, cookie);
613402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
614402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
615402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    sconn.setDoInput(in);
616402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    sconn.setDoOutput(out);
617402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
618402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
619402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
620402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      sconn.connect();
621402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
622402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (java.io.IOException e)
623402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
624402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.connectError") + SP + //$NON-NLS-1$
625402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        url + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
626402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
627402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
628402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return sconn;
629402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
630402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
631402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private void sendStream(HttpsURLConnection conn, String req)
632402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
633402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
634402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
635402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      PrintWriter out = new PrintWriter(conn.getOutputStream());
636402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      out.print(req);
637402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      out.flush();
638402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      out.close();
639402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
640402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (java.io.IOException e)
641402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
642402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.streamWriteError") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
643402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
644402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
645402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
646402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String slurpStream(HttpsURLConnection conn)
647402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
648402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String ret = EMPTY;
649402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
650402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
651402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
652402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      String tmp;
653402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      while ((tmp = in.readLine()) != EMPTY && tmp != null)
654402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
655402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        ret += tmp + NL;
656402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
657402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
658402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      in.close();
659402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
660402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (java.io.IOException e)
661402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
662402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      throw new BuildException(Messages.getString("UpdateBugStateTask.streamReadError") + "!" + SP + JS + SP + e.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$
663402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
664402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
665402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return ret;
666402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
667402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
668402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  /* this will only keep the last comment, but we don't use the comments anyways */
669402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private Hashtable parseXML(String xml)
670402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
671402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (debug > 1)
672402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
673402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(Messages.getString("UpdateBugStateTask.parsingXML") + "..."); //$NON-NLS-1$ //$NON-NLS-2$
674402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
675402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Hashtable pxml = new Hashtable();
676402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Pattern p = Pattern.compile(XML_REGEX);
677402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Matcher m = p.matcher(xml);
678402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    while (m.find())
679402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
680402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug > 1)
681402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
682402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("UpdateBugStateTask.found") + SP + m.group(1) + SP + EQ + SP + m.group(2)); //$NON-NLS-1$
683402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
684402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      pxml.put(m.group(1), m.group(2));
685402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
686402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
687402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return pxml;
688402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
689402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
690402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private String htmlDecode(String str)
691402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
692402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    for (Iterator i = trans.keySet().iterator(); i.hasNext();)
693402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
694402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      String elem = i.next().toString();
695402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
696402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      str = Pattern.compile(elem).matcher(str).replaceAll(trans.get(elem).toString());
697402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
698402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
699402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return str;
700402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
701402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
702402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public static void main(String args[])
703402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
704402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    new UpdateBugStateTask();
705402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
706402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
707