if (p.segment(0).equals(Clone.RESOURCE) && p.segment(1).equals("file")) { //$NON-NLS-1$
// expected path /gitapi/config/clone/file/{path}
File gitDir = GitUtils.getGitDir(p.removeFirstSegments(1));
if (gitDir == null)
return statusHandler.handleRequest(request, response,
new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_NOT_FOUND, NLS.bind("No repository found under {0}", p.removeFirstSegments(1)),
null));
URI cloneLocation = BaseToCloneConverter.getCloneLocation(getURI(request), BaseToCloneConverter.CONFIG);
JSONObject toPost = OrionServlet.readJSONRequest(request);
String key = toPost.optString(GitConstants.KEY_CONFIG_ENTRY_KEY, null);
if (key == null || key.isEmpty())
return statusHandler.handleRequest(request, response, new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_BAD_REQUEST,
"Config entry key must be provided", null));
String value = toPost.optString(GitConstants.KEY_CONFIG_ENTRY_VALUE, null);
if (value == null || value.isEmpty())
return statusHandler.handleRequest(request, response, new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_BAD_REQUEST,
"Config entry value must be provided", null));
Repository db = null;
try {
db = FileRepositoryBuilder.create(gitDir);
ConfigOption configOption = new ConfigOption(cloneLocation, db, key);
boolean present = configOption.exists();
ArrayList<String> valList = new ArrayList<String>();
if (present) {
String[] val = configOption.getValue();
valList.addAll(Arrays.asList(val));
}
valList.add(value);
save(configOption, valList);
JSONObject result = configOption.toJSON();
OrionServlet.writeJSONResponse(request, response, result, JsonURIUnqualificationStrategy.ALL_NO_GIT);
response.setHeader(ProtocolConstants.HEADER_LOCATION, result.getString(ProtocolConstants.KEY_LOCATION));
response.setStatus(HttpServletResponse.SC_CREATED);
return true;
} catch (IllegalArgumentException e) {
return statusHandler.handleRequest(request, response, new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_BAD_REQUEST, e.getMessage(), e));
} finally {
if (db != null) {
db.close();
}
}