r2994 - in branches/ng-jtimer: . src/main/java/org/chorem/jtimer/entities src/main/java/org/chorem/jtimer/storage src/main/java/org/chorem/jtimer/web src/main/webapp/js
Author: obruce Date: 2014-06-04 16:21:46 +0200 (Wed, 04 Jun 2014) New Revision: 2994 Url: http://forge.chorem.org/projects/jtimer/repository/revisions/2994 Log: Ajout communication des tasks entre serveur Modified: branches/ng-jtimer/pom.xml branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ApplicationServletFilter.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TaskResource.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TiersServerResource.java branches/ng-jtimer/src/main/webapp/js/controllers.js Modified: branches/ng-jtimer/pom.xml =================================================================== --- branches/ng-jtimer/pom.xml 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/pom.xml 2014-06-04 14:21:46 UTC (rev 2994) @@ -194,6 +194,10 @@ <version>${jettyVersion}</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + </dependency> </dependencies> <repositories> Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2014-06-04 14:21:46 UTC (rev 2994) @@ -64,15 +64,15 @@ /** Total time. */ protected long totalTime; - /** if task is removed */ - protected boolean isremoved; + /** date if task is removed */ + protected long removed; /** * Constructor. */ public TimerTask() { // wrong value to detect bug - this.isremoved = true; + this.removed = 0; } /** @@ -86,7 +86,7 @@ this.taskId = UUID.randomUUID().toString(); this.parent = ""; this.modificationDate = new Date(); - this.isremoved = false; + this.removed = 0; } /** @@ -100,7 +100,7 @@ this.taskId = UUID.randomUUID().toString(); this.parent = ""; this.modificationDate = new Date(datetime); - this.isremoved = false; + this.removed = 0; } @@ -207,7 +207,21 @@ this.totalTime = totalTime; } - public boolean getRemoved() {return isremoved;} + public long getRemoved() {return removed;} - public void setRemoved(boolean removed) {this.isremoved = removed;} + public void setRemoved(long removed) {this.removed = removed;} + + @Override + public String toString() { + return "TimerTask {" + + "taskId='" + taskId + '\'' + + ", parent='" + parent + '\'' + + ", name='" + name + '\'' + + ", modificationDate=" + modificationDate + + ", closed=" + closed + + ", todayTime=" + todayTime + + ", totalTime=" + totalTime + + ", removed=" + removed + + '}'; + } } \ No newline at end of file Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-06-04 14:21:46 UTC (rev 2994) @@ -152,7 +152,7 @@ " modificationDate LONG, " + " hidden BOOLEAN," + " note TEXT," + - "removed BOOLEAN," + + "removed LONG," + " PRIMARY KEY (taskId))"); statement.executeUpdate("CREATE TABLE " + TABLE_TIME + "(taskid VARCHAR(255) NOT NULL," + @@ -219,7 +219,7 @@ task.setTaskId(rs.getString("taskId")); task.setName(rs.getString("name")); task.setParent(rs.getString("parent")); - task.setRemoved(rs.getBoolean("removed")); + task.setRemoved(rs.getLong("removed")); task.setTodayTime(0); task.setModificationDate(new java.util.Date(rs.getLong("modificationDate"))); task.setTotalTime(rs.getLong("totalduration")); @@ -237,7 +237,7 @@ task.setTaskId(rs.getString("taskId")); task.setParent(rs.getString("parent")); task.setModificationDate(new java.util.Date(rs.getLong("modificationDate"))); - task.setRemoved(rs.getBoolean("removed")); + task.setRemoved(rs.getLong("removed")); task.setTodayTime(0); task.setTotalTime(0); tasks.add(task); @@ -266,7 +266,7 @@ statement.setBoolean(4, task.isClosed()); statement.setString(5, null /*project.getNote()*/); statement.setLong(6, task.getModificationDate().getTime()); - statement.setBoolean(7,task.getRemoved()); + statement.setLong(7,task.getRemoved()); statement.executeUpdate(); } catch (SQLException ex) { @@ -288,7 +288,7 @@ statement.setString(4, null /*project.getNote()*/);//note statement.setLong(5, task.getModificationDate().getTime()); //modificationDate - statement.setBoolean(6,task.getRemoved()); + statement.setLong(6,task.getRemoved()); statement.setString(7, task.getTaskId()); //taskId statement.executeUpdate(); Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ApplicationServletFilter.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ApplicationServletFilter.java 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ApplicationServletFilter.java 2014-06-04 14:21:46 UTC (rev 2994) @@ -22,8 +22,7 @@ */ public class ApplicationServletFilter implements Filter { - // private final static Logger LOGGER = Logger.getLogger(TasksResource.class.getName()); - private static final Log log = LogFactory.getLog(TasksResource.class); + private static final Log log = LogFactory.getLog(ApplicationServletFilter.class); private static final String HEADER_ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; private static final String HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials"; Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java 2014-06-04 14:21:46 UTC (rev 2994) @@ -29,21 +29,40 @@ protected class TodoTask extends java.util.TimerTask{ @Override public void run() { - log.info("/home/olivia/Workspace/CL/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java : passage dans le run"); + log.info("Passage dans le run"); if(connected){ - if(todoList.getCreatedTasks() != null){ + if(!todoList.getCreatedTasks().isEmpty()) { //Les taches crees - for (String task : todoList.getCreatedTasks()){ - - if(tiers.postTask(task)){ + log.info("Des taches creer à envoyer"); + for (String task : todoList.getCreatedTasks()) { + if (tiers.postTask(task)) { todoList.removeCreatedTask(); } + } + } + if(!todoList.getUpdatedTasks().isEmpty() ){ + log.info("Des taches avec update à envoyer"); + for (String task : todoList.getUpdatedTasks()){ + if(tiers.updateTask(task)){ + log.info("update fait"); + todoList.removeUpdatedTask(); + } } } + if(!todoList.getDeletedTasks().isEmpty()){ + log.info("Des taches avec update à envoyer"); + for (String task : todoList.getDeletedTasks()){ + if(tiers.deleteTask(task)){ + log.info("update fait"); + todoList.removeUpdatedTask(); + } + } + } + } } }; @@ -64,7 +83,7 @@ router.attach("/tasks/task/{taskId}", TaskResource.class); router.attach("/tasks/time/{taskId}", TimeResource.class); router.attach("/tasks/time", TimesResource.class); - router.attach("/tiers", TiersServerResource.class); + //router.attach("/tiers", TiersServerResource.class); return router; } Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TaskResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TaskResource.java 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TaskResource.java 2014-06-04 14:21:46 UTC (rev 2994) @@ -4,6 +4,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.chorem.jtimer.entities.TodoList; import org.chorem.jtimer.storage.Storage; import org.restlet.data.MediaType; import org.restlet.representation.Representation; @@ -18,6 +19,7 @@ private static final Log log = LogFactory.getLog(TaskResource.class); protected Storage storage; + protected TodoList todoList; /** * Methode qui initialis la resource @@ -25,7 +27,12 @@ */ @Override protected void doInit() throws ResourceException { + storage = (Storage)getContext().getAttributes().get(Storage.class.getName()); + + //On recupere la todoList courante + todoList = TodoList.getInstance(); + } /** @@ -50,11 +57,36 @@ */ @Delete public void deleteTask() { + + boolean dispatch = getDispatch(); + String taskId = (String)getRequest().getAttributes().get("taskId"); storage.removeTaskWithId(taskId, new Date().getTime()); + + + + if(dispatch) + todoList.pushDeletedTask(taskId); } + /** + * Recupere la valeur de dispatch dans l'url + * TODO 04/06/14 obruce : remove this method when config will be available + * @return + */ + private boolean getDispatch() { + boolean res; + try { + res = Boolean.valueOf(getQuery().getValues("dispatch")); + } catch (Exception e) { + e.printStackTrace(); + res = true; + } + return res; + } + + @Options public void taskOptions() { if (log.isInfoEnabled()) { Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java 2014-06-04 14:21:46 UTC (rev 2994) @@ -12,14 +12,9 @@ import org.chorem.jtimer.entities.TimerTask; import org.chorem.jtimer.entities.TodoList; import org.chorem.jtimer.storage.Storage; -import org.restlet.Client; -import org.restlet.Context; import org.restlet.data.MediaType; -import org.restlet.data.Protocol; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; -import org.restlet.representation.Variant; -import org.restlet.resource.ClientResource; import org.restlet.resource.Get; import org.restlet.resource.Options; import org.restlet.resource.Post; @@ -45,6 +40,8 @@ protected GsonBuilder builder; protected TodoList todoList; + protected boolean dispatch; //TODO 04/06/14 obruce : remove this parameter when config will be available + /** * Methode qui initialis la resource * @@ -123,28 +120,51 @@ public void createTask(Representation representation) throws IOException { Gson gson = builder.create(); - String repr1 =""; + String repr1 = ""; - if(representation.isAvailable()) { + dispatch = getDispatch(); + if (representation.isAvailable()) { + repr1 = representation.getText(); TimerTask t = gson.fromJson(repr1, TimerTask.class); - t.setRemoved(false); + t.setRemoved(0); storage.addTask(t); - todoList.pushCreatedTask(repr1); + if (dispatch) { + todoList.pushCreatedTask(repr1); + log.info("on dispatch"); + } } } /** + * Recupere la valeur de dispatch dans l'url + * TODO 04/06/14 obruce : remove this method when config will be available + * @return + */ + private boolean getDispatch() { + boolean res; + try { + res = Boolean.valueOf(getQuery().getValues("dispatch")); + } catch (Exception e) { + e.printStackTrace(); + res = true; + } + return res; + } + + /** * Methode qui met à jour une tache * suite d'une requête de type PUT */ @Put("json") public void updateTask(Representation representation) throws IOException { + dispatch = getDispatch(); + if(representation.isAvailable()) { Gson gson = builder.create(); @@ -157,9 +177,15 @@ storage.modifyTask(t); + if (dispatch) { + todoList.pushUpdatedTask(repr1); + log.info("on dispatch update"); + } + } - toRepresentation("{}", new Variant(MediaType.APPLICATION_JSON)); + + } Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TiersServerResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TiersServerResource.java 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TiersServerResource.java 2014-06-04 14:21:46 UTC (rev 2994) @@ -1,108 +1,135 @@ package org.chorem.jtimer.web; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chorem.jtimer.entities.TimerTask; -import org.chorem.jtimer.entities.TodoList; -import org.chorem.jtimer.storage.Storage; -import org.restlet.Client; -import org.restlet.Context; -import org.restlet.data.MediaType; -import org.restlet.data.Protocol; -import org.restlet.representation.Representation; -import org.restlet.representation.Variant; -import org.restlet.resource.ClientResource; -import org.restlet.resource.Post; -import org.restlet.resource.ResourceException; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; import org.restlet.resource.ServerResource; -import java.lang.reflect.Type; -import java.util.Date; - /** * Created by olivia on 03/06/14. + * + * Project name : ${PROJECT_NAME} + * + * Package name : ${PACKAGE_NAME} + * + * */ public class TiersServerResource extends ServerResource { - protected static final Log log = LogFactory.getLog(RestApplication.class); + protected static final Log log = LogFactory.getLog(TiersServerResource.class); + protected static final String dispatch = "?dispatch=false"; //TODO 04/06/14 obruce : remove this parameter when config will be available - protected Storage storage; - protected GsonBuilder builder; - protected TodoList todoList; + /** + * Ctr + */ + public TiersServerResource(){ - @Override - protected void doInit() throws ResourceException { - storage = (Storage) getContext().getAttributes().get(Storage.class.getName()); + } - // Register an adapter to manage the date types as long values - builder = new GsonBuilder(); - builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { + /** + * Methode qui va pousser vers le serveur distant une tache qui vient d'etre creee + * @param t la representation dune tache + * @return booleen de succes + */ + public boolean postTask(String t){ + //Determine si la requete a ete un succes + boolean success = false; - public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return new Date(json.getAsJsonPrimitive().getAsLong()); - } + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost("http://localhost:8080/rest/tasks/task"+dispatch); - }); + StringEntity myEntity = new StringEntity(t,ContentType.create("application/json", "UTF-8")); - builder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() { - @Override - public JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) { - return new JsonPrimitive(date.getTime()); - } - }); + //On ajoute l'entite + httpPost.setEntity(myEntity); - //On recupere la todoList courante - todoList = TodoList.getInstance(); + try{ + CloseableHttpResponse response2 = httpclient.execute(httpPost); + log.info(" Reponse du server 2 : " +response2.getStatusLine()); + //On ferme la reponse + response2.close(); + + //Mission accompli + success = true; + + }catch(Exception e){ + e.printStackTrace(); + } + + return success; } - /** - * Methode qui va pousser vers le serveur distant une tache - * @param t + * Methode qui va pousser vers le serveur distant une tache qui vient d'etre mise a jour + * @param task la tache a mettre a jour + * @return booleen de succes */ - @Post("json") - public boolean postTask(String t){ - //Determine si la requete a ete un succes + public boolean updateTask(String task) { + boolean success = false; + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpPut httpPut = new HttpPut("http://localhost:8080/rest/tasks/task"+dispatch); - Client client = new Client(new Context(), Protocol.HTTP); - //Le client a qui l'on s'adresse - ClientResource clientTaskResource = new ClientResource("http://localhost:8080/rest/tasks/task"); - clientTaskResource.setNext(client); + StringEntity myEntity = new StringEntity(task,ContentType.create("application/json", "UTF-8")); + //On ajoute l'entite + httpPut.setEntity(myEntity); + try{ - log.info("La representation " + t); - Representation representation = toRepresentation(t, new Variant(MediaType.APPLICATION_JSON)); - log.info(representation.getText()); + CloseableHttpResponse response2 = httpclient.execute(httpPut); + log.info(" Reponse du server 2 : " +response2.getStatusLine()); - clientTaskResource.post(representation); + //On ferme la reponse + response2.close(); + + //Mission accompli success = true; + }catch(Exception e){ e.printStackTrace(); - success = false; } return success; } + /** + * Methode qui va pousser vers le serveur distant une tache qui vient d'etre mise a jour + * @param taskId l'identifiant de la tache a mettre a jour + * @return booleen de succes + */ + public boolean deleteTask(String taskId){ - public void putTask(){ + boolean success = false; + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpDelete httpDelete = new HttpDelete("http://localhost:8080/rest/tasks/task/"+taskId +dispatch); - } + try{ + CloseableHttpResponse response2 = httpclient.execute(httpDelete); + log.info(" Reponse du server 2 : " +response2.getStatusLine()); - public void deleteTask(){ + //On ferme la reponse + response2.close(); + //Mission accompli + success = true; + }catch(Exception e){ + e.printStackTrace(); + } + + return success; + } + + } Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-06-03 16:27:59 UTC (rev 2993) +++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-06-04 14:21:46 UTC (rev 2994) @@ -164,7 +164,7 @@ angular.forEach(response, function (item) { - if((!(item.taskId in $scope.data.tasks)) && item.isremoved == false){ + if((!(item.taskId in $scope.data.tasks)) && item.removed == 0){ console.log( "Un element non present " + item.name + item.modificationDate); var newTask = new Task( item.name, item.taskId, item.parent); @@ -211,7 +211,7 @@ * */ var updateTasksFromServ = function(){ - + console.log("updateTasksFromServ debut"); serverTaskAccess.query({date : ($scope.taskAccess-delayAccess)}, function (response) { angular.forEach(response, function (item) { @@ -224,7 +224,7 @@ //On cherche le node et on le met à jour var tmp = $scope.tree.getNode(item.taskId); - if(item.isremoved){ + if(item.removed != 0){ $scope.removeTask(tmp); }else{ tmp.task.name = item.name; @@ -232,7 +232,7 @@ save(); - }else if(!item.isremoved){ + }else if(item.removed == 0){ console.log("Nouvelle tache" +item); @@ -271,6 +271,8 @@ $scope.taskAccess = Date.now(); $scope.todo.lastTaskAccess= $scope.taskAccess; save(); + + console.log("updateTasksFromServ fin"); } /** @@ -372,7 +374,7 @@ //On supprime de la base les taches sotckees pour suppression angular.forEach($scope.todo.stockedDeletedTasks, function(task){ - serverTaskAccess.deleteTask({taskId: task}, + serverTaskAccess.deleteTask({taskId: task,dispatch:true}, function(){ console.log("delete success" + task); $scope.todo.stockedDeletedTasks.shift(); @@ -387,7 +389,7 @@ //On change la date au dernier acces task['modificationDate']=$scope.taskAccess; - serverTaskAccess.create(angular.toJson(task), + serverTaskAccess.create({dispatch:true}, angular.toJson(task), //TODO obruce 04/06/14 dispatch a enlever function(){ console.log("persist task success" + task); $scope.todo.stockedNewTasks.shift(); @@ -401,7 +403,7 @@ //On change la date au dernier acces task["modificationDate"]=$scope.taskAccess; - serverTaskAccess.update(angular.toJson(task), + serverTaskAccess.update({dispatch:true},angular.toJson(task), //TODO function(){ console.log("update task success" + task); $scope.todo.stockedEditedTasks.shift(); @@ -472,7 +474,7 @@ $scope.data.tasks[newTask.taskId] = newTask; //On synchronise la tache creer - serverTaskAccess.create(angular.toJson(newTask), + serverTaskAccess.create({dispatch:true}, angular.toJson(newTask), //TODO obruce 04/06/14 dispatch a enlever function(){ console.log("persist task success" + newTask); $scope.todo.stockedNewTasks.shift(); @@ -501,7 +503,7 @@ $scope.data.tasks[newTask.taskId] = newTask; //On synchronise la tache creer - serverTaskAccess.create(angular.toJson(newTask), + serverTaskAccess.create({dispatch:true}, angular.toJson(newTask), //TODO obruce 04/06/14 dispatch a enlever function(){ console.log("persist task success" + newTask); $scope.todo.stockedNewTasks.shift(); @@ -533,7 +535,7 @@ delete $scope.todo.stockedNewTimes[task.taskId]; - serverTaskAccess.deleteTask({taskId: task.taskId}, function(){ + serverTaskAccess.deleteTask({taskId: task.taskId, dispatch:true}, function(){ console.log("delete success" + task.taskId); }, function(){
participants (1)
-
obruce@users.chorem.org