Vanha 25.04.12, 16:06   #1 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Java-ohjelmoitni apua kaivataan

Miten lasken Worklogit yhteen joilla on sama pvm?

Koodi:
package com.i4ware.plugin.timesheet;

import java.io.IOException;

import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager;
import org.ofbiz.core.entity.DelegatorInterface;
import org.ofbiz.core.entity.EntityExpr;
import org.ofbiz.core.entity.EntityOperator;
import org.ofbiz.core.entity.GenericEntityException;
import org.ofbiz.core.entity.GenericValue;
import org.ofbiz.core.util.UtilMisc;
import org.apache.commons.lang.StringEscapeUtils;
import com.atlassian.crowd.embedded.api.User;
//import com.atlassian.jira.ComponentManager;

import com.atlassian.jira.issue.worklog.Worklog;
import com.atlassian.jira.issue.worklog.WorklogManager;
import com.atlassian.jira.issue.worklog.WorklogImpl;
import com.i4ware.plugin.util.WorklogUtil;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.atlassian.jira.util.json.JSONObject;
import com.atlassian.jira.util.json.JSONException;
import com.atlassian.jira.util.json.JSONArray;

import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.TreeMap;
import java.util.TreeSet;
import java.lang.Long;
import java.util.Collection;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.lang.Class;

public class LoadServlet extends HttpServlet
{
    
    /** value is made for JSON {"success":true} or {"success":false}. */
    private Boolean value;
    /** tasks Object. i.e tasks = arr; */
    private Object issues;
    /** limit int. i.e
     * limit = Integer.valueOf(request.getParameter("limit")).intValue();.
     */
    private int limit;
    /** pages int. variable of total count of rows i.e pages = numRows;. */
    private int pages;
    private String json;
    private JSONObject obj;
    
    private long count;
    
    private Project project;
    
    //private Issue issueIter;
    
    private IssueManager issueManager;
    private WorklogManager worklogManager;
    private Class cls;
    
    private String startDate;
    private String endDate;
    private ProjectManager projectManager;
    
