r3008 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/storage java/org/chorem/jtimer/utils java/org/chorem/jtimer/web webapp/js webapp/partials
Author: obruce Date: 2014-06-27 11:46:09 +0200 (Fri, 27 Jun 2014) New Revision: 3008 Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3008 Log: controller et serveur : module de rapport Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.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/java/org/chorem/jtimer/web/RestApplication.java branches/ng-jtimer/src/main/webapp/js/controllers.js branches/ng-jtimer/src/main/webapp/partials/reportModal.html branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html 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-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-06-27 09:46:09 UTC (rev 3008) @@ -434,7 +434,7 @@ return times; } - public HashMap getReportByProject(Long startDate, Long endDate){ + public HashMap<String, ArrayList<ReportTask>> getReportByProject(Long startDate, Long endDate){ HashMap map = new HashMap(); PreparedStatement statement = null; Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.java =================================================================== --- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.java 2014-06-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.java 2014-06-27 09:46:09 UTC (rev 3008) @@ -39,17 +39,17 @@ } //un enfant - if(!t.getParent().equals("")){ + if(!t.getParentId().equals("")){ log.info("enfant"); //On ajoute l'enfant à la map ArrayList tmp = new ArrayList(); - if(childMap.get(t.parent) != null){ - tmp=childMap.get(t.parent); + if(childMap.get(t.parentId) != null){ + tmp=childMap.get(t.parentId); } tmp.add(t); - childMap.put(t.parent, tmp); + childMap.put(t.parentId, tmp); iter.remove(); } } @@ -58,7 +58,7 @@ while(iter.hasNext()) { ReportTask t = (ReportTask)iter.next(); - if(t.getTime().isNotTimed()){ + if(t.getSelftime() == 0){ iter.remove(); } } 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-06-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-06-27 09:46:09 UTC (rev 3008) @@ -1,5 +1,9 @@ package org.chorem.jtimer.utils; +import com.google.gson.annotations.Expose; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.util.ArrayList; /** @@ -11,28 +15,34 @@ */ public class ReportTask { + protected static final Log log = LogFactory.getLog(ReportTask.class); + /** Le nom de la tache*/ - protected String name; - protected String taskId; - protected String parent; - protected long time; - protected boolean isReported; + @Expose protected String name; + @Expose protected String taskId; + @Expose protected String parentId; - protected ArrayList subtasks; + protected ReportTask rtParent; //to be omitted in serialization + @Expose protected long selftime; + @Expose protected long childtime; + + @Expose protected ArrayList<ReportTask> subtasks; + /** * Constructeur * @param name le nom * @param taskId l'identifiant * @param parent l'identifiant du parent - * @param time le temps + * @param selftime le temps */ - public ReportTask(String name, String taskId, String parent, long time){ + public ReportTask(String name, String taskId, String parent, long selftime){ this.taskId = taskId; this.name = name; - this.parent = parent; - this.time = time; - this.isReported = false; + this.parentId = parent; + this.selftime = selftime; + this.childtime = 0; + this.rtParent = null; this.subtasks = new ArrayList(); } @@ -40,9 +50,34 @@ /** Ajout */ public void addChild(ReportTask t){ this.subtasks.add(t); - this.time+= t.getTime(); } + + /** + * Ajout de temps d'un enfant + */ + public void addChildTime(long t){ + + if(hasParent()) { + + rtParent.addChildTime(t); + } + this.childtime +=t; + } + + + /** + * Ajout de temps d'un enfant + */ + public void removeChildTime(long t){ + + if(hasParent()) { + + rtParent.removeChildTime(t); + } + this.childtime -=t; + } + /**Getter */ public String getTaskId() { @@ -53,30 +88,43 @@ return name; } - public String getParent() { - return parent; + public String getParentId() { + return parentId; } - public long getTime() { - return time; + + public ReportTask getRtParent() { + return rtParent; } - public boolean isReported() { - return isReported; + public void setRtParent(ReportTask reportTask) { + this.rtParent = reportTask; } - public void setReported(boolean isReported) { - this.isReported = isReported; + public boolean hasParent(){ return this.rtParent != null;} + + public long getSelftime() { + return selftime; } + public long getChildtime() { + return childtime; + } + + public ArrayList<ReportTask> getSubtasks() { + return subtasks; + } + + @Override public String toString() { return "ReportTask{" + "name='" + name + '\'' + ", taskId='" + taskId + '\'' + - ", parent='" + parent + '\'' + - ", time=" + time + - ", subtasks=" + subtasks.toString() + + ", parent='" + parentId + '\'' + + ", selftime=" + selftime + + ", childtime=" + childtime + + ", subtasks=" + subtasks + '}'; } } 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-06-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-06-27 09:46:09 UTC (rev 3008) @@ -1,6 +1,7 @@ package org.chorem.jtimer.web; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.storage.Storage; @@ -14,6 +15,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; /** * Created by olivia on 11/06/14. @@ -30,6 +32,7 @@ @Override protected void doInit() throws ResourceException { + storage = (Storage) getContext().getAttributes().get(Storage.class.getName()); } /** @@ -44,7 +47,7 @@ if(representation.isAvailable()) { String repr1 = representation.getText(); - Gson gson =new Gson(); + Gson gson = new Gson(); toReport = gson.fromJson(repr1, ArrayList.class); } @@ -72,19 +75,20 @@ //MustacheReport report = new MustacheReport(getContext()); //res = report.createByProjectMustache(type, startDate, endDate,reprArray); - Gson gson = new Gson(); - HashMap storedTask = storage.getReportByProject(startDate, endDate); - ArrayList res = new ArrayList(); + //On ne recupere que les elements interessants + Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + HashMap<String, ArrayList<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate); + ArrayList<ReportTask> res = new ArrayList<>(); //l'arraylist de resultat + //On recree l'arbre - for(ReportTask rt: (ArrayList<ReportTask>)storedTask.get("")){ - reccursivSortTask(storedTask, rt, res ); + for(ReportTask rt: storedTask.get("")){ + recursivSortTask(storedTask, rt, res ); } //On enleve les éléments non voulus + recursiveRemoveUnreportedTask(res,toReport); - - String json = gson.toJson(res, ArrayList.class); return new StringRepresentation(json, MediaType.TEXT_HTML); @@ -96,22 +100,69 @@ * @param rt the current task * @param res the tree array */ - private void reccursivSortTask(HashMap map, ReportTask rt, ArrayList res ){ + private void recursivSortTask(HashMap<String,ArrayList<ReportTask>> map, ReportTask rt, ArrayList<ReportTask> res ){ if(map.containsKey(rt.getTaskId())) { - for (ReportTask child : (ArrayList<ReportTask>) map.get(rt.getTaskId())) { - reccursivSortTask(map, child, res); + for (ReportTask child : map.get(rt.getTaskId())) { + child.setRtParent(rt); + log.info(child.getName() + " setparent " +rt.getName()); - if(child.getTime() != (long) 0){ + recursivSortTask(map, child, res); + + if(child.getSelftime()!= (long) 0 || child.getChildtime()!= (long) 0){ + log.info(rt.getName() + " enfante car != 0 : " +child.getName()); rt.addChild(child); + rt.addChildTime(child.getSelftime()); } - } } - if(rt.getParent() == "" && rt.getTime() != 0){ + if(rt.getParentId().equals("") && rt.getChildtime() != 0){ res.add(rt); } } + + /** + * Methode reccursive qui enleve les elements indesirables + * @param toCheck la liste a verifiee + * @param wanted la liste d'identifiant voulu + */ + private void recursiveRemoveUnreportedTask(ArrayList<ReportTask> toCheck, ArrayList<String> wanted){ + Iterator<ReportTask> iter = toCheck.iterator(); + + while(iter.hasNext()) { + ReportTask repT= iter.next(); + + if(!repT.getSubtasks().isEmpty()) { + recursiveRemoveUnreportedTask(repT.getSubtasks(), wanted); + } + if(!idIsInArray(repT.getTaskId(),wanted)){ + repT.getRtParent().removeChildTime(repT.getSelftime()); + iter.remove(); + } + } + + } + + /** + * Methode qui détermine si l'id est dans la collection + * @param id l'identifiant a trouver + * @param list la list a parcourir + * @return un booleen de presence + */ + private boolean idIsInArray(String id,ArrayList<String> list){ + boolean res = false; + + Iterator iter = list.iterator(); + while(iter.hasNext()) { + if (id.equals(iter.next())) { + res =true; + iter.remove(); + break; + } + } + + return res; + } } 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-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/RestApplication.java 2014-06-27 09:46:09 UTC (rev 3008) @@ -94,7 +94,6 @@ protected class TodoTask extends java.util.TimerTask{ @Override public void run() { - log.info("Passage dans le run"); if(connected){ Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-06-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-06-27 09:46:09 UTC (rev 3008) @@ -1003,9 +1003,12 @@ $scope.htmlReport = data; angular.forEach(data, function(d){ - console.log(d); - $scope.reportedTask.push({name : d.name, time : d.time}) - }) + $scope.reportedTask.push({ + name : d.name, + selftime : d.selftime, + childtime : d.childtime, + subtasks : d.subtasks}) + }); } ); } @@ -1031,24 +1034,22 @@ /**Check all checkbox*/ $scope.checkAll= function(){ - angular.forEach(tree.children, function(child){ - recurseChildEncapsulated(child,encapFonc(child, true)) - }); + recurseChildEncapsulated(tree, true); + }; /**Uncheck all checkbox*/ $scope.uncheckAll= function(){ - angular.forEach(tree.children, function(child){ - recurseChildEncapsulated(child,encapFonc(child, false)) - }); + recurseChildEncapsulated(tree,false); }; /** * Reccursion sur l'arbre */ - var recurseChildEncapsulated = function(child, encapsulated){ + var recurseChildEncapsulated = function(child, bool){ angular.forEach(child.children, function(childnode){ - recurseChildEncapsulated(childnode, encapFonc(child, true)) + recurseChildEncapsulated(childnode, bool) + encapFonc(childnode, bool) }); } Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html =================================================================== --- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-06-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-06-27 09:46:09 UTC (rev 3008) @@ -7,7 +7,7 @@ <div > <!-- Datepicker div --> - <div style="border:1px solid black; display : inline-block;vertical-align: top;margin-left:2px;"> + <div style="border:1px solid black; display : inline-block;vertical-align: top;margin-left:1px;margin-right:1px;"> <h4><u>Option :</u></h4> De : <div style="margin-left:2px;" ng-controller="ReportDatePickerCtrl" class="row"> @@ -22,7 +22,7 @@ </div> A : - <div style="margin-left:2px;" class="row" ng-controller="ReportDatePickerCtrl"> + <div style="margin-left:1px;margin-right:1px;" class="row" ng-controller="ReportDatePickerCtrl"> <div class="col-md-6"> <p class="input-group medium_input"> <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.endDate" is-open="opened" min-date="obj.startDate" max-date="maxDate" ng-required="true" close-text="Close" /> @@ -77,15 +77,22 @@ <div style="display : inline-block; vertical-align: top; width : 350px"> <alert type="info" > - <span> - <h4>Projet :</h4> - <div ng-repeat="task in reportedTask"> - {{task.name}} : {{task.time|time}} - <div ng-repeat="subtask in task.subtasks" ng-include="reportNestedTask.html"> - {{subtask.name}} : {{subtask.time|time}} + <span ng-show="!reportTask.length" > + <h4><b>Génération du rapport :</b></h4> + <div ng-repeat="task in reportedTask" > + <b>Projet : {{task.name}} </b> + + <div style="margin-left : 10px" ng-repeat="subtask in task.subtasks" ng-include="'./partials/reportNestedTask.html'"> + </div> + Temps total : {{task.childtime|time}} + <hr/> </div> + </span > + + <span ng-show="reportedTask.length == 0" > + Pas de tâches sur cette période. </span> </alert> Modified: branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html =================================================================== --- branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html 2014-06-25 16:08:07 UTC (rev 3007) +++ branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html 2014-06-27 09:46:09 UTC (rev 3008) @@ -1,5 +1,8 @@ -<div ng-repeat="task in subtasks"> - {{task.name}} : {{task.time|time}} - <div ng-repeat="subtask in subtasks" ng-include="reportNestedTask.html"></div> -</div> \ No newline at end of file +<div style="display : block" > + <div style="min-width : 100px; max-width : 110px; display : inline-block;">-{{subtask.name}}</div> + <div style="min-width : 100px; max-width : 150px; display : inline-block;" ng-show="subtask.selftime != 0">{{subtask.selftime|time}} </div> +</div> +<div style="margin-left : 10px" + ng-repeat="subtask in subtask.subtasks" ng-include="'./partials/reportNestedTask.html'"> +</div>
participants (1)
-
obruce@users.chorem.org