001 package com.khubla.pragmatach.contrib.clientproxygenerator;
002
003 import java.io.File;
004 import java.io.FileOutputStream;
005 import java.io.OutputStreamWriter;
006 import java.util.List;
007
008 /**
009 * @author tome
010 */
011 public class ClientGenerator {
012 /**
013 * target dir
014 */
015 private final String targetDir;
016
017 /**
018 * ctor
019 */
020 public ClientGenerator(String targetDir) {
021 this.targetDir = targetDir;
022 }
023
024 /**
025 * generate a file
026 */
027 public void generate(RouteUrl routeUrl, String namespace) throws Exception {
028 try {
029 /*
030 * name
031 */
032 String name = routeUrl.getParts().get(routeUrl.getParts().size() - 1);
033 /*
034 * stream
035 */
036 String path = System.getProperty("user.dir") + "/" + targetDir;
037 new File(path).mkdirs();
038 FileOutputStream fos = new FileOutputStream(path + "/" + name + ".java", false);
039 /*
040 * writer
041 */
042 OutputStreamWriter osw = new OutputStreamWriter(fos);
043 /*
044 * package
045 */
046 osw.write("package " + namespace + ";\n");
047 /*
048 * HTTP Components
049 */
050 osw.write("import org.apache.http.client.methods.HttpGet;\n");
051 osw.write("import org.apache.http.impl.client.DefaultHttpClient;\n");
052 /*
053 * class
054 */
055 osw.write("public class " + name + " {\n");
056 /*
057 * method
058 */
059 osw.write("public void invoke() {\n");
060 osw.write("DefaultHttpClient client = new DefaultHttpClient();\n");
061 String url = generateUrl(routeUrl);
062 osw.write("}\n");
063 /*
064 * end of class
065 */
066 osw.write("}\n");
067 /*
068 * done
069 */
070 osw.close();
071 fos.flush();
072 fos.close();
073 } catch (final Exception e) {
074 throw new Exception("Exception in generate: '" + routeUrl.getContext() + "'", e);
075 }
076 }
077
078 public String getTargetDir() {
079 return targetDir;
080 }
081
082 private String generateUrl(RouteUrl routeUrl) {
083 String ret = "";
084 final List<String> parts = routeUrl.getParts();
085 for (final String part : parts) {
086 ret += "/" + part;
087 }
088 return ret;
089 }
090 }