/**
*
*/
package webctdbexport.server;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Session;
import org.json.JSONException;
import org.json.JSONObject;
import webctdbexport.test.TestRepository;
import webctdbexport.utils.DbUtils;
import webctdbexport.utils.MoodleRepository;
/** get_listing servlet
*
* @author cmg
*
*/
public class GetListingServlet extends HttpServlet {
static Logger logger = Logger.getLogger(GetListingServlet.class.getName());
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String path = req.getPathInfo();
String username = req.getParameter("username");
String view = req.getParameter("view");
boolean showFiles = !("links".equals(view));
boolean showLinks = !("files".equals(view));
logger.log(Level.INFO, "GetListingServlet path="+path+" username="+username);
JSONObject listing = null;
if (path.equals("/")) {
if (username==null || username.length()==0) {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "username not provided for root directory");
return;
}
Session s = DbUtils.getSession();
try {
listing = MoodleRepository.getListingForUser(s, username, showFiles, showLinks);
} catch (JSONException e) {
logger.log(Level.SEVERE, "getting user listing", e);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "getting user listing for "+username+": "+e);
return;
}
finally {
s.close();
}
}
else {
Session s = DbUtils.getSession();
try {
listing = MoodleRepository.getListingForPath(s, path, showFiles, showLinks);
} catch (JSONException e) {
logger.log(Level.SEVERE, "getting listing for "+path, e);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "getting listing for "+path+": "+e);
return;
}
finally {
s.close();
}
}
resp.setContentType("application/json; charset=UTF-8");
Writer w = new BufferedWriter(new OutputStreamWriter(resp.getOutputStream(), "UTF-8"));
try {
listing.write(w);
} catch (JSONException e) {
logger.log(Level.SEVERE, "Writing response", e);
}
w.close();
}
}