    public LoadServlet(IssueManager issueManager, ProjectManager projectManager, WorklogManager worklogManager)
    {
        this.issueManager = issueManager;
        this.projectManager = projectManager;
        this.worklogManager = worklogManager;
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        resp.setContentType("application/json");        
        //resp.getWriter().write("");
        //resp.getWriter().close();
    
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        
        //issueManager.getIssueObjects();    
        
        /*EntityExpr startExpr = new EntityExpr("startdate",
                EntityOperator.GREATER_THAN_EQUAL_TO, new Timestamp(
                        startDate.getTime()));
        EntityExpr endExpr = new EntityExpr("startdate",
                EntityOperator.LESS_THAN, new Timestamp(endDate.getTime()));
        List<EntityExpr> entityExprs = UtilMisc.toList(startExpr, endExpr); */     
        
        /* HTTP Requests */
        //HttpServletRequest request = ServletActionContext.getRequest();
        
        String projectIdreq = req.getParameter("project");
        String monthReq = req.getParameter("month");
        String yearReq = req.getParameter("year");
        
        project = projectManager.getProjectObjByKey(projectIdreq);
        
        long projectId = project.getId();
        
        Calendar calendar = Calendar.getInstance(); 

        /*
         * Uncomment these if needed DateFormat dateFormat = new
         * SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date();
         */

        DateFormat monthFormat = new SimpleDateFormat("M");
        DateFormat yearFormat = new SimpleDateFormat("yyyy");
        DateFormat day = new SimpleDateFormat("EEE");
        DateFormat itter = new SimpleDateFormat("M-d-yyyy");

        /* gets a last date of current month */
        
        int m = Integer.valueOf(req.getParameter("month")).intValue();
        int y = Integer.valueOf(req.getParameter("year")).intValue();
        calendar.set(y, m - 1, 1);
        int lastDate = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        
        int ii = 1;
        int iii = 1;

        
        //getIssueIdsForProject
        
        /*String issue = "";
         * 
         * 
        */
        
        JSONArray arr = new JSONArray();
        int i = 1;
        
        try {
            
            Collection<Long> issueIds = issueManager.getIssueIdsForProject(projectId);
            
            List<Issue> issuesList = issueManager.getIssueObjects(issueIds);
            
            Iterator iterator = issuesList.iterator();
            
            /*for (Iterator<Issue> iterator = issuesList.iterator();
                iterator.hasNext();) {
                
                Issue issue = iterator.hasNext();
                
                //Issue issue = issueManager.getIssueObject("DEMO-1");
                
            }*/
            
            while (iterator.hasNext()) {
                //iterator.next();
                //System.out.println(iterator.next());
                
                Issue issueIter = issueManager.getIssueObject(iterator.next().toString());
                
                User assignee = issueIter.getAssigneeUser();
                
                List<Worklog> worklog = worklogManager.getByIssue(issueIter);
                
                Iterator<Worklog> worklogIterator = worklog.iterator();               
                
                try {    
                JSONObject obj = new JSONObject()
                        .put("id", issueIter.getKey())
                        .put("title",issueIter.getSummary())
                        .put("user_id",issueIter.getAssigneeId())
                        .put("assignee",assignee.getDisplayName())
                        /*.put("d1","8")
                        .put("d2","8")
                        .put("d3","8")
                        .put("d4","8")
                        .put("d5","8")
                        .put("d6","8")
                        .put("d7","8")
                        .put("d8","8")
                        .put("d9","8")
                        .put("d10","8")
                        .put("d11","8")
                        .put("d12","8")
                        .put("d13","8")
                        .put("d14","8")
                        .put("d15","8")
                        .put("d16","8")
                        .put("d17","8")
                        .put("d18","8")
                        .put("d19","8")
                        .put("d20","8")
                        .put("d21","8")
                        .put("d22","8")
                        .put("d23","8")
                        .put("d24","8")
                        .put("d25","8")
                        .put("d26","8")
                        .put("d27","8")
                        .put("d28","8")
                        .put("d29","8")
                        .put("d30","8")
                        .put("d31","8")*/
                        .put("initial_estimate",issueIter.getOriginalEstimate() / 3600)
                        .put("remaining_estimate",issueIter.getEstimate() / 3600);
                
                
                /*while (ii <= lastDate) {
                    
                    long issueId = issueIter.getId();
                    
                    GenericValue genericWorklog = issueManager.getIssue(issueId);
                    
                    //List<GenericValue> worklogs = ComponentManager.getComponent(DelegatorInterface.class);
                    
                    //Worklog worklogFor = new WorklogImpl(worklogManager, issueIter, gv.getLong("id"));
                    /*Timestamp startDateTS = genericWorklog.getTimestamp("startdate");
                    Timestamp createdTS = genericWorklog.getTimestamp("created");
                    Timestamp updatedTS = genericWorklog.getTimestamp("updated");
                    
                    Worklog worklogFor = new WorklogImpl(worklogManager, issueIter, genericWorklog.getLong("id"),
                            genericWorklog.getString("author"), genericWorklog.getString("body"),
                            startDateTS != null ? new Date(startDateTS.getTime()) : null,
                            genericWorklog.getString("grouplevel"), genericWorklog.getLong("rolelevel"),
                            genericWorklog.getLong("timeworked"), genericWorklog.getString("updateauthor"),
                            createdTS != null ? new Date(createdTS.getTime()) : null,
                            updatedTS != null ? new Date(updatedTS.getTime()) : null);
                    
                    //Worklog worklogFor = WorklogUtil.convertToWorklog(genericWorklog, worklogManager, issueManager);
                    
                    startDate = worklogFor.getStartDate();
                     long timeSpent = worklogFor.getTimeSpent();
                     //obj.put(startDate.toString(),timeSpent / 3600);*/
                    
                    //obj.put("d" + ii,"8");
                    
                    //ii++;
                //}
                
                //ii = 1;
                
                while (worklogIterator.hasNext()) {
                    
                       //System.out.println(worklogIterator.next().toString());
                    
                       Worklog itr = worklogIterator.next();   

                       startDate = itter.format(itr.getStartDate());
                       long timeSpent = itr.getTimeSpent();
                       
                       //if ()
                       
                       obj.put(startDate,timeSpent / 3600);
                
                }
                
                arr.put(obj);
                } catch (JSONException jerr) {
                jerr.printStackTrace(); 
                }
            
            i++;
                
            }
        
        } catch (GenericEntityException e) {
            e.printStackTrace(); 
        }
        
        issues = arr;
        pages = 1;
        value = Boolean.valueOf(!"false"
                .equalsIgnoreCase((String) "true"));
        
        
        try {
        
        json = new JSONObject()
        .put("tasks", issues)
        .put("totalCount", pages)
        .put("success", value)
        .toString();
        
        } catch (JSONException err) {
            err.printStackTrace();
        }
        
        /*try {
            List<GenericValue> worklogs = issueManager.getProjectIssues(project);
            
            Iterator iterator = worklogs.iterator();
            
            while (iterator.hasNext()) {
                iterator.next();
            }
            
        } catch (GenericEntityException e) {
            e.printStackTrace();            
        }*/
        
        
        /*List<GenericValue> worklogs = ComponentManager.getComponent(DelegatorInterface.class).findByAnd(
                "Worklog", entityExprs);*/
        
        resp.setContentType("application/json");        
        resp.getWriter().write(json);
        resp.getWriter().close();
    
    }
}
Eli kohdassa:

