package org.openintents.wifiserver.requesthandler.notes;
import java.io.IOException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.apache.http.protocol.HttpContext;
import org.openintents.wifiserver.util.URLEncodedUtils;
import android.content.ContentValues;
import android.content.Context;
import android.util.Log;
/**
* Handler which is used to update notes. It handles requests of the form "/notes/update".
*
* @author Stanley Förster
*
*/
public class UpdateNote extends NotesHandler {
/**
* Creates a new handler.
*
* @param context The application's context.
*/
public UpdateNote(Context context) {
super(context);
}
/**
* <p>
* {@inheritDoc}
* </p>
* This method updates a existing note. The required HTTP method is POST.
* Every other method will cause a 405 status code to be returned.
* To update a note, at least the id, title and name are required. The id is
* used to identify the note. If one or more of these parameters are missing
* or a malformed id is given, the status code 400 will be returned. A
* status code 500 will be returned if parameters could not be parsed.
*/
@Override
protected void getResponse(HttpRequest request, HttpResponse response, HttpContext context) {
if (!"POST".equals(request.getRequestLine().getMethod())) {
response.setStatusCode(405);
return;
}
if (request instanceof BasicHttpEntityEnclosingRequest) {
HttpEntity postEntity = ((BasicHttpEntityEnclosingRequest)request).getEntity();
String id = null;
String title = null;
String note = null;
String tags = null;
List<NameValuePair> postParams;
try {
postParams = URLEncodedUtils.parse(postEntity);
} catch (IOException e) {
Log.e(TAG, "Failed to parse parameters!", e);
response.setStatusCode(500);
return;
}
for (NameValuePair nvp : postParams) {
if ("note".equals(nvp.getName()))
note = nvp.getValue();
if ("title".equals(nvp.getName()))
title = nvp.getValue();
if ("tags".equals(nvp.getName()))
tags = nvp.getValue();
if ("_id".equals(nvp.getName()))
id = nvp.getValue();
}
if (id == null || title == null || note == null) {
response.setStatusCode(400);
return;
}
ContentValues values = new ContentValues();
values.put("modified", Long.valueOf(System.currentTimeMillis()));
values.put("title", title);
values.put("note", note);
if (tags != null) {
values.put("tags", tags);
}
// prevent notepad app from throwing IndexOutOfBoundsException
values.put("selection_start", Long.valueOf(0));
values.put("selection_end", Long.valueOf(0));
if (0 == mContext.getContentResolver().update(mNotesURI, values, "_id = ?", new String[] { id })) {
response.setStatusCode(400);
}
}
}
}