/*
* Copyright (c) 2015-2016, Pradeeban Kathiravelu and others. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.emory.bmi.datacafe.rest;
import edu.emory.bmi.datacafe.client.core.ClientExecutorEngine;
import edu.emory.bmi.datacafe.client.core.HzClient;
import edu.emory.bmi.datacafe.client.query_builder.QueryBuilderClient;
import edu.emory.bmi.datacafe.client.drill.DrillConnector;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Arrays;
import java.util.Collection;
import static spark.Spark.*;
/**
* Offers a public API to the data lake creation and access.
*/
public class DataLakeManager {
private static Logger logger = LogManager.getLogger(DataLakeManager.class.getName());
public static void initialize() {
ClientExecutorEngine.init();
/**
Retrieve the list of datalakes.
/GET
http://localhost:9090/datalakes/
Response:
[-7466653342708752832, -7059417815353339196, -6908825180316283930, -6365519002970140943]
or
No datalakes found
*/
get("/datalakes/", (request, response) -> {
logger.info("The data lakes are retrieved");
Collection<String> datalakes = HzClient.getDataLakeNames();
String out = Arrays.toString(datalakes.toArray());
if (datalakes != null) {
return out;
} else {
response.status(404); // 404 Not found
return "No datalakes found";
}
});
/**
* Retrieving a specific data lake:
/POST
http://localhost:9090/datalakes?datalakeID=PhysioNetExecutor&attributes=SUBJECT_ID,DOB,HADM_ID,ICD9_CODE,SHORT_TITLE,DESCRIPTION&query=SUBJECT_ID<100 OR SUBJECT_ID=120
Response:
or
<html>
<body>
<h2>404 Not found</h2>
</body>
</html>
*/
post("/datalake", (request, response) -> {
String datalakeID = request.queryParams("datalakeID");
String[] attributes = (request.queryParams("attributes") != null) ? request.queryParams("attributes").split(",") : new String[0];
QueryBuilderClient queryBuilderClient = new QueryBuilderClient(datalakeID, attributes);
String derivedQueryFromHazelcast;
if (request.queryParams("query")!=null) {
derivedQueryFromHazelcast = queryBuilderClient.reformatAndBuildQueryStatement(request.queryParams("query"));
} else {
derivedQueryFromHazelcast = queryBuilderClient.buildQueryStatement();
}
DrillConnector.executeQueryAndReturn(derivedQueryFromHazelcast, attributes.length);
logger.info(String.format("The data lake with the ID [%s] has been retrieved", datalakeID));
return datalakeID;
});
}
}