Koodi:
while (worklogIterator.hasNext()) {
                    
                       //System.out.println(worklogIterator.next().toString());
                    
                       Worklog itr = worklogIterator.next();   

                       startDate = itter.format(itr.getStartDate());
                       long timeSpent = itr.getTimeSpent();
                       
                       //if ()
                       
                       obj.put(startDate,timeSpent / 3600);
                
                }
  Vastaa lainaten
Vanha 25.04.12, 16:26   #2 (linkki)
 
Rekisteröitynyt: 06/2005
Viestejä: 45
Ihan noin katsomatta koodia (en jaksa ), itse tekisin tällä periaatteella. Laske jokaisen päivämäärän summa hashtauluun, jossa on avaimena tuo päivämäärä.

eli:
1) Käyt läpi jokaisen worklogin (kuten olet tehnyt), otat sieltä sen arvon jonka haluat "laskea yhteen"
2) katsot päivämäärän
3) katsot summa- hashtaulusta saman päivämäärän arvon
4a) jos arvo on nolla luot uuden avaimen
4b) jos arvo <>0 lisäät tuohon summaan
5) ja (molempien kohdalla) lopuksi tallennat hashtauluun

Sitten käytät tuota summataulua missä ikinä nyt haluatkaan.
  Vastaa lainaten
Vanha 25.04.12, 16:46   #3 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja ZeroGravity Näytä viesti
Ihan noin katsomatta koodia (en jaksa ), itse tekisin tällä periaatteella. Laske jokaisen päivämäärän summa hashtauluun, jossa on avaimena tuo päivämäärä.

eli:
1) Käyt läpi jokaisen worklogin (kuten olet tehnyt), otat sieltä sen arvon jonka haluat "laskea yhteen"
2) katsot päivämäärän
3) katsot summa- hashtaulusta saman päivämäärän arvon
4a) jos arvo on nolla luot uuden avaimen
4b) jos arvo <>0 lisäät tuohon summaan
5) ja (molempien kohdalla) lopuksi tallennat hashtauluun

Sitten käytät tuota summataulua missä ikinä nyt haluatkaan.
En ymmärrä tästä mitään
  Vastaa lainaten
Vanha 25.04.12, 20:36   #4 (linkki)
 
Rekisteröitynyt: 01/2002
Viestejä: 2182
Siis mitä sä oikeasti yrität tehdä?

Eikö worklogit ole kannassa? Tee joku count ja grouppaa päivän mukaan jos haluat vain tietää montako oli päivässä...
  Vastaa lainaten
Vanha 25.04.12, 21:06   #5 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja dropadrop Näytä viesti
Siis mitä sä oikeasti yrität tehdä?

Eikö worklogit ole kannassa? Tee joku count ja grouppaa päivän mukaan jos haluat vain tietää montako oli päivässä...
Hei, hommaa ei voi tehdä SQL-lauseilla suoraan kantaan, koska ohjelma voi mennä rikki.. siis pitää käyttä JIRA API:a
  Vastaa lainaten
Vanha 25.04.12, 22:18   #6 (linkki)
esn
 
Rekisteröitynyt: 07/2009
Viestejä: 154
Lainaus:
Alkuperäinen kirjoittaja traitor Näytä viesti
Hei, hommaa ei voi tehdä SQL-lauseilla suoraan kantaan, koska ohjelma voi mennä rikki.. siis pitää käyttä JIRA API:a
Hei, ei se Jira mene rikki yhdestä ylimääräisestä kantaa lukevasta yhteydestä. Jos menee, lähetä bugiraportti kehittäjille.

Mutta vastaus alkuperäiseen kysymykseen, jos tolla APIlla haluat sen tehdä: käy läpi worklogit, ja jos worklogin päivälle ei ole aiempia tapahtumia, alusta sille laskuri ykköseksi, muuten kasvata olemassaolevaa laskuria yhdellä.
  Vastaa lainaten
Vanha 26.04.12, 00:21   #7 (linkki)
 
Rekisteröitynyt: 10/2002
Viestejä: 546
Jos JQL:llä haluaa kikkailla voi päästä vähemmällä pyörityksellä: __Searching in JIRA - JIRA 5.0 - Atlassian Documentation - Confluence
__________________
Ihmiset on kakkoslaatua
  Vastaa lainaten
Vanha 26.04.12, 17:35   #8 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja ZeroGravity Näytä viesti
Ihan noin katsomatta koodia (en jaksa ), itse tekisin tällä periaatteella. Laske jokaisen päivämäärän summa hashtauluun, jossa on avaimena tuo päivämäärä.

