package sourcecode.MockUp; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map.Entry; import org.apache.commons.io.IOUtils; import org.apache.http.Consts; import org.bson.Document; 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"; public static void main(String[] args) throws Exception { int port = 8000; try{ if(args.length>0) port = Integer.parseInt(args[0]); //connect mongo MongoConnector("spw"); 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 method = t.getRequestMethod(); String url = t.getRequestURI().toString(); String response = ""; String keyBody =""; // 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 collectionName = "spwCustomerAccounts"; BasicDBObject basicDBObject = new BasicDBObject(); switch (method) { case GET: basicDBObject.put("url", url); break; case POST: case PUT: basicDBObject.put("key", keyBody); break; case DELETE: basicDBObject.put("key", url); break; default: break; } ArrayList responseList = getDBData(basicDBObject,collectionName,method); if(responseList.size() == 0) { System.out.println("===> Go to Main flow"); BasicDBObject basicDBObjectMain = new BasicDBObject(); if(method.equals(GET)) basicDBObjectMain.put("url", ""); else basicDBObjectMain.put("key", ""); responseList = getDBData(basicDBObjectMain,collectionName,method); } JSONObject responsJSON = new JSONObject(); ArrayList resultData = new ArrayList(); for(int i=0;i 1) { if(rowJSON.get("resultData")!=null) resultData.add((JSONObject) rowJSON.get("resultData")); else if(rowJSON.get("value")!=null) resultData.add((JSONObject) rowJSON.get("value")); }else resultData.add(rowJSON); // System.out.println(rowJSON); // resultData.add((JSONObject) rowJSON.get("resultData")); } responsJSON.put("resultCode", "20000"); responsJSON.put("resultDescription", "Success"); if(method.equals(GET)) { responsJSON.put("resultData",resultData); responsJSON.put("rowCount", resultData.size()); } // System.out.println(responsJSON.toString()); response = responsJSON.toString(); t.getResponseHeaders().set("Content-Type", "application/json"); t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); System.out.println(""); System.out.println("URL : " + url); System.out.println("Method : " + method); System.out.println("Response : " + response); System.out.println(""); } } private static void MongoConnector(String db) { String username = ""; String password = ""; String address = "10.1.2.155:27017"; String dbname = db; String authSource = db; int timeoutMongoDB = 10000; MongoClientOptions.Builder optionsBuilder = MongoClientOptions.builder(); optionsBuilder.connectTimeout(timeoutMongoDB); optionsBuilder.socketTimeout(timeoutMongoDB); optionsBuilder.serverSelectionTimeout(timeoutMongoDB); // optionsBuilder.connectionsPerHost(maxPoolSize); // optionsBuilder.minConnectionsPerHost(minPoolSize); MongoClientURI uri = new MongoClientURI("mongodb://"+username+":"+password+"@"+address+"/?authSource="+authSource, optionsBuilder); if(username.equals("")) uri = new MongoClientURI("mongodb://"+address+"/?authSource="+authSource, optionsBuilder); System.out.println("MongoDB Connecting to "+uri.toString()+"..."); MongoClient mongoClient = new MongoClient(uri); database = mongoClient.getDatabase(dbname); //test connect and list collections MongoCursor 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(BasicDBObject basicDBObject,String collectionName,String method) { collectionName = method.toLowerCase()+"_"+collectionName; System.out.println("CollectionName : " + collectionName); System.out.println("Find : "+basicDBObject.toJson()); ArrayList returnData = new ArrayList(); String found = ""; MongoCollection collection = database.getCollection(collectionName); FindIterable findData = collection.find(basicDBObject); MongoCursor cursor = findData.iterator(); switch (method) { case GET: while(cursor.hasNext()){ Document rawRow = cursor.next(); System.out.println("found _id : "+rawRow.get("_id")); rawRow.remove("_id"); rawRow.remove("url"); if(rawRow.get("value") != null) { rawRow.append("resultData", rawRow.get("value")); rawRow.append("rowCount", "1"); rawRow.remove("value"); } found = rawRow.toJson(); returnData.add(found); } break; case POST: case PUT: case DELETE: while(cursor.hasNext()){ Document rawRow = cursor.next(); System.out.println("found _id : "+rawRow.get("_id")); rawRow.remove("_id"); rawRow.remove("key"); if(rawRow.get("value") != null) { JSONObject rowJSON = new JSONObject(rawRow.toJson()); // System.out.println(rowJSON.get("value")); found = rowJSON.get("value").toString(); returnData.add(found); System.out.println("found : "+found); }else { found = rawRow.toJson(); returnData.add(found); } } break; default: break; } return returnData; } }