package sourcecode.MockUp; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.URLDecoder; import java.util.ArrayList; import org.apache.commons.io.IOUtils; import org.apache.http.Consts; import org.bson.Document; import org.json.JSONArray; import org.json.JSONObject; import com.google.gson.Gson; import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; import com.mongodb.MongoClientOptions; import com.mongodb.MongoClientURI; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; public class MockUp { private static Gson gson = new Gson(); private static MongoDatabase database; private final static String GET = "GET"; private final static String POST = "POST"; private final static String PUT = "PUT"; private final static String DELETE = "DELETE"; private static String DBNAME = "spw"; private static String DBHOST = "10.1.2.155:27017"; public static void main(String[] args) throws Exception { int port = 6300; try { if(args.length>0) port = Integer.parseInt(args[0]); if(args.length>1) DBNAME = args[1]; if(args.length>2) DBHOST = args[2]; //connect mongo MongoConnector(DBNAME); HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); server.createContext("/", new MyHandler()); server.setExecutor(null); // creates a default executor server.start(); System.out.println("Run in port : "+port); } catch(Exception e) { e.printStackTrace(); System.out.println("Fail to run in port : "+port); } } static class MyHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException{ String response = ""; try { String method = t.getRequestMethod(); String url = t.getRequestURI().toString(); url = URLDecoder.decode(url, "UTF-8"); // System.out.println(t.getRequestMethod()); // if(!method.equals(GET)) // { // String bodyData = IOUtils.toString(t.getRequestBody(),Consts.UTF_8); // JSONObject body = new JSONObject(bodyData); // String[] a = bodyData.split(","); // // System.out.println(a[0]); // String[] b = a[0].split(":"); // // System.out.println(b[0]); // String c = b[0].replace("{", "").trim().replace("\"", ""); // // System.out.println(c); // keyBody = (String) body.get(c); // } // System.out.println(body.get(c)); // for(Entry> row:t.getRequestHeaders().entrySet()) // { // System.out.println(row.getKey()); // System.out.println(row.getValue()); // } // System.out.println(t.getRequestHeaders()); // System.out.println(t.getRequestURI()); String keyData = findKey(method,url,IOUtils.toString(t.getRequestBody(),Consts.UTF_8)); String collectionName = getSuffixTableName(url); JSONObject responsJSON = new JSONObject(); //find retry ArrayList retryList = findRetry(method,keyData); boolean notRetry = true; if(retryList.size() > 0) { JSONObject rowJSON = new JSONObject(retryList.get(0)); System.out.println("Count retry : "+rowJSON.get("count")); if(rowJSON.has("value")) responsJSON = (JSONObject) rowJSON.get("value"); else { System.out.println("not found vale or resultCode"); responsJSON.put("resultCode", "50000"); responsJSON.put("resultDescription", "Retry"); } BasicDBObject find = new BasicDBObject(); find.put("key", rowJSON.get("key")); // System.out.println(rowJSON.get("count")); int newCount = (int) rowJSON.get("count"); rowJSON.remove("count"); if(newCount > 0) { rowJSON.put("count", newCount-1); Document doc = Document.parse(rowJSON.toString()); setDB(find,doc,method.toLowerCase()+"_retry"); notRetry = false; } } if(notRetry) { ArrayList responseList = getDBData(keyData,collectionName,method); if(responseList.size() == 0) { System.out.println("not any Data"); responsJSON.put("resultCode", "80000"); responsJSON.put("resultDescription", "MockUp error : No data in "+method.toLowerCase()+"_"+collectionName+"!!!"); }else { if(method.equals(GET) && responseList.size() > 1) { ArrayList resultData = new ArrayList(); for(int i=0;i 0) && (value.get("resultData").toString().substring(0,1).equals("["))) // { //// Object test = gson.fromJson(value.get("resultData").toString(), Object.class); //// System.out.println(test); // //// value.get("resultData").toString() // JSONObject resultlist = new JSONObject("{'test' : "+value.get("resultData").toString()+"}"); //// System.out.println(resultlist.get("test")); // JSONArray JSONArrayData = value.getJSONArray("resultData"); // System.out.println("aaaaaaaaaaaaaaaaaaaa"+JSONArrayData.get(0)); //// for(int n=0;n collectionNames = database.listCollectionNames().iterator(); System.out.println("MongoDB Connect to "+uri.toString()+" Success"); System.out.println("MongoDB Collections in datebase"); while (collectionNames.hasNext()) { String collectionName = collectionNames.next(); System.out.println(" |_ "+collectionName); } } private static ArrayList getDBData(String keyData,String collectionName,String method) { ArrayList returnData = new ArrayList(); collectionName = method.toLowerCase()+"_"+collectionName; System.out.println("===> Find Normal"); BasicDBObject basicDBObject = new BasicDBObject(); basicDBObject.put("key", keyData); returnData = getDB(basicDBObject,collectionName); if(returnData.size() == 0) { System.out.println("===> Go to Main flow"); BasicDBObject basicDBObject2 = new BasicDBObject(); basicDBObject2.put("key", ""); returnData = getDB(basicDBObject2,collectionName); } return returnData; } private static String findKey(String method,String url,String bodyData) { String returnData = ""; switch (method) { case GET: case DELETE: returnData = url; break; case POST: case PUT: JSONObject body = new JSONObject(bodyData); String[] a = bodyData.split(","); String[] b = a[0].split(":"); String c = b[0].replace("{", "").trim().replace("\"", ""); returnData = (String) body.get(c); break; default: break; } return returnData; } private static ArrayList findRetry(String method,String keyData) { ArrayList returnData = new ArrayList(); System.out.println("===>Find retry"); BasicDBObject basicDBObject = new BasicDBObject(); basicDBObject.put("key", keyData); String collectionName = method.toLowerCase()+"_retry"; returnData = getDB(basicDBObject,collectionName); if(returnData.size() == 0) { BasicDBObject basicDBObject2 = new BasicDBObject(); basicDBObject2.put("key", ""); returnData = getDB(basicDBObject2,collectionName); } return returnData; } private static ArrayList getDB(BasicDBObject basicDBObject,String collectionName) { ArrayList returnData = new ArrayList(); System.out.println("CollectionName : " + collectionName); System.out.println("Find : "+basicDBObject.toJson()); MongoCollection collection = database.getCollection(collectionName); FindIterable findData = collection.find(basicDBObject); MongoCursor cursor = findData.iterator(); while(cursor.hasNext()){ Document rawRow = cursor.next(); System.out.println("found retry _id : "+rawRow.get("_id")); // System.out.println("count : "+rawRow.get("count")); returnData.add(rawRow.toJson()); } return returnData; } private static void setDB(BasicDBObject find,Document doc,String collectionName) { // System.out.println("Start Update Mongo"); MongoCollection collection = database.getCollection(collectionName); Document updateDoc = collection.findOneAndReplace(find, doc); System.out.println("Update Mongo"); } }