r2927 - in branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer: . entities storage web
Author: echatellier Date: 2013-08-22 22:44:57 +0200 (Thu, 22 Aug 2013) New Revision: 2927 Url: http://chorem.org/projects/jtimer/repository/revisions/2927 Log: Ajout de services restlet pour la syncho app html <> serveur Removed: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerProject.java branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/services/ Modified: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerTask.java branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/storage/Storage.java branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/RestApplication.java branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TaskResource.java branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TasksResource.java Deleted: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerProject.java =================================================================== --- branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerProject.java 2013-08-22 19:16:31 UTC (rev 2926) +++ branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerProject.java 2013-08-22 20:44:57 UTC (rev 2927) @@ -1,56 +0,0 @@ -/* - * #%L - * jTimer - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2013 CodeLutin, Chatellier Eric - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -package org.chorem.jtimer.entities; - -/** - * Represent a project. - * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class TimerProject extends TimerTask { - - /** serialVersionUID. */ - private static final long serialVersionUID = -8953488997256237790L; - - /** - * Constructor. - */ - public TimerProject() { - } - - /** - * Constructor with name. - * - * @param name project name - */ - public TimerProject(String name) { - super(name); - } -} Modified: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerTask.java =================================================================== --- branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2013-08-22 19:16:31 UTC (rev 2926) +++ branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2013-08-22 20:44:57 UTC (rev 2927) @@ -57,6 +57,12 @@ /** Closed task. */ protected boolean closed; + /** Today time. */ + protected long todayTime; + + /** Total time. */ + protected long totalTime; + /** * Constructor. */ @@ -70,8 +76,9 @@ * * @param name task name */ - public TimerTask(String name) { + public TimerTask(long number, String name) { this(); + this.number = number; this.name = name; } @@ -154,4 +161,20 @@ public void setClosed(boolean closed) { this.closed = closed; } + + public long getTodayTime() { + return todayTime; + } + + public void setTodayTime(long todayTime) { + this.todayTime = todayTime; + } + + public long getTotalTime() { + return totalTime; + } + + public void setTotalTime(long totalTime) { + this.totalTime = totalTime; + } } \ No newline at end of file Modified: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/storage/Storage.java =================================================================== --- branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/storage/Storage.java 2013-08-22 19:16:31 UTC (rev 2926) +++ branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/storage/Storage.java 2013-08-22 20:44:57 UTC (rev 2927) @@ -12,7 +12,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.chorem.jtimer.entities.TimerProject; import org.chorem.jtimer.entities.TimerTask; /** @@ -146,8 +145,9 @@ statement.executeUpdate("CREATE TABLE " + TABLE_TIME + "(taskid LONG NOT NULL REFERENCES " + TABLE_TASK + "(id)," + " date DATE," + + " uuid varchar(255) unique," + " duration LONG," + - " PRIMARY KEY (taskid, date))"); + " PRIMARY KEY (taskid, date, uuid))"); } catch (SQLException ex) { throw new StorageException("Can't create schema", ex); } finally { @@ -161,90 +161,13 @@ * * @return all projects */ - public int getProjectsCount() { + public int getTasksCount() { int result = 0; - Statement statement = null; - try { - statement = connection.createStatement(); - ResultSet rs = statement.executeQuery("SELECT count(*) FROM " + TABLE_TASK + - " WHERE parent = 0"); - if (rs.next()) { - result = rs.getInt(1); - } - } catch (SQLException ex) { - throw new StorageException("Can't get project count", ex); - } finally { - closeStatement(statement); - } - return result; - } - - /** - * Find all project. (task with no parent, parent = 0). - * - * @return all projects - */ - public List<TimerProject> getProjects() { - List<TimerProject> projects = new ArrayList<TimerProject>(); PreparedStatement statement = null; try { - statement = connection.prepareStatement("SELECT * FROM " + TABLE_TASK + - " WHERE parent = 0 ORDER BY id"); + statement = connection.prepareStatement("SELECT count(*) FROM " + TABLE_TASK); ResultSet rs = statement.executeQuery(); - while (rs.next()) { - TimerProject project = new TimerProject(); - project.setNumber(rs.getInt("id")); - project.setName(rs.getString("name")); - projects.add(project); - } - } catch (SQLException ex) { - throw new StorageException("Can't get project", ex); - } finally { - closeStatement(statement); - } - return projects; - } - - /** - * Find all project. (task with no parent, parent = 0). - * - * @return all projects - */ - public TimerProject getProject(int offset) { - TimerProject project = null; - PreparedStatement statement = null; - try { - statement = connection.prepareStatement("SELECT * FROM " + TABLE_TASK + - " WHERE parent = 0 ORDER BY id LIMIT 1 OFFSET ?"); - statement.setInt(1, offset); - ResultSet rs = statement.executeQuery(); if (rs.next()) { - project = new TimerProject(); - project.setNumber(rs.getInt("id")); - project.setName(rs.getString("name")); - } - } catch (SQLException ex) { - throw new StorageException("Can't get project", ex); - } finally { - closeStatement(statement); - } - return project; - } - - /** - * Find all project. (task with no parent, parent = 0). - * - * @return all projects - */ - public int getTasksCount(TimerTask parent) { - int result = 0; - PreparedStatement statement = null; - try { - statement = connection.prepareStatement("SELECT count(*) FROM " + TABLE_TASK + - " WHERE parent = ?"); - statement.setLong(1, parent.getNumber()); - ResultSet rs = statement.executeQuery(); - if (rs.next()) { result = rs.getInt(1); } } catch (SQLException ex) { @@ -254,81 +177,47 @@ } return result; } - - public TimerTask getTasks(TimerTask parent, int offset) { - TimerTask task = null; + + public List<TimerTask> getTasks() { + List<TimerTask> tasks = new ArrayList<>(); PreparedStatement statement = null; + PreparedStatement statement2 = null; try { - statement = connection.prepareStatement("SELECT * FROM " + TABLE_TASK + - " WHERE parent = ? ORDER BY id LIMIT 1 OFFSET ?"); - statement.setLong(1, parent.getNumber()); - statement.setLong(2, offset); + statement = connection.prepareStatement("SELECT TA.*, sum(TI.duration) AS totalduration FROM " + + TABLE_TASK + " TA, " + TABLE_TIME + " TI" + + " WHERE TA.id = TI.taskid" + + " GROUP BY TA.id"); ResultSet rs = statement.executeQuery(); while (rs.next()) { - task = new TimerTask(); + TimerTask task = new TimerTask(); task.setNumber(rs.getInt("id")); task.setName(rs.getString("name")); + task.setTodayTime(0); + task.setTotalTime(rs.getLong("totalduration")); + tasks.add(task); } - } catch (SQLException ex) { - throw new StorageException("Can't get task", ex); - } finally { - closeStatement(statement); - } - return task; - } - - /** - * Find sub tasks.. - * - * @param parent parent task - * @return all sub tasks - */ - public List<TimerTask> getTasks(TimerTask parent) { - List<TimerTask> tasks = new ArrayList<TimerTask>(); - PreparedStatement statement = null; - try { - statement = connection.prepareStatement("SELECT * FROM " + TABLE_TASK + - " WHERE parent = ? ORDER BY id"); - statement.setLong(1, parent.getNumber()); - ResultSet rs = statement.executeQuery(); + + // not timed tasks + statement2 = connection.prepareStatement("SELECT * FROM " + TABLE_TASK + + " WHERE id not in (SELECT taskid FROM " + TABLE_TIME + ")"); + rs = statement2.executeQuery(); while (rs.next()) { TimerTask task = new TimerTask(); task.setNumber(rs.getInt("id")); task.setName(rs.getString("name")); + task.setTodayTime(0); + task.setTotalTime(0); tasks.add(task); } } catch (SQLException ex) { throw new StorageException("Can't get task", ex); } finally { closeStatement(statement); + closeStatement(statement2); } return tasks; } - public void addProject(TimerProject project) { - PreparedStatement statement = null; - try { - statement = connection.prepareStatement("INSERT INTO " + - TABLE_TASK + "(name, parent, hidden, note)" + - " VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); - statement.setString(1, project.getName()); - statement.setLong(2, 0); - statement.setBoolean(3, project.isClosed()); - statement.setString(4, null /*project.getNote()*/); - statement.executeUpdate(); - - // get generated id - ResultSet rs = statement.getGeneratedKeys(); - if (rs.next()) { - project.setNumber(rs.getInt(1)); - } - } catch (SQLException ex) { - throw new StorageException("Can't add project", ex); - } finally { - closeStatement(statement); - } - } - public void addTask(TimerTask task) { PreparedStatement statement = null; try { @@ -353,10 +242,6 @@ } } - public void modifyProject(TimerProject project) { - modifyTask(project); - } - public void modifyTask(TimerTask task) { PreparedStatement statement = null; try { @@ -380,39 +265,23 @@ } } - /*protected void saveTaskTimes(TimerTask task) throws SQLException { - - // delete all + public void addTaskTime(TimerTask task, Date date, String uuid, long duration) { PreparedStatement statement = null; try { - statement = connection.prepareStatement("DELETE " + TABLE_TIME + - " WHERE TASKID = ?"); + statement = connection.prepareStatement("INSERT INTO " + TABLE_TIME + + "(taskid, date, uuid, duration)" + + " VALUES(?, ?, ?, ?)"); + statement.setLong(1, task.getNumber()); + statement.setDate(2, new java.sql.Date(date.getTime())); + statement.setString(3, uuid); + statement.setLong(4, duration); statement.executeUpdate(); + } catch (SQLException ex) { + throw new StorageException("Can't add task time", ex); } finally { closeStatement(statement); } - - // add new - try { - statement = connection.prepareStatement("INSERT INTO " + TABLE_TIME + - "(taskid, date, duration)" + - " VALUES(?, ?, ?)"); - SortedMap<Date, Long> taskTimes = task.getAllDaysAndTimes(); - for (Map.Entry<Date, Long> taskTime : taskTimes.entrySet()) { - statement.setLong(1, task.getNumber()); - statement.setDate(2, new java.sql.Date(taskTime.getKey().getTime())); - statement.setLong(3, taskTime.getValue()); - - statement.executeUpdate(); - } - } finally { - closeStatement(statement); - } - }*/ - - public void deleteProject(TimerProject project) { - deleteTask(project); } public void deleteTask(TimerTask task) { @@ -432,13 +301,4 @@ public void setAnnotation(TimerTask task, Date date, String annotation) { } - - /*public void setTaskTime(TimerTask task, Date date, Long time) { - try { - saveTaskTimes(task); - } catch (SQLException ex) { - throw new StorageException("Can't set task time", ex); - } - }*/ - } \ No newline at end of file Modified: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/RestApplication.java =================================================================== --- branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/RestApplication.java 2013-08-22 19:16:31 UTC (rev 2926) +++ branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/RestApplication.java 2013-08-22 20:44:57 UTC (rev 2927) @@ -1,6 +1,12 @@ package org.chorem.jtimer.web; +import java.util.Date; +import java.util.UUID; + +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.routing.Router; @@ -13,14 +19,39 @@ public synchronized Restlet createInboundRoot() { // Create a router Restlet that routes each call to a // new instance of ProjectsResource. - Router router = new Router(getContext()); + Context context = getContext(); + initContext(context); + Router router = new Router(context); // Defines only one route router.attach("/tasks", TasksResource.class); - router.attach("/task/{task}", TaskResource.class); - router.attach("/task/{task}/time", TimeResource.class); + router.attach("/tasks/{taskId}", TaskResource.class); + router.attach("/tasks/{taskId}/time", TimeResource.class); return router; } + protected void initContext(Context context) { + Storage storage = new Storage(); + + if (storage.getTasksCount() == 0) { + + TimerTask jTimerProject = new TimerTask(1, "jTimer"); + jTimerProject.setNumber(1); + TimerTask jTimerTask1 = new TimerTask(2, "WebService"); + jTimerTask1.setParent(jTimerProject.getNumber()); + storage.addTask(jTimerProject); + storage.addTask(jTimerTask1); + storage.addTaskTime(jTimerTask1, new Date(), UUID.randomUUID().toString(), 4567); + storage.addTaskTime(jTimerTask1, new Date(), UUID.randomUUID().toString(), 20); + + storage.addTask(new TimerTask(3, "Chorem")); + storage.addTask(new TimerTask(4, "Wikitty")); + storage.addTask(new TimerTask(5, "Nuiton-js")); + storage.addTask(new TimerTask(6, "Angular")); + storage.addTask(new TimerTask(7, "Isis-Fish")); + } + + context.getAttributes().put(Storage.class.getName(), storage); + } } \ No newline at end of file Modified: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TaskResource.java =================================================================== --- branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TaskResource.java 2013-08-22 19:16:31 UTC (rev 2926) +++ branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TaskResource.java 2013-08-22 20:44:57 UTC (rev 2927) @@ -1,5 +1,6 @@ package org.chorem.jtimer.web; +import org.chorem.jtimer.storage.Storage; import org.restlet.data.MediaType; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; @@ -9,13 +10,16 @@ public class TaskResource extends ServerResource { + protected Storage storage; + @Override protected void doInit() throws ResourceException { - + storage = (Storage)getContext().getAttributes().get(Storage.class.getName()); } @Get("json") public Representation getTask() { - return new StringRepresentation("{}", MediaType.APPLICATION_JSON); + String taskId = (String)getRequest().getAttributes().get("taskId"); + return new StringRepresentation("{args:" + taskId + "}", MediaType.APPLICATION_JSON); } } Modified: branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TasksResource.java =================================================================== --- branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TasksResource.java 2013-08-22 19:16:31 UTC (rev 2926) +++ branches/ng-jtimer/jtimer-server/src/main/java/org/chorem/jtimer/web/TasksResource.java 2013-08-22 20:44:57 UTC (rev 2927) @@ -1,32 +1,28 @@ package org.chorem.jtimer.web; -import org.chorem.jtimer.entities.TimerProject; import org.chorem.jtimer.storage.Storage; -import org.restlet.ext.jackson.JacksonRepresentation; +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 com.google.gson.Gson; + public class TasksResource extends ServerResource { protected Storage storage; - public TasksResource() { - storage = new Storage(); - - if (storage.getProjectsCount() == 0) { - storage.addProject(new TimerProject("jTimer")); - storage.addProject(new TimerProject("Chorem")); - storage.addProject(new TimerProject("Wikitty")); - storage.addProject(new TimerProject("Nuiton-js")); - storage.addProject(new TimerProject("Angular")); - storage.addProject(new TimerProject("Isis-Fish")); - } + @Override + protected void doInit() throws ResourceException { + storage = (Storage)getContext().getAttributes().get(Storage.class.getName()); } @Get("json") public Representation getTasks() { - Representation jsonRep = new JacksonRepresentation<>(storage.getProjects()); - return jsonRep; + Gson gson = new Gson(); + String json = gson.toJson(storage.getTasks()); + return new StringRepresentation(json, MediaType.APPLICATION_JSON); } }
participants (1)
-
echatellier@users.chorem.org