package NFP.Algorithms; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringWriter; import java.io.Writer; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import seg.jUCMNav.nfp.generated.*; public class ConvertCurrency { private double srcValue; private Currency srcUnit; private Currency convertedUnit; private double convertedValue = 0; private double currencyRate = 0; public double getConvertedValue(double d, Currency srcUnit, Currency convertedUnit) throws HttpException, IOException { this.srcValue = d; this.srcUnit = srcUnit; this.convertedUnit = convertedUnit; if(this.srcUnit==this.convertedUnit) return this.srcValue; String from = this.srcUnit.name(); String to = this.convertedUnit.name(); String request = "http://www.webservicex.net/currencyconvertor.asmx/ConversionRate?FromCurrency=" + from + "&ToCurrency=" + to; System.out.println("Request = " + request); HttpClient client = new HttpClient(); GetMethod method = new GetMethod(request); int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println("Method failed: " + method.getStatusLine()); } InputStream rstream = null; rstream = method.getResponseBodyAsStream(); String s = convertStreamToString(rstream); System.out.println(s); CreateXML(s); return getValue(); } private Boolean CreateXML(String responseXML) { try { File file = new File("ConvertionRate.xml"); boolean success = file.createNewFile(); if (success) { NewFile(file, responseXML); } else { Boolean suc = file.delete(); if (suc) { NewFile(file, responseXML); } } } catch (IOException e) { } return true; } private void NewFile(File file, String responseXML) { try { FileWriter fr = new FileWriter(file, true); BufferedWriter out = new BufferedWriter(fr); out.write(responseXML); out.close(); } catch (IOException e) { } } private String convertStreamToString(InputStream is) throws IOException { if (is != null) { Writer writer = new StringWriter(); char[] buffer = new char[1024]; try { Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { // is.close(); } return writer.toString(); } else { return ""; } } private double getValue() { try { File fXmlFile = new File("ConvertionRate.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder dBuilder; dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); NodeList nlist = doc.getElementsByTagName("double"); for (int temp = 0; temp < nlist.getLength(); temp++) { Node nNode = nlist.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; String s = eElement.getTextContent(); try { currencyRate = Float.valueOf(s.trim()).floatValue(); System.out.println("currencyRate = " + currencyRate); } catch (NumberFormatException nfe) { System.out.println("NumberFormatException: " + nfe.getMessage()); } if (currencyRate != 0) convertedValue = currencyRate * srcValue; } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("Converted Value : " + convertedValue); return convertedValue; } }