eli:
1) Käyt läpi jokaisen worklogin (kuten olet tehnyt), otat sieltä sen arvon jonka haluat "laskea yhteen"
2) katsot päivämäärän
3) katsot summa- hashtaulusta saman päivämäärän arvon
4a) jos arvo on nolla luot uuden avaimen
4b) jos arvo <>0 lisäät tuohon summaan
5) ja (molempien kohdalla) lopuksi tallennat hashtauluun

Sitten käytät tuota summataulua missä ikinä nyt haluatkaan.
Tein nyt Hashtablen mutta en tiedä miten lasken saman päivämäärän omaavat keyt yhteen, tässä koodi:

Koodi:
package com.i4ware.plugin.timesheet;

import java.io.IOException;

import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager;
import org.ofbiz.core.entity.DelegatorInterface;
import org.ofbiz.core.entity.EntityExpr;
import org.ofbiz.core.entity.EntityOperator;
import org.ofbiz.core.entity.GenericEntityException;
import org.ofbiz.core.entity.GenericValue;
import org.ofbiz.core.util.UtilMisc;
import org.apache.commons.lang.StringEscapeUtils;
import com.atlassian.crowd.embedded.api.User;
//import com.atlassian.jira.ComponentManager;

import com.atlassian.jira.issue.worklog.Worklog;
import com.atlassian.jira.issue.worklog.WorklogManager;
import com.atlassian.jira.issue.worklog.WorklogImpl;
import com.i4ware.plugin.util.WorklogUtil;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.atlassian.jira.util.json.JSONObject;
import com.atlassian.jira.util.json.JSONException;
import com.atlassian.jira.util.json.JSONArray;

import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
import java.util.TreeMap;
import java.util.TreeSet;
import java.lang.Long;
import java.util.Collection;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.lang.Class;

public class LoadServlet extends HttpServlet
{
    
    /** value is made for JSON {"success":true} or {"success":false}. */
    private Boolean value;
    /** tasks Object. i.e tasks = arr; */
    private Object issues;
    /** limit int. i.e
     * limit = Integer.valueOf(request.getParameter("limit")).intValue();.
     */
    private int limit;
    /** pages int. variable of total count of rows i.e pages = numRows;. */
    private int pages;
    private String json;
    private JSONObject obj;
    
    private long count;
    
    private Project project;
    
    //private Issue issueIter;
    
    private IssueManager issueManager;
    private WorklogManager worklogManager;
    private Class cls;
    
    private String startDate;
    private String endDate;
    private ProjectManager projectManager;
    
