Author: obruce Date: 2014-07-18 17:37:03 +0200 (Fri, 18 Jul 2014) New Revision: 3017 Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3017 Log: conf, storage, resource: ajout requete pour le path Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java branches/ng-jtimer/src/main/resources/jtimer-default.properties Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-18 07:52:13 UTC (rev 3016) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-18 15:37:03 UTC (rev 3017) @@ -123,6 +123,10 @@ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_PATH.getKey()); } + public String getStorageQuerySelectParentTask(){ + return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_PARENT_TASK.getKey()); + } + public String getStorageQuerySelectTimedTask(){ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_TIMED_TASK.getKey()); } Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-18 07:52:13 UTC (rev 3016) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-18 15:37:03 UTC (rev 3017) @@ -112,6 +112,12 @@ "", String.class ), + JTIMER_STORAGE_SELECT_PARENT_TASK( + "jtimer.storage.select.parent.task", + "requête qui va récupérer les taches parentes en fonction de la presence de son identifiant dans un array", + "", + String.class + ), JTIMER_STORAGE_SELECT_TIMED_TASK( "jtimer.storage.select.timed.task", "requête de selection des tâches minutées", 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-07-18 07:52:13 UTC (rev 3016) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-18 15:37:03 UTC (rev 3017) @@ -20,8 +20,10 @@ import java.util.Arrays; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; /** * Implementation du stockage des taches en base de données basée sur h2. @@ -376,8 +378,6 @@ PreparedStatement statement = null; PreparedStatement statement2 = null; - log.warn("plouplou"); - try { statement = connection.prepareStatement(config.getStorageQuerySelectTimedTask()); statement.setLong(1, date); @@ -392,9 +392,8 @@ task.setParent(rs.getString("parent")); task.setRemoved(rs.getLong("removed")); - log.info("recherche " + rs.getObject("path")); - task.setPath((String[]) rs.getObject("path")); + task.setTodayTime(0); task.setCreationDate(new java.util.Date(rs.getLong("creationDate"))); task.setModificationDate(new java.util.Date(rs.getLong("modificationDate"))); @@ -543,8 +542,9 @@ * @param endDate la borne superieur * @return un hashmap {key: parentId, value: array of task} */ - public HashMap<String, ArrayList<ReportTask>> getReportByProject(Long startDate, Long endDate){ + public HashMap<String, Set<ReportTask>> getReportByProject(Long startDate, Long endDate){ + Set<String> parentSet = new HashSet<String>(); //Set des parents pour eviter les doublons HashMap map = new HashMap(); PreparedStatement statement = null; PreparedStatement statement2 = null; @@ -562,10 +562,12 @@ rs.getString("parent"), rs.getLong("totalduration")); + parentSet.add(rs.getString("parent")); + //Arraylist of reportask for the map - ArrayList tmp = new ArrayList(); + Set tmp = new HashSet(); if(map.containsKey(rs.getString("parent"))){ - tmp = (ArrayList) map.get(rs.getString("parent")); + tmp = (HashSet) map.get(rs.getString("parent")); } tmp.add(task); @@ -573,8 +575,9 @@ map.put(rs.getString("parent"), tmp); } - // not timed tasks - statement2 = connection.prepareStatement(config.getStorageQuerySelectReportRootTask()); + // parent tasks + statement2 = connection.prepareStatement(config.getStorageQuerySelectParentTask()); + statement2.setObject(1, parentSet.toArray(new String[parentSet.size()])); rs = statement2.executeQuery(); while(rs.next()){ @@ -584,9 +587,9 @@ rs.getString("parent"), (long) 0); - ArrayList tmp = new ArrayList(); - if(map.containsKey(rs.getString("parent"))){ - tmp = (ArrayList) map.get(rs.getString("parent")); + Set tmp = new HashSet(); + if(map.containsKey(rs.getString("parent") )){ + tmp = (HashSet) map.get(rs.getString("parent")); } tmp.add(task); map.put(rs.getString("parent"), tmp); @@ -610,9 +613,9 @@ * @param endDate la borne superieur * @return un hashmap {key: parentId, value: array of task} */ - public HashMap<Integer,HashMap<String, ArrayList<ReportTask>>> getReportByWeek(Long startDate, Long endDate){ + public HashMap<Integer,HashMap<String, Set<ReportTask>>> getReportByWeek(Long startDate, Long endDate){ - HashMap<Integer,HashMap<String, ArrayList<ReportTask>>> res = new HashMap<>(); + HashMap<Integer,HashMap<String, Set<ReportTask>>> res = new HashMap<>(); @@ -630,7 +633,7 @@ int week = rs.getInt("week"); if(res.get(week)==null) { - res.put(week, new HashMap<String, ArrayList<ReportTask>>()); + res.put(week, new HashMap<String, Set<ReportTask>>()); } ReportTask task = new ReportTask(rs.getString("name"), @@ -638,9 +641,9 @@ rs.getString("parent"), rs.getLong("totalduration")); - ArrayList tmp = new ArrayList(); + Set tmp = new HashSet(); if (res.get(week).containsKey(rs.getString("parent"))) { - tmp = (ArrayList)res.get(week).get(rs.getString("parent")); + tmp = (Set)res.get(week).get(rs.getString("parent")); } tmp.add(task); res.get(week).put(rs.getString("parent"), tmp); @@ -650,7 +653,7 @@ // not timed tasks statement2 = connection.prepareStatement(config.getStorageQuerySelectReportRootTask()); - ArrayList notTimedArray = new ArrayList(); + Set notTimedArray = new HashSet(); rs = statement2.executeQuery(); @@ -668,9 +671,9 @@ while(iter.hasNext()) { Integer key = (Integer)iter.next(); - ArrayList cloneNotTimedArray=new ArrayList(); + Set cloneNotTimedArray=new HashSet(); - for(ReportTask toClone:(ArrayList<ReportTask>)notTimedArray){ + for(ReportTask toClone:(Set<ReportTask>)notTimedArray){ cloneNotTimedArray.add(new ReportTask(toClone)); } res.get(key).put("", cloneNotTimedArray); @@ -762,8 +765,8 @@ } /** - * - * @param taskId + * Methoque qui met à jour le path d'une tache + * @param taskId l'identifiant de la tache */ public void updateTaskPath(String taskId, String[] array){ PreparedStatement statement = null; Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-18 07:52:13 UTC (rev 3016) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-18 15:37:03 UTC (rev 3017) @@ -130,6 +130,9 @@ return subtasks; } + public void setSelfTime(long selfTime) { + this.selftime = selfTime; + } @Override public String toString() { @@ -143,4 +146,14 @@ '}'; } + @Override + public int hashCode() { + return super.hashCode(); + } + + @Override + public boolean equals(Object obj) { + + return this.taskId == ((ReportTask)obj).getTaskId(); + } } Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-18 07:52:13 UTC (rev 3016) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-18 15:37:03 UTC (rev 3017) @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.Set; /** * Created by olivia on 11/06/14. @@ -78,7 +79,7 @@ if(type.equals("Project")) { - HashMap<String, ArrayList<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate); + HashMap<String, Set<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate); ArrayList<ReportTask> res = new ArrayList<>(); //l'arraylist de resultat log.warn("Project " +storedTask.toString()); @@ -100,7 +101,7 @@ } if(type.equals("Week")) { - HashMap<Integer, HashMap<String, ArrayList<ReportTask>>> storedTask = storage.getReportByWeek(startDate, endDate); + HashMap<Integer, HashMap<String, Set<ReportTask>>> storedTask = storage.getReportByWeek(startDate, endDate); log.warn("Week " +storedTask.toString()); HashMap<Integer, ArrayList<ReportTask>> res = new HashMap<>(); @@ -132,7 +133,7 @@ * @param rt the current task * @param res the tree array */ - private void recursivSortTask(HashMap<String,ArrayList<ReportTask>> map, ReportTask rt, ArrayList<ReportTask> res ){ + private void recursivSortTask(HashMap<String,Set<ReportTask>> map, ReportTask rt, ArrayList<ReportTask> res ){ if(map.containsKey(rt.getTaskId())) { for (ReportTask child : map.get(rt.getTaskId())) { @@ -164,7 +165,6 @@ //iterator sur l'arraylist a checker Iterator<ReportTask> iter = toCheck.iterator(); - // while(iter.hasNext()) { //Le noeud courant ReportTask repT= iter.next(); @@ -175,12 +175,17 @@ recursiveRemoveUnreportedTask(repT.getSubtasks(), wanted); } //On vérifie si dans la liste des elements voulus - if(!idIsInArray(repT.getTaskId(),wanted)){ + if(!idIsInArray(repT.getTaskId(),wanted) ){ if(repT.hasParent()) { repT.getRtParent().removeChildTime(repT.getSelftime()); + //repT.setSelfTime((long)0); + } - iter.remove(); + if(repT.getChildtime() == 0){ + iter.remove(); + } + } } @@ -198,7 +203,7 @@ Iterator iter = list.iterator(); while(iter.hasNext()) { if (id.equals(iter.next())) { - res =true; + res = true; iter.remove(); break; } Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties =================================================================== --- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-18 07:52:13 UTC (rev 3016) +++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-18 15:37:03 UTC (rev 3017) @@ -74,6 +74,9 @@ FROM task \ WHERE (taskId not in (SELECT taskid FROM tasktime)) \ AND task.modificationDate > ? +jtimer.storage.select.parent.task= SELECT DISTINCT * \ + FROM task \ + WHERE ARRAY_CONTAINS(?, taskId) jtimer.storage.select.time.withdate=SELECT TA.taskId AS mytask, TI.* \ FROM task TA, tasktime TI \ WHERE TA.taskId = TI.taskid AND TI.modificationDate > ?