/*******************************************************************************
* Copyright 2012 University of Southern California
*
* 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.
*
* This code was developed by the Information Integration Group as part
* of the Karma project at the Information Sciences Institute of the
* University of Southern California. For more information, publications,
* and related projects, please see: http://www.isi.edu/integration
******************************************************************************/
package edu.isi.karma.webserver;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import edu.isi.karma.controller.update.UpdateContainer;
import edu.isi.karma.controller.update.WorksheetHierarchicalDataUpdate;
import edu.isi.karma.controller.update.WorksheetHierarchicalHeadersUpdate;
import edu.isi.karma.controller.update.WorksheetListUpdate;
import edu.isi.karma.modeling.ontology.OntologyManager;
import edu.isi.karma.rep.Workspace;
import edu.isi.karma.rep.WorkspaceManager;
import edu.isi.karma.rep.metadata.Tag;
import edu.isi.karma.rep.metadata.TagsContainer.Color;
import edu.isi.karma.rep.metadata.TagsContainer.TagName;
import edu.isi.karma.view.VWorksheet;
import edu.isi.karma.view.VWorkspace;
import edu.isi.karma.webserver.ServletContextParameterMap.ContextParameter;
public class GetExampleJSON extends HttpServlet {
private enum Arguments {
hasPreferenceId, workspacePreferencesId
}
private static final long serialVersionUID = 1L;
private static Logger logger = LoggerFactory.getLogger(GetExampleJSON.class);
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
logger.info("Creating new workspace ...");
Workspace workspace = WorkspaceManager.getInstance().createWorkspace();
logger.info("done");
/* Check if any workspace id is set in cookies. */
boolean hasWorkspaceCookieId = request.getParameter(Arguments.hasPreferenceId.name()).equals("true");
VWorkspace vwsp = null;
File crfModelFile = null;
/* If set, pick the right preferences and CRF Model file */
if(hasWorkspaceCookieId) {
String cachedWorkspaceId = request.getParameter(Arguments.workspacePreferencesId.name());
vwsp = new VWorkspace(workspace, cachedWorkspaceId);
crfModelFile = new File(ServletContextParameterMap.getParameterValue(ContextParameter.USER_DIRECTORY_PATH) +
"CRF_Models/"+cachedWorkspaceId+"_CRFModel.txt");
} else {
vwsp = new VWorkspace(workspace);
crfModelFile = new File(ServletContextParameterMap.getParameterValue(ContextParameter.USER_DIRECTORY_PATH) +
"CRF_Models/"+workspace.getId()+"_CRFModel.txt");
}
/* Read and populate CRF Model from a file */
if(!crfModelFile.exists())
crfModelFile.createNewFile();
boolean result = workspace.getCrfModelHandler().readModelFromFile(crfModelFile.getAbsolutePath());
if (!result)
logger.error("Error occured while reading CRF Model!");
WorkspaceRegistry.getInstance().register(new ExecutionController(vwsp));
/** Check if any ontology needs to be preloaded **/
String preloadedOntDir = ServletContextParameterMap.getParameterValue(ServletContextParameterMap.ContextParameter.PRELOADED_ONTOLOGY_DIRECTORY);
File ontDir = new File(preloadedOntDir);
if (ontDir.exists()) {
File[] ontologies = ontDir.listFiles();
OntologyManager mgr = workspace.getOntologyManager();
for (File ontology: ontologies) {
if (ontology.getName().endsWith(".owl") || ontology.getName().endsWith(".rdf")) {
logger.info("Loading ontology file: " + ontology.getAbsolutePath());
try {
mgr.doImport(ontology);
} catch (Exception t) {
logger.error ("Error loading ontology: " + ontology.getAbsolutePath(), t);
}
}
}
// update the cache at the end when all files are added to the model
mgr.updateCache();
} else {
logger.info("No directory for preloading ontologies exists.");
}
//mariam
//File file = new File("../demofiles/usc_faculty.csv");
// File file = new File("SampleData/CSV/PharmGKBPathways");
// CSVFileImport imp = new CSVFileImport(1, 2, ',', '"', file, workspace.getFactory(), workspace);
// try {
// imp.generateWorksheet();
// } catch (KarmaException e) {
// e.printStackTrace();
// }
// File file = new File("/Users/mohsen/Desktop/temp/karma issues/Shubham/artworks-list.xml");
// String fileContents = FileUtil.readFileContentsToString(file);
// JSONObject json;
// try {
// json = XML.toJSONObject(fileContents);
// JsonImport imp = new JsonImport(json, file.getName(), workspace);
// imp.generateWorksheet();
// } catch (JSONException e1) {
// e1.printStackTrace();
// }
// SampleDataFactory.createFromJsonTextFile(workspace,"./SampleData/JSON/Events.json");
// Initialize the Outlier tag
Tag outlierTag = new Tag(TagName.Outlier, Color.Red);
workspace.getTagsContainer().addTag(outlierTag);
// SampleDataFactory.createSample1small(workspace);
// SampleDataFactory.createSample1(workspace);
// SampleDataFactory.createSampleJsonWithNestedTable2(false/* true: 2
// rows */,
// vwsp.getWorkspace());
// //SampleDataFactory.createFlatWorksheet(workspace, 10000, 6);
// SampleDataFactory.createFlatWorksheet(workspace, 2, 2);
// //SampleDataFactory.createFromJsonTextFile(workspace,
// "samplejson-1.txt");
// SampleDataFactory.createJsonWithFunnyCharacters(workspace);
// SampleDataFactory.createSampleJson(workspace, 3);
// SampleDataFactory.createSampleJsonWithEmptyNestedTable1(workspace);
// SampleDataFactory.createSampleJsonWithEmptyNestedTable2(workspace);
// SampleDataFactory.createSampleJsonWithEmptyNestedTable3(workspace);
// SampleDataFactory.createSampleJsonWithEmptyNestedTable4(workspace);
// SampleDataFactory.createUnitTest1(workspace);
// SampleDataFactory.createUnitTest2(workspace);
// SampleDataFactory.createUnitTest3(workspace);
// SampleDataFactory.createUnitTest4(workspace);
// SampleDataFactory.createUnitTest5(workspace);
// SampleDataFactory.createUnitTest6(workspace);
// // SampleDataFactory.createFromJsonTextFile(workspace,
// "unit-test-json.json");
// // SampleDataFactory.createFromJsonTextFile(workspace,
// "testUnitTest1.json");
// SampleDataFactory.createFromJsonTextFile(workspace,
// "testUnitTest2.json");
// SampleDataFactory.createFromJsonTextFile(workspace,
// "testUnitTest4.json");
// SampleDataFactory.createFromJsonTextFile(workspace,
// "testUnitTest5.json");
// SampleDataFactory.createFromJsonTextFile(workspace,
// "testUnitTest6.json");
// SampleDataFactory.createFromJsonTextFile(workspace,
// "testSampleJsonWithEmptyNestedTable1.json");
// SampleDataFactory.createFromJsonTextFile(workspace,
// "createSampleJsonWithNestedTable2.json");
// SampleDataFactory.createFromJsonTextFile(workspace, "f6.json");
// SampleDataFactory.createFromJsonTextFile(workspace,
// "createSampleJsonWithNestedTable2_VD.json");
// Put all created worksheet models in the view.
vwsp.addAllWorksheets();
UpdateContainer c = new UpdateContainer();
c.add(new WorksheetListUpdate(vwsp.getVWorksheetList()));
for (VWorksheet vw : vwsp.getVWorksheetList().getVWorksheets()) {
c.add(new WorksheetHierarchicalHeadersUpdate(vw));
c.add(new WorksheetHierarchicalDataUpdate(vw));
}
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
c.generateJson("", pw, vwsp);
response.setContentType("application/json");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(sw.toString());
}
}