r2963 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/entities java/org/chorem/jtimer/storage java/org/chorem/jtimer/web webapp/js
Author: obruce Date: 2014-05-06 09:45:40 +0200 (Tue, 06 May 2014) New Revision: 2963 Url: http://forge.chorem.org/projects/jtimer/repository/revisions/2963 Log: Ajout des p?\195?\169riodes entities/TimeResource, ajout uuid pour les taches, ajout service rest pour les temps Modified: 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/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/TimeResource.java branches/ng-jtimer/src/main/webapp/js/app.js branches/ng-jtimer/src/main/webapp/js/controllers.js branches/ng-jtimer/src/main/webapp/js/entities.js branches/ng-jtimer/src/main/webapp/js/service.js 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-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2014-05-06 07:45:40 UTC (rev 2963) @@ -27,13 +27,14 @@ import java.io.Serializable; import java.util.Date; +import java.util.UUID; /** * Represents a task. - * + * * @author chatellier * @version $Revision$ - * + * * Last update : $Date$ * By : $Author$ */ @@ -45,8 +46,11 @@ /** Task number. */ protected long number; + /** Task uuid */ + protected String taskId; + /** Parent task number. */ - protected long parent; + protected String parent; /** Task name. */ protected String name; @@ -73,13 +77,15 @@ /** * Constructor with name. - * + * * @param name task name */ public TimerTask(long number, String name) { this(); this.number = number; this.name = name; + this.taskId = UUID.randomUUID().toString(); + this.parent = ""; } /** @@ -100,17 +106,41 @@ this.number = number; } - public long getParent() { + /** + * Get task uuid + * @return the task uuid + */ + public void setTaskId(String taskuuid) { + taskId = taskuuid; + } + + /** + * Get task uuid + * @return the task uuid + */ + public String getTaskId() { + return taskId; + } + + /** + * Get task parent + * @return the parent + */ + public String getParent() { return parent; } - public void setParent(long parent) { + /** + * Set task parent + * @param parent the parent to set + */ + public void setParent(String parent) { this.parent = parent; } /** * Get task name. - * + * * @return the name */ public String getName() { @@ -119,7 +149,7 @@ /** * Set task name. - * + * * @param name the name to set */ public void setName(String name) { @@ -128,7 +158,7 @@ /** * Get task creation date. - * + * * @return task creation date */ public Date getCreationDate() { @@ -137,7 +167,7 @@ /** * Set task creation date. - * + * * @param creationDate creation date */ public void setCreationDate(Date creationDate) { @@ -146,7 +176,7 @@ /** * Get closed task state. - * + * * @return <tt>true</tt> if task is closed */ public boolean isClosed() { @@ -155,7 +185,7 @@ /** * Set closed. - * + * * @param closed closed */ public void setClosed(boolean closed) { 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-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-05-06 07:45:40 UTC (rev 2963) @@ -13,17 +13,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.entities.TimerTask; +import org.chorem.jtimer.entities.TimerTime; /** * Implementation du stockage des taches en base de données basée sur h2. - * + * * Le schema est composé des tables: * <ul> * <li>Task * <li>TaskTime * <li>Version (contenant la version du schema en cas de migration)</li> * </ul> - * + * * @author echatellier */ public class Storage { @@ -80,7 +81,7 @@ log.info("Creating new database schema"); } createSchema(conn); - + // set new version in schema Statement statement = conn.createStatement(); statement.executeUpdate("INSERT INTO VERSION VALUES('2.0')"); @@ -107,7 +108,7 @@ /** * Test if table "version" exists in database list. - * + * * @param conn sql connection * @return schema exists */ @@ -143,11 +144,13 @@ statement.executeUpdate("CREATE TABLE " + TABLE_VERSION + "(version VARCHAR(10))"); statement.executeUpdate("CREATE TABLE " + TABLE_TASK + - "(id LONG NOT NULL AUTO_INCREMENT PRIMARY KEY," + + "(id LONG NOT NULL AUTO_INCREMENT," + + " taskId VARCHAR(255) NOT NULL," + " name VARCHAR(255) NOT NULL," + - " parent LONG DEFAULT 0," + + " parent VARCHAR(255)," + " hidden BOOLEAN," + - " note TEXT)"); + " note TEXT," + + " PRIMARY KEY (id, taskId))"); statement.executeUpdate("CREATE TABLE " + TABLE_TIME + "(taskid LONG NOT NULL REFERENCES " + TABLE_TASK + "(id)," + " date DATE," + @@ -159,14 +162,14 @@ } finally { closeStatement(statement); } - + } /** Query **/ /** * Find all project. (task with no parent, parent = 0). - * + * * @return all projects */ public int getTasksCount() { @@ -195,7 +198,7 @@ PreparedStatement statement = null; PreparedStatement statement2 = null; try { - statement = connection.prepareStatement("SELECT TA.*, sum(TI.duration) AS totalduration FROM " + + statement = connection.prepareStatement("SELECT TA.*, MIN(TI.date) as modifdate, sum(TI.duration) AS totalduration FROM " + TABLE_TASK + " TA, " + TABLE_TIME + " TI" + " WHERE TA.id = TI.taskid" + " GROUP BY TA.id"); @@ -203,13 +206,15 @@ while (rs.next()) { TimerTask task = new TimerTask(); task.setNumber(rs.getInt("id")); + task.setTaskId(rs.getString("taskId")); task.setName(rs.getString("name")); - task.setParent(rs.getLong("parent")); + task.setParent(rs.getString("parent")); task.setTodayTime(0); + task.setCreationDate(new java.util.Date(rs.getDate("modifdate").getTime())); task.setTotalTime(rs.getLong("totalduration")); tasks.add(task); } - + // not timed tasks statement2 = connection.prepareStatement("SELECT * FROM " + TABLE_TASK + " WHERE id not in (SELECT taskid FROM " + TABLE_TIME + ")"); @@ -218,7 +223,9 @@ TimerTask task = new TimerTask(); task.setNumber(rs.getInt("id")); task.setName(rs.getString("name")); - task.setParent(rs.getLong("parent")); + task.setTaskId(rs.getString("taskId")); + task.setParent(rs.getString("parent")); + task.setCreationDate(new Date()); task.setTodayTime(0); task.setTotalTime(0); tasks.add(task); @@ -240,12 +247,17 @@ PreparedStatement statement = null; try { statement = connection.prepareStatement("INSERT INTO " + - TABLE_TASK + "(name, parent, hidden, note)" + - " VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); + TABLE_TASK + "(name, parent, taskId, hidden, note)" + + " VALUES (?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); statement.setString(1, task.getName()); - statement.setLong(2, task.getParent()); - statement.setBoolean(3, task.isClosed()); - statement.setString(4, null /*project.getNote()*/); + if (task.getParent() == "" || task.getParent() == "0" ) { + statement.setString(2, ""); + } else { + statement.setString(2, task.getParent()); + } + statement.setString(3, task.getTaskId()); + statement.setBoolean(4, task.isClosed()); + statement.setString(5, null /*project.getNote()*/); statement.executeUpdate(); // get generated id @@ -264,17 +276,18 @@ PreparedStatement statement = null; try { statement = connection.prepareStatement("UPDATE " + - TABLE_TASK + " SET name=?, parent=?, hidden=?, note=?" + + TABLE_TASK + " SET name=?, parent=?, taskId=?, hidden=?, note=?" + " WHERE id = ?"); statement.setString(1, task.getName()); - if (task.getParent() > 0) { - statement.setLong(2, 0); + if (task.getParent() == "") { + statement.setString(2, ""); } else { - statement.setLong(2, task.getParent()); + statement.setString(2, task.getParent()); } - statement.setBoolean(3, task.isClosed()); - statement.setString(4, null /*project.getNote()*/); - statement.setLong(5, task.getNumber()); + statement.setString(3, task.getTaskId()); + statement.setBoolean(4, task.isClosed()); + statement.setString(5, null /*project.getNote()*/); + statement.setLong(6, task.getNumber()); statement.executeUpdate(); } catch (SQLException ex) { throw new StorageException("Can't modify task", ex); @@ -317,6 +330,53 @@ } public void setAnnotation(TimerTask task, Date date, String annotation) { - + } + + public void deleteTaskWithId(String taskId) { + PreparedStatement statement = null; + try { + statement = connection.prepareStatement("DELETE FROM " + + TABLE_TASK + " WHERE taskId = ?"); + statement.setString(1, taskId); + statement.executeUpdate(); + } catch (SQLException ex) { + throw new StorageException("Can't delete project", ex); + } finally { + closeStatement(statement); + } + + } + + + /** + * Query that returns every tasks + * @return tasks arraylist of tasks + */ + public List<TimerTime> getTimes(String taskid) { + + List<TimerTime> times = new ArrayList<>(); + PreparedStatement statement = null; + try { + statement = connection.prepareStatement("SELECT TI.* FROM " + + TABLE_TASK + " TA, "+ TABLE_TIME + " TI" + + " WHERE TA.id = TI.taskid AND TA.taskId = '" +taskid +"' "); + ResultSet rs = statement.executeQuery(); + while (rs.next()) { + TimerTime time = new TimerTime(); + time.setTaskId(taskid); + time.setTimeId(rs.getString("uuid")); + time.setTime(rs.getLong("duration")); + time.setCreationDate(new java.util.Date(rs.getDate("date").getTime())); + + times.add(time); + + } + } catch (SQLException ex) { + throw new StorageException("Can't get time", ex); + } finally { + closeStatement(statement); + } + return times; + } } \ No newline at end of file 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-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java 2014-05-06 07:45:40 UTC (rev 2963) @@ -5,13 +5,12 @@ import org.chorem.jtimer.entities.TimerTask; import org.chorem.jtimer.storage.Storage; -import org.restlet.Application; -import org.restlet.Context; -import org.restlet.Restlet; +import org.restlet.*; import org.restlet.routing.Router; public class RestApplication extends Application { + /** * Creates a root Restlet that will receive all incoming calls. */ @@ -25,8 +24,8 @@ // Defines only one route router.attach("/tasks", TasksResource.class); - //router.attach("/tasks/{taskId}", TaskResource.class); - //router.attach("/tasks/{taskId}/time", TimeResource.class); + router.attach("/tasks/{taskId}", TaskResource.class); + router.attach("/tasks/{taskId}/time", TimeResource.class); return router; } @@ -39,8 +38,8 @@ TimerTask jTimerProject = new TimerTask(1, "jTimer"); TimerTask jTimerTask1 = new TimerTask(2, "WebService"); TimerTask jTimerTask2 = new TimerTask(8, "WebService2"); - jTimerTask1.setParent(jTimerProject.getNumber()); - jTimerTask2.setParent(jTimerProject.getNumber()); + jTimerTask1.setParent(jTimerProject.getTaskId()); + jTimerTask2.setParent(jTimerProject.getTaskId()); storage.addTask(jTimerProject); storage.addTask(jTimerTask1); storage.addTask(jTimerTask2); @@ -58,4 +57,8 @@ context.getAttributes().put(Storage.class.getName(), storage); } + + + + } \ No newline at end of file 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-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TaskResource.java 2014-05-06 07:45:40 UTC (rev 2963) @@ -5,10 +5,11 @@ import org.restlet.data.MediaType; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; -import org.restlet.resource.Get; -import org.restlet.resource.ResourceException; -import org.restlet.resource.ServerResource; +import org.restlet.resource.*; +import java.util.logging.Level; +import java.util.logging.Logger; + public class TaskResource extends ServerResource { protected Storage storage; @@ -22,7 +23,16 @@ public Representation getTask() { String taskId = (String)getRequest().getAttributes().get("taskId"); Gson gson = new Gson(); - String json = gson.toJson(storage.getTask(Long.valueOf(taskId).longValue())); + String json = gson.toJson(Long.valueOf(taskId).longValue()); return new StringRepresentation( json , MediaType.APPLICATION_JSON); } + + @Delete + public void deleteTask() { + + String taskId = (String)getRequest().getAttributes().get("taskId"); + storage.deleteTaskWithId(taskId); + } + + } 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-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java 2014-05-06 07:45:40 UTC (rev 2963) @@ -1,25 +1,40 @@ package org.chorem.jtimer.web; +import com.google.gson.*; import org.chorem.jtimer.entities.TimerTask; import org.chorem.jtimer.storage.Storage; +import org.eclipse.jetty.util.log.Log; import org.restlet.data.MediaType; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; -import org.restlet.resource.Get; -import org.restlet.resource.ResourceException; -import org.restlet.resource.ServerResource; +import org.restlet.resource.*; -import com.google.gson.Gson; +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.Date; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; public class TasksResource extends ServerResource { protected Storage storage; + private final static Logger LOGGER = Logger.getLogger(TasksResource.class.getName()); + private GsonBuilder builder; + @Override protected void doInit() throws ResourceException { storage = (Storage)getContext().getAttributes().get(Storage.class.getName()); + + builder = new GsonBuilder(); + // Register an adapter to manage the date types as long values + builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { + public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + return new Date(json.getAsJsonPrimitive().getAsLong()); + } + }); } @Get("json") @@ -31,7 +46,7 @@ int tabSize = timerTasks.size(); for(int i =0; i <= tabSize;i++){ TimerTask task = timerTasks.get(i); - if(task.getParent() == 0){ + if(task.getParent() == ""){ timerTasks.add(task); timerTasks.remove(i); i--; @@ -43,4 +58,21 @@ String json = gson.toJson(timerTasks); return new StringRepresentation(json, MediaType.APPLICATION_JSON); } + + @Post("json") + public void createTask(Representation representation) throws IOException { + + Gson gson = builder.create(); + String repr1 = representation.getText(); + TimerTask t = gson.fromJson(repr1, TimerTask.class); + LOGGER.log(Level.INFO,"repr1"); + + //List<TimerTask> timerTasks = gson.fromJson(repr1, List.class); + + /*for(TimerTask t : timerTasks){ + storage.addTask(t); + }*/ + storage.addTask(t); + } + } Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimeResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimeResource.java 2014-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TimeResource.java 2014-05-06 07:45:40 UTC (rev 2963) @@ -1,6 +1,7 @@ package org.chorem.jtimer.web; import com.google.gson.Gson; +import org.chorem.jtimer.entities.TimerTime; import org.chorem.jtimer.storage.Storage; import org.restlet.data.MediaType; import org.restlet.representation.Representation; @@ -9,6 +10,8 @@ import org.restlet.resource.ResourceException; import org.restlet.resource.ServerResource; +import java.util.List; + public class TimeResource extends ServerResource { protected Storage storage; @@ -20,8 +23,10 @@ @Get("json") public Representation getTask() { String taskId = (String)getRequest().getAttributes().get("taskId"); + List<TimerTime> timerTimes = storage.getTimes(taskId); + Gson gson = new Gson(); - String jsonTime = gson.toJson(storage.getTask(Long.valueOf(taskId).longValue()).getTodayTime()); - return new StringRepresentation("Today time : " + jsonTime , MediaType.APPLICATION_JSON); + String json = gson.toJson(timerTimes); + return new StringRepresentation(json, MediaType.APPLICATION_JSON); } } Modified: branches/ng-jtimer/src/main/webapp/js/app.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/app.js 2014-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/webapp/js/app.js 2014-05-06 07:45:40 UTC (rev 2963) @@ -247,7 +247,7 @@ /** * Module de webtimer **/ -angular.module('webtimer', ['webtimerFilters', 'ngRoute', 'ngAnimate', 'ui.bootstrap','serverAccessService']) +angular.module('webtimer', ['webtimerFilters', 'ngRoute', 'ngAnimate', 'ui.bootstrap','serverAccessService', 'serverTimeService' ]) .config(['$routeProvider', function($routeProvider) { $routeProvider. when('/tasks', {templateUrl: 'partials/tasks.html', controller: TasksCtrl}). Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-05-06 07:45:40 UTC (rev 2963) @@ -1,4 +1,4 @@ -function TasksCtrl($scope, $interval, $timeout, $q, serverAccess, $localStorage, $window, $document, $modal, wtWebsocket) { +function TasksCtrl($scope, $interval, $timeout, $q, serverTaskAccess, serverTimeAccess, $localStorage, $window, $document, $modal, wtWebsocket) { // {Boolean} vrai si on est online $scope.online = $window.navigator.onLine; @@ -47,9 +47,10 @@ //obruce :Creation de files de temps, de taches // {Array of TaskID} la file de tache attendant la synchronisation avec le serveur - $scope.stockedNewTasks = []; + var stockedNewTasks = []; + var stockedDeletedTasks = []; // {Array of TaskID} la file de temps des taches attendant la synchronisation avec le serveur - $scope.stockedNewTimes = []; + var stockedNewTimes = []; /** * Met a jour la tache selectionne, si la tache selectionnee est la courante @@ -74,7 +75,7 @@ ///console.log(e); // i = 73; d = 68; F2 = 113 if ($scope.selectedTask) { - var taskTime = $scope.getTodayTaskTime($scope.selectedTask); + var taskTime = $scope.getRecentTaskTime($scope.selectedTask); if (e.keyCode === 113) { // edit task, time, note } else if (e.keyCode === 73 && e.ctrlKey && e.shiftKey) { @@ -114,33 +115,37 @@ */ var getChangesFromServ = function(){ - serverAccess.query(function (response) { + serverTaskAccess.query(function (response) { angular.forEach(response, function (item) { //On verife si l'element n'est pas deja present - if(!(item.number in $scope.data.tasks)){ - var newTask = new Task( item.name, item.number,item.parent); + if(!(item.taskId in $scope.data.tasks)){ - if(item.parent == 0){ + var newTask = new Task( item.name, item.taskId, item.parent); + if(item.parent == "" ){ + //Un noeud sans parent est ajouter à l'arbre du scope $scope.data.tasks[newTask.taskId] = newTask; save(); if ($scope.tree) { $scope.tree.addChild($scope.createTreeNode(newTask)); } - + console.log("Import projet " + newTask.name); }else{ - //Un noeud avec un parent est ajoute à l'arbre de son parent $scope.data.tasks[newTask.taskId] = newTask; + getTimesFromServer(newTask); //On ajoute le temps du jour et global sur ce noeud - $scope.getTodayTaskTime($scope.data.tasks[newTask.taskId]).addTime(item.todayTime); + //$scope.getRecentTaskTime($scope.data.tasks[newTask.taskId]).addTime(item.todayTime); - var global = new GlobalTime(newTask).addTime(parseInt(item.totalTime)); - $scope.data.globalTimes[newTask.taskId] = global; + //var global = new GlobalTime(newTask).addTime(parseInt(item.totalTime)); + //$scope.data.globalTimes[newTask.taskId] = global; + console.log(newTask); + console.log("Import task "+ newTask.name); + console.log($scope.data.times[newTask.taskId]) save(); } } @@ -150,7 +155,36 @@ }; + var getTimesFromServer = function(task){ + if(!$scope.data.times[task.taskId]){$scope.data.times[task.taskId] = []} + + serverTimeAccess.query({taskId : task.taskId}, function (response) { + angular.forEach(response, function (item) { + + if(!(item.timeId in $scope.data.times[task.taskId])){ + //On cree le tasktime + taskTime = new TaskTime(task, item.timeId, item.creationDate, item.time); + $scope.data.times[task.taskId].push(taskTime); + } + }); + }); + } + + var pushChangesToServ= function(){ + + angular.forEach(stockedDeletedTasks, function(task){ + serverTaskAccess.delete({taskId: task}); + console.log("delete "+ task.name); + }); + angular.forEach(stockedNewTasks, function(task){ + serverTaskAccess.create(angular.toJson(task)); + console.log("ajout new task to serv "+ task.name); + }); + stockedDeletedTasks = []; + stockedNewTasks = []; + } + /** * Timer qui met les temps a jour toutes les secondes si une tache est * active @@ -179,9 +213,12 @@ //Si en ligne on envoie les donnees if ( $scope.online == true) { + pushChangesToServ(); getChangesFromServ(); + //On change la date de dernier acces $scope.acces = moment().format("DD-MM-YYYY H:mm:ss a"); + console.log($scope.data.times); } }, 30000); //TODO: for now 10s but for real put at least 2h: 200000000 @@ -192,17 +229,18 @@ * Ajoute une tache root */ $scope.addTask = function() { - var newTask = new Task($scope.name,undefined,0); + var newTask = new Task($scope.name); $scope.data.tasks[newTask.taskId] = newTask; //On ajoute à la file de synchro - $scope.stockedNewTasks.push(newTask); + stockedNewTasks.push(newTask); $scope.name = ""; save(); if ($scope.tree) { $scope.tree.addChild($scope.createTreeNode(newTask)); } + }; /** @@ -215,11 +253,12 @@ $scope.data.tasks[newTask.taskId] = newTask; //On ajoute à la file de synchro - $scope.stockedNewTasks.push(newTask); + stockedNewTasks.push(newTask); node.$$open = true; save(); node.addChild($scope.createTreeNode(newTask)); + console.log($scope.data.times[newTask.taskId]); }; /** @@ -236,9 +275,12 @@ delete $scope.data.tasks[task.taskId]; delete $scope.data.times[task.taskId]; + stockedDeletedTasks.push(task.taskId); + var children = $scope.getChildren(task); removeRecurse(children); }); + save(); }; // mark all task as removed removeRecurse([node.task]); @@ -333,7 +375,7 @@ * des objets temps existant * @param {type} task * @returns {nodes} - */ + $scope.getTodayTaskTime = function(task) { var times = $scope.data.times[task.taskId]; @@ -355,7 +397,7 @@ } return result; - }; + };*/ /** * Retourne l'objet TaskTime d'aujourd'hui pour la tache demandee @@ -376,9 +418,9 @@ var result; angular.forEach(times, function (t) { - if (t.isToday()) { - if(maxDate < new Date(t.date)){ - maxDate = new Date(t.date); + if (t.isToday() ) { + if(maxDate < t.creationTime){ + maxDate = t.creationTime; result = t; } } @@ -437,11 +479,13 @@ //On change la task courante $scope.currentTask = task; $scope.currentTaskDate = now; + } else { + $scope.currentTask = null; $scope.currentTaskDate = null; } - + console.log($scope.data.times[task.taskId]); save(); }; @@ -513,6 +557,7 @@ }; //force the first server connection + pushChangesToServ(); getChangesFromServ(); // force the first tree creation Modified: branches/ng-jtimer/src/main/webapp/js/entities.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/entities.js 2014-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/webapp/js/entities.js 2014-05-06 07:45:40 UTC (rev 2963) @@ -64,7 +64,6 @@ // la version des donnees this.dataVersion = 1; - //this.tasks = []; // Array of Task this.tasks = {}; // key: taskId, value: Task this.globalTimes = {}; // key: taskId, value: GlobalTime this.times = {}; // key: taskId, value: Array of TaskTime @@ -291,9 +290,9 @@ this.removed = 0; if(parentTaskId == undefined){ - this.parentTaskId = 0; + this.parent = ""; }else{ - this.parentTaskId = parentTaskId; + this.parent = parentTaskId; } this.name = name; @@ -333,7 +332,7 @@ * @returns {Boolean} */ Task.prototype.isParentOf = function(subtask) { - var result = subtask.parentTaskId === this.taskId; + var result = subtask.parent === this.taskId; return result; }; @@ -342,7 +341,7 @@ * @returns {unresolved} */ Task.prototype.isRoot = function() { - var result = !this.parentTaskId; + var result = !this.parent; return result; }; @@ -351,15 +350,27 @@ * @param {Task} task * @returns {TaskTime} */ -var TaskTime = function (task) { +var TaskTime = function (task, id, date,time) { this.taskId = task && task.taskId; - this.timeId = generateUUID(); + if(id == undefined){ + this.timeId = generateUUID(); + }else{ + this.timeId = id; + } - this.date = today(); - //this.date = Date.now(); + if(date == undefined){ + this.creationTime = new Date(); + }else{ + this.creationTime = new Date(date); + } - this.time = 0; + if(time == undefined){ + this.time = 0; + }else{ + this.time = time; + } + }; /** @@ -367,10 +378,16 @@ * @returns {Boolean} */ TaskTime.prototype.isToday = function() { - var result = this.date === today(); + var result = new Date(this.creationTime).sameDay(new Date()); return result; }; +Date.prototype.sameDay = function(d) { + return this.getFullYear() === d.getFullYear() + && this.getDate() === d.getDate() + && this.getMonth() === d.getMonth(); +} + /** * ajoute du temps * @param {Number} t Modified: branches/ng-jtimer/src/main/webapp/js/service.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/service.js 2014-05-02 09:57:35 UTC (rev 2962) +++ branches/ng-jtimer/src/main/webapp/js/service.js 2014-05-06 07:45:40 UTC (rev 2963) @@ -1,18 +1,33 @@ angular.module("serverAccessService", ["ngResource"]) -.factory("serverAccess", function ( $resource) { - //TODO: obruce implémenter accès server +.factory("serverTaskAccess", function ( $resource) { // Encapsule l'acces au server - return $resource("rest/tasks/:Id",{Id: "@Id" }, + return $resource("rest/tasks/:taskId",{}, { query : {method:'GET', isArray:true}, - get : { - method: 'GET', + get : {method: 'GET',isArray: false}, + update: {method: "PUT"}, + delete: { method: 'DELETE' }, + create: { method: 'POST' } - isArray: false - }, - update: {method: "PUT"} } ); } ); + +angular.module("serverTimeService", ["ngResource"]) +.factory("serverTimeAccess", function ( $resource) { + // Encapsule l'acces au server + return $resource("rest/tasks/:taskId/time",{}, + { + query : {method:'GET', isArray:true}, + get : {method: 'GET', isArray: false}, + update: {method: "PUT"}, + delete: { method: 'DELETE' }, + create: { method: 'POST' } + + + } + ); + } +);
participants (1)
-
obruce@users.chorem.org