    public LoadServlet(IssueManager issueManager, ProjectManager projectManager, WorklogManager worklogManager)
    {
        this.issueManager = issueManager;
        this.projectManager = projectManager;
        this.worklogManager = worklogManager;
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        resp.setContentType("application/json");        
        //resp.getWriter().write("");
        //resp.getWriter().close();
    
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        
        //issueManager.getIssueObjects();    
        
        /*EntityExpr startExpr = new EntityExpr("startdate",
                EntityOperator.GREATER_THAN_EQUAL_TO, new Timestamp(
                        startDate.getTime()));
        EntityExpr endExpr = new EntityExpr("startdate",
                EntityOperator.LESS_THAN, new Timestamp(endDate.getTime()));
        List<EntityExpr> entityExprs = UtilMisc.toList(startExpr, endExpr); */     
        
        /* HTTP Requests */
        //HttpServletRequest request = ServletActionContext.getRequest();
        
        String projectIdreq = req.getParameter("project");
        String monthReq = req.getParameter("month");
        String yearReq = req.getParameter("year");
        
        project = projectManager.getProjectObjByKey(projectIdreq);
        
        long projectId = project.getId();
        
        Calendar calendar = Calendar.getInstance(); 

        /*
         * Uncomment these if needed DateFormat dateFormat = new
         * SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date();
         */

        DateFormat monthFormat = new SimpleDateFormat("M");
        DateFormat yearFormat = new SimpleDateFormat("yyyy");
        DateFormat day = new SimpleDateFormat("EEE");
        DateFormat itter = new SimpleDateFormat("M-d-yyyy");

        /* gets a last date of current month */
        
        int m = Integer.valueOf(req.getParameter("month")).intValue();
        int y = Integer.valueOf(req.getParameter("year")).intValue();
        calendar.set(y, m - 1, 1);
        int lastDate = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        
        int ii = 1;
        int iii = 1;

        
        //getIssueIdsForProject
        
        /*String issue = "";
         * 
         * 
        */
        
        JSONArray arr = new JSONArray();
        int i = 1;
        
        try {
            
            Collection<Long> issueIds = issueManager.getIssueIdsForProject(projectId);
            
            List<Issue> issuesList = issueManager.getIssueObjects(issueIds);
            
            Iterator iterator = issuesList.iterator();
            
            /*for (Iterator<Issue> iterator = issuesList.iterator();
                iterator.hasNext();) {
                
                Issue issue = iterator.hasNext();
                
                //Issue issue = issueManager.getIssueObject("DEMO-1");
                
            }*/
            
            Hashtable numbers = new Hashtable();
            
            while (iterator.hasNext()) {
                //iterator.next();
                //System.out.println(iterator.next());
                
                Issue issueIter = issueManager.getIssueObject(iterator.next().toString());
                
                User assignee = issueIter.getAssigneeUser();
                
                List<Worklog> worklog = worklogManager.getByIssue(issueIter);
                
                Iterator<Worklog> worklogIterator = worklog.iterator();               
                
                try {    
                JSONObject obj = new JSONObject()
                        .put("id", issueIter.getKey())
                        .put("title",issueIter.getSummary())
                        .put("user_id",issueIter.getAssigneeId())
                        .put("assignee",assignee.getDisplayName())
                        /*.put("d1","8")
                        .put("d2","8")
                        .put("d3","8")
                        .put("d4","8")
                        .put("d5","8")
                        .put("d6","8")
                        .put("d7","8")
                        .put("d8","8")
                        .put("d9","8")
                        .put("d10","8")
                        .put("d11","8")
                        .put("d12","8")
                        .put("d13","8")
                        .put("d14","8")
                        .put("d15","8")
                        .put("d16","8")
                        .put("d17","8")
                        .put("d18","8")
                        .put("d19","8")
                        .put("d20","8")
                        .put("d21","8")
                        .put("d22","8")
                        .put("d23","8")
                        .put("d24","8")
                        .put("d25","8")
                        .put("d26","8")
                        .put("d27","8")
                        .put("d28","8")
                        .put("d29","8")
                        .put("d30","8")
                        .put("d31","8")*/
                        .put("initial_estimate",issueIter.getOriginalEstimate() / 3600)
                        .put("remaining_estimate",issueIter.getEstimate() / 3600);
                
                
                /*while (ii <= lastDate) {
                    
                    long issueId = issueIter.getId();
                    
                    GenericValue genericWorklog = issueManager.getIssue(issueId);
                    
                    //List<GenericValue> worklogs = ComponentManager.getComponent(DelegatorInterface.class);
                    
                    //Worklog worklogFor = new WorklogImpl(worklogManager, issueIter, gv.getLong("id"));
                    /*Timestamp startDateTS = genericWorklog.getTimestamp("startdate");
                    Timestamp createdTS = genericWorklog.getTimestamp("created");
                    Timestamp updatedTS = genericWorklog.getTimestamp("updated");
                    
                    Worklog worklogFor = new WorklogImpl(worklogManager, issueIter, genericWorklog.getLong("id"),
                            genericWorklog.getString("author"), genericWorklog.getString("body"),
                            startDateTS != null ? new Date(startDateTS.getTime()) : null,
                            genericWorklog.getString("grouplevel"), genericWorklog.getLong("rolelevel"),
                            genericWorklog.getLong("timeworked"), genericWorklog.getString("updateauthor"),
                            createdTS != null ? new Date(createdTS.getTime()) : null,
                            updatedTS != null ? new Date(updatedTS.getTime()) : null);
                    
                    //Worklog worklogFor = WorklogUtil.convertToWorklog(genericWorklog, worklogManager, issueManager);
                    
                    startDate = worklogFor.getStartDate();
                     long timeSpent = worklogFor.getTimeSpent();
                     //obj.put(startDate.toString(),timeSpent / 3600);*/
                    
                    //obj.put("d" + ii,"8");
                    
                    //ii++;
                //}
                
                //ii = 1;
                
                while (worklogIterator.hasNext()) {
                    
                       //System.out.println(worklogIterator.next().toString());
                    
                       Worklog itr = worklogIterator.next();
                       
                       Issue iss = itr.    getIssue();

                       startDate = itter.format(itr.getStartDate());
                       long timeSpent = itr.getTimeSpent();
                       
                       numbers.put( iss.getKey() + "_" + startDate, timeSpent);
                                              
                       String strDate = iss.getKey() + "_" + startDate;
                       long n = (Long)numbers.get(strDate);
                       
                       //if (strDate.equals(iss.getKey() + "_" + startDate))
                       
                       //if (n != null) {
                           System.out.println(strDate + " = " + n);
                       //}
                       
                       /*if (startDate.equals(itter.format(itr.getStartDate()))) {
                           timeSpent = timeSpent+timeSpent;
                       }*/
                       
                       obj.put(startDate,timeSpent / 3600);
                
                }
                
                arr.put(obj);
                } catch (JSONException jerr) {
                jerr.printStackTrace(); 
                }
            
            i++;
                
            }
        
        } catch (GenericEntityException e) {
            e.printStackTrace(); 
        }
        
        issues = arr;
        pages = 1;
        value = Boolean.valueOf(!"false"
                .equalsIgnoreCase((String) "true"));
        
        
        try {
        
        json = new JSONObject()
        .put("tasks", issues)
        .put("totalCount", pages)
        .put("success", value)
        .toString();
        
        } catch (JSONException err) {
            err.printStackTrace();
        }
        
        /*try {
            List<GenericValue> worklogs = issueManager.getProjectIssues(project);
            
            Iterator iterator = worklogs.iterator();
            
            while (iterator.hasNext()) {
                iterator.next();
            }
            
        } catch (GenericEntityException e) {
            e.printStackTrace();            
        }*/
        
        
        /*List<GenericValue> worklogs = ComponentManager.getComponent(DelegatorInterface.class).findByAnd(
                "Worklog", entityExprs);*/
        
        resp.setContentType("application/json");        
        resp.getWriter().write(json);
        resp.getWriter().close();
    
    }
}
System.out.println(strDate + " = " + n); tulostaa:

DEMO-3_4-21-2012 = 28800
DEMO-3_4-22-2012 = 28800
DEMO-7_4-1-2012 = 28800
DEMO-7_4-3-2012 = 14400
DEMO-7_4-3-2012 = 14400
DEMO-1_4-21-2012 = 28800
DEMO-2_4-21-2012 = 28800
DEMO-2_3-15-2012 = 14400
DEMO-2_5-24-2012 = 21600

Viimeinen muokkaaja traitor; 26.04.12 18:04.
  Vastaa lainaten
Vanha 26.04.12, 23:16   #9 (linkki)
 
Rekisteröitynyt: 01/2002
Viestejä: 2182
Oikeasti, jos meinaat tehdä noin pitkiä metodeja voisit ainakin kattoa ettei puolet koodista ole kommentoitu pois, tuo "koodi näkymä" ei muutenkaan ole kovin selkeä...

Samoin muuttujien nimiä voisi miettiä vähän, sulla näyttää tuolla olevan peräkkäin i ii ja iii, muuttuja joka pitää sisällään kuukauden m viimeisen päivän on lastDate jne.

Hashtaulun idea taisi olla, että avaimena on joku päivämäärää identifioiva ja avaimena sen päivän summa, eli jos sulla on tarkoituksena laskea jokaisen päivän kaikkien työntekijöiden käyttämä aika yhteensä niin periaate olisi tämänsuuntainen:

Koodi:
public class MapTest {

    public MapTest() {
        Map<Integer, Long> workLogCounter = new HashMap<Integer, Long>();
        int month = 6;
        int year = 2011;
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month -1, 1);
        int lastDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

        for (int i=1; i<=lastDayOfMonth; ++i) {
            workLogCounter.put(i, 0L);
        }
    }
}
Tuossa on taulu jossa avaimena kuukauden päivä. Kun pitää sille päivälle lisätä jotain, haet sen vanhan summan ja lisäät siihen päälle. Avaimena tietysti vois olla myös toi sun käyttämä date.toString jos se yksilöisi sen päivän (ettei mukaan tule sen tarkempaa aikaa).

Olen kuitenkin pahoillani, jiran api on vieras ja tota koodia on aika raskasta lukea, mutta tuntuu että tuohon on varmasti 10 järkevämpääkin ratkaisua.
  Vastaa lainaten
Vanha 26.04.12, 23:27   #10 (linkki)
esn
 
Rekisteröitynyt: 07/2009
Viestejä: 154
Lainaus:
Alkuperäinen kirjoittaja traitor Näytä viesti
Tein nyt Hashtablen mutta en tiedä miten lasken saman päivämäärän omaavat keyt yhteen, tässä koodi:
Koodi:
...
Hashtable numbers = new Hashtable();
...
while (worklogIterator.hasNext()) {
    ...
    long timeSpent = itr.getTimeSpent();
    numbers.put( iss.getKey() + "_" + startDate, timeSpent);
}
...
Miksi tallennat sun kirjanpitoon (numbers) jotain kummallista getTimeSpent()-arvoa? Saattaisi olla taktisempaa sen sijasta tallentaa numero, joka kertoo montako worklogia kyseisenä päivänä oli.
  Vastaa lainaten
Vanha 27.04.12, 11:14   #11 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja esn Näytä viesti
Miksi tallennat sun kirjanpitoon (numbers) jotain kummallista getTimeSpent()-arvoa? Saattaisi olla taktisempaa sen sijasta tallentaa numero, joka kertoo montako worklogia kyseisenä päivänä oli.
En ajatellutkaan tuota.

Tässä on kuitenkin GUI johon worklogit pitäisi ladata JSON-formaatissa:

  Vastaa lainaten
Vanha 27.04.12, 12:54   #12 (linkki)
 
Rekisteröitynyt: 01/2002
Viestejä: 2182
Tuo jo kertoo aika paljon enemmän

Ei siis tapahdu tilannetta jossa samaa tikettiä olisi käsitellyt useampi henkilö? Vai sillä keneltä noi tunnit on koostunut ei ole väliä?
  Vastaa lainaten
Vanha 27.04.12, 16:24   #13 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja dropadrop Näytä viesti
Tuo jo kertoo aika paljon enemmän

Ei siis tapahdu tilannetta jossa samaa tikettiä olisi käsitellyt useampi henkilö? Vai sillä keneltä noi tunnit on koostunut ei ole väliä?
Ext JS gridissä on jos-lause, joka estää editoimasta muita kuin omia issueita. Siis voit editoida vain issueta jossa olet assignoituna.
  Vastaa lainaten
Vanha 27.04.12, 17:17   #14 (linkki)
esn
 
Rekisteröitynyt: 07/2009
Viestejä: 154
Katsoin sun alkuperäistä tuhansien rivien koodiviidakkoa. Oliko sun ongelma siis se että obj.put(...) kutsu otti talteen ainoastaan päivälle startDate viimeiseksi syötetyn arvon? Eli sulla on muuttuja x = 2, ja sun pitäisi lisätä siihen arvo 5, mutta sijoitus x = 5 ei tee niin, joten kysyt apua foorumilta.

Maksaako joku sulle rahaa ton tekemisestä?
  Vastaa lainaten
Vanha 27.04.12, 17:21   #15 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja esn Näytä viesti
Katsoin sun alkuperäistä tuhansien rivien koodiviidakkoa. Oliko sun ongelma siis se että obj.put(...) kutsu otti talteen ainoastaan päivälle startDate viimeiseksi syötetyn arvon? Eli sulla on muuttuja x = 2, ja sun pitäisi lisätä siihen arvo 5, mutta sijoitus x = 5 ei tee niin, joten kysyt apua foorumilta.

Maksaako joku sulle rahaa ton tekemisestä?
Tuote tulee myyntiin Atlassian Marketplacen ja ei ole varmaa, että ostaako sitä kukaan.
  Vastaa lainaten
Vanha 27.04.12, 19:29   #16 (linkki)
esn
 
Rekisteröitynyt: 07/2009
Viestejä: 154
Jätitkö tarkoituksella vastaamatta ensimmäiseen kysymykseeni? Leikitaan että vastasit siihen "kyllä". Oletetaan lisäksi, että oikeasti et halua laskea yhteen Worklogeja, vaan Worklogien timeSpent-arvoja. Yritän nyt vääntää rautalangasta mitä kannattaisi tehdä, jos nuo mun oletukset pitää kutinsa.

Alkuperäinen koodisi näytti jokseenkin tältä:
Lainaus:
Alkuperäinen kirjoittaja traitor Näytä viesti
Koodi:
while (worklogIterator.hasNext()) 
{
    Worklog itr = worklogIterator.next();   
    startDate = itter.format(itr.getStartDate());
    long timeSpent = itr.getTimeSpent();
    obj.put(startDate,timeSpent / 3600);
}
Tuossa jokainen läpikäyty worklog (yli)kirjoittaa timeSpent-arvonsa obj-rakenteen avaimelle startDate. Oletan siis nyt, että yritit kysyä miten ylikirjoittamisen sijasta se lisättäisiin sen avaimen takana olevaan arvoon?

Mitä tuosta puuttuu? Ihan oikein worklogin timeSpent-arvon haet kutsulla itr.getTimeSpent(), sekä tallennat lopullisen timeSpent-arvon tuon startDate-avaimen taakse obj.put() kutsulla. Enää puuttuu miten timeSpent-arvoon lisätään startDate-avaimella jo entuudesta ollut arvo, jos sellainen siellä oli.

Miten se ehkä entuudestaan löytyvä arvo haetaan? Googlen ensimmäinen tulos obj-muuttujan tyypistä JSONObject ohjasi sen javadocciin. Tiedät jo, että startDate-avaimelle tallennettu arvo on tyyppiä long, eli saadaksesi ulos kyseiselle avaimelle sijoitetun long-arvon, lienee parasta kutsua metodia getLong().

Kannattaa huomata että tuon getLong() metodin määrittelyssä kerrotaan, että "throws JSONException if the key is not found". Koska ensimmäistä worklogia käsitellessä ko. avaimelle ei ole tallennettu mitään, näin tulee tapahtumaan. Se lienee ihan sama haluatko pistää sinne nollan jo ennen kuin rupeat käymään läpi worklogeja, vai hiljennätkö sen JSONExceptionin kiinni try-catchillä.

Tätäkö hait? Tarvitsetko vielä mallisuorituksen miten saat tuohon timeSpent-muuttujasi lisättyä arvon obj.getLong(startDate) * 3600 ennen kuin syötät sen obj.put() kutsuun?
  Vastaa lainaten
Vanha 27.04.12, 19:38   #17 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja esn Näytä viesti
Tätäkö hait? Tarvitsetko vielä mallisuorituksen miten saat tuohon timeSpent-muuttujasi lisättyä arvon obj.getLong(startDate) * 3600 ennen kuin syötät sen obj.put() kutsuun?
Tätä hsin. Joo ja tarvitsen mallisuorituksen.
  Vastaa lainaten
Vanha 27.04.12, 23:57   #18 (linkki)
esn
 
Rekisteröitynyt: 07/2009
Viestejä: 154
Jotenkin näin?

Koodi:
try
{
    long oldTimeSpent = obj.getLong(startDate) * 3600;
    timeSpent += oldTimeSpent;
}
catch (JSONException e)
{ }
Mä symppaan jos olet ekaa Java-juttuasi tekemässä, mutta jos ylitsepääsemättömäksi kompastuskiveksi muodostuu get- ja set-metodeilla käpisteltävän muuttujan arvon kasvatus, ehkä voisi olla hyvä vielä opetella vähän lisää ohjelmoinnin alkeita ennen kuin lähtee kaupittelemaan tekemiänsä ohjelmia. Siinä voi ihmiset pettyä pahemman kerran.
  Vastaa lainaten
Vanha 28.04.12, 19:14   #19 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja esn Näytä viesti
Jotenkin näin?

Koodi:
try
{
    long oldTimeSpent = obj.getLong(startDate) * 3600;
    timeSpent += oldTimeSpent;
}
catch (JSONException e)
{ }
Mä symppaan jos olet ekaa Java-juttuasi tekemässä, mutta jos ylitsepääsemättömäksi kompastuskiveksi muodostuu get- ja set-metodeilla käpisteltävän muuttujan arvon kasvatus, ehkä voisi olla hyvä vielä opetella vähän lisää ohjelmoinnin alkeita ennen kuin lähtee kaupittelemaan tekemiänsä ohjelmia. Siinä voi ihmiset pettyä pahemman kerran.
Kiitos tästä, nyt se toimii kuten pitääkin.

Juu siinä olet oikeassa, että minun ei ainakaan räätälöityjä plugareita kannata lähteä tekemään asiakkaille projekteina ennen kuin osaan kunnolla Javaa. Mutta tässä plugarissa ei ole mitään valmiiksisaamis deadlineä.
  Vastaa lainaten
Vanha 26.05.12, 22:39   #20 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Tässä on nyt ohjelma:
Timesheet for JIRA - Version 1.0 - YouTube
  Vastaa lainaten
Vanha 27.05.12, 21:00   #21 (linkki)
 
Rekisteröitynyt: 09/2002
Viestejä: 303
En tiedä miksei kukaan ole tätä vielä sanonut ellei sitten mennyt ohi, mutta eikös JIRAssa ole ihan natiivina nuo kaikki (harvat) featuret mitä tässä on ajettu takaa? JIRA kuitenkin on proikkarointityökalu issue trackerilla eikä vain issue tracker.
__________________
Que?
  Vastaa lainaten
Vanha 27.05.12, 21:18   #22 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Lainaus:
Alkuperäinen kirjoittaja Para Näytä viesti
En tiedä miksei kukaan ole tätä vielä sanonut ellei sitten mennyt ohi, mutta eikös JIRAssa ole ihan natiivina nuo kaikki (harvat) featuret mitä tässä on ajettu takaa? JIRA kuitenkin on proikkarointityökalu issue trackerilla eikä vain issue tracker.
Tein tuotteen erään asikkaan tarjouspyynnöstä, koska halusivat Timesheetin.

Tässä on kuitenkin tuotteeni kilpailija: Tempo | Easy Time Tracking – Billing, Worklogs & Time Sheets
  Vastaa lainaten
Vanha 06.06.12, 20:54   #23 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Tuoteen sivut: Timesheet for JIRA - i4ware Software
Ja SLA: i4ware Software License Agreement - Timesheet for JIRA - i4ware Software
  Vastaa lainaten
Vanha 09.06.12, 13:07   #24 (linkki)
 
Rekisteröitynyt: 01/2012
Viestejä: 55
Nyt on yksi asiakas tuotteelle:
Customers - i4ware Software
  Vastaa lainaten
Vanha 10.06.12, 00:04   #25 (linkki)
 
Rekisteröitynyt: 06/2012
Viestejä: 9
Saa nähdä koska asiakas pettyy tuohon räpellykseen
  Vastaa lainaten
Vastaa

Hae ketjusta:

Laajennettu haku

Hyppää alueelle:




Kaikki ajat ovat GMT +3. Kello on nyt 05:24.