<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page trimDirectiveWhitespaces="true" %> <%@ page import="org.crosswire.utils.Sessions" %> <%@ page import="org.crosswire.community.projects.ntmss.data.ProjectManagement" %> <%@ page import="org.crosswire.utils.HTTPUtils" %> <%@ page import="java.util.HashMap" %> <%@ page import="java.util.HashSet" %> <%@ page import="java.util.StringTokenizer" %> <%@ page import="java.util.Date" %> <%@ page import="java.util.Vector" %> <%@ page import="java.io.File" %> <%@ page import="java.util.PriorityQueue" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="org.crosswire.repo.VersionedRepo" %> <%@ page import="org.json.JSONObject" %> <%@ page import="org.json.JSONArray" %> <%@ page import="org.apache.log4j.Logger" %> <% Logger logger = Logger.getLogger("project/data/get"); // who we are String userName = Sessions.getSessionStringValue(request, "userName"); // who we want to pull transcription for String targetUser=request.getParameter("userName"); SimpleDateFormat df = new SimpleDateFormat("yyyy"); int projectID = -1; try {projectID = Integer.parseInt(request.getParameter("projectID"));} catch (Exception e){} String projectName = request.getParameter("projectName"); if (projectName != null) projectName = new String(projectName.getBytes("iso8859-1"), "UTF-8"); String keyValue = request.getParameter("key"); String subKey = request.getParameter("subKey"); if (subKey == null) subKey = "primary"; String versionHash=request.getParameter("versionHash"); boolean history="true".equals(request.getParameter("history")); boolean allUsers="true".equals(request.getParameter("allUsers")); String formatString = request.getParameter("format"); final int FORMAT_XML = 0; final int FORMAT_JSON = 1; final int FORMAT_TXT = 2; int format = FORMAT_XML; if ("json".equals(formatString)) format = FORMAT_JSON; else if ("txt".equals(formatString)) format = FORMAT_TXT; if ("PUBLISHED".equals(targetUser)) targetUser = null; if ((projectID > -1 || projectName != null) && keyValue != null) { response.setContentType("text/xml"); Vector keys = new Vector(); StringTokenizer keyTokens = new StringTokenizer(keyValue, "|"); while (keyTokens.hasMoreTokens()) { keys.add(keyTokens.nextToken()); } ProjectManagement.Project pr = projectID > -1 ? ProjectManagement.getProject(projectID) : ProjectManagement.getProject(projectName); if (pr == null) { out.print(""); return; } if (format == FORMAT_XML || history) out.print(""); else if (format == FORMAT_JSON) response.setContentType("application/json"); else if (format == FORMAT_TXT) response.setContentType("text/plain"); // JSONArray jsonResults = (format == FORMAT_JSON ? new JSONArray() : null); StringBuffer jsonResults = (format == FORMAT_JSON ? new StringBuffer("[") : null); for (String key : keys) { String path = pr.getProjectName() + "/"; if (!key.endsWith("/")) key += "/"; path += key; if (targetUser != null && targetUser.length() > 0) path += "initial/" + targetUser + "/"; path += subKey +".txt"; if (!history) { StringBuffer body = VersionedRepo.getFile(path, targetUser, versionHash, VersionedRepo.PATH_PROJECT); if (format == FORMAT_JSON) { // JSONObject o = (body!=null?new JSONObject(body):null); //logger.info("body: " + body.toString()); //logger.info("json: " + o.toString()); // jsonResults.put(o); if (jsonResults.length() > 1) jsonResults.append(","); jsonResults.append(body); } else if (format == FORMAT_XML) out.print(""+(body!=null?body:"")+""); else out.print(body); } else { %> <% for (VersionedRepo.History h : VersionedRepo.getFileHistory(path, targetUser, VersionedRepo.PATH_PROJECT)) out.print(h.toFormattedXML()); if (allUsers) { path = pr.getProjectName() + "/"; if (targetUser != null) { File potential = VersionedRepo.getFileName(path+subKey+".txt", VersionedRepo.PATH_PROJECT); if (potential != null) { VersionedRepo.History n = new VersionedRepo.History(potential.getName(), ""); n.author = "PUBLISHED"; n.date = new Date(potential.lastModified()); n.committer = ""; n.comment = ""; n.versionHash = "HEAD"; out.print(n.toFormattedXML()); } } path += "initial/"; File[] users = VersionedRepo.getFolders(path, VersionedRepo.PATH_PROJECT); // getFolders actually simply returns children for (File f : users) { // skip if we're ourselve-- we already added us, above if (targetUser != null && (targetUser+".txt").equals(f.getName())) continue; String str = f.getName(); if (str.endsWith(".txt")) { str = str.substring(0, str.lastIndexOf('.')); VersionedRepo.History n = new VersionedRepo.History(str, ""); n.author = f.getName(); n.date = new Date(f.lastModified()); n.committer = ""; n.comment = ""; n.versionHash = "HEAD"; out.print(n.toFormattedXML()); } } } %> <% } } if (format == FORMAT_XML || history) out.print(""); else if (format == FORMAT_JSON) out.print(jsonResults.toString()+"]"); return; } %>

project/data/get

Retrieve project data

Parameters

projectIDproject id to retrieve,
projectNameproject name to retrieve
keypath for data, e.g., collation/regularized/Rev.1.1
subKeyoptional, (primary) a subKey when multiple values are stored for this key
userNameoptional, (default: "PUBLISHED") retrieve a user's staged transcription
versionHashoptional, retrieve a previous version of the transcription
historyoptional, if set to true, retrieve version history for the object, instead of the actual object
allUsersoptional, used with 'history'. if set to true, retrieve also latest versions for all users
formatoptional, (xml), json, txt