1. Tänään aamupäivällä kuorman optimointia, sähköpostiliikenteessä hitautta (jos ei esim. salasanan nollauksesta tullut sähköpostia, kokeile uudelleen)

    t: Sysop
  2. Bugiraportit ja palaute XenForo-MuroBBS:stä tähän viestiketjuun

    Tuliko vastaan englantia tai huonoa suomea, raportoi tähän viestiketjuun

Java-ohjelmoitni apua kaivataan

Viestiketju alueella 'Ohjelmointi' , aloittaja traitor, 25.04.2012.

  1. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    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);
                    
                    }
    
     
  2. ZeroGravity

    Rekisteröitynyt:
    04.06.2005
    Viestejä:
    45
    Ihan noin katsomatta koodia (en jaksa :D), 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.
     
  3. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    En ymmärrä tästä mitään
     
  4. dropadrop

    Rekisteröitynyt:
    18.01.2002
    Viestejä:
    2 186
    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ä...
     
  5. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    Hei, hommaa ei voi tehdä SQL-lauseilla suoraan kantaan, koska ohjelma voi mennä rikki.. siis pitää käyttä JIRA API:a
     
  6. esn

    Rekisteröitynyt:
    30.07.2009
    Viestejä:
    300
    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ä.
     
  7. Vege

    Rekisteröitynyt:
    05.10.2002
    Viestejä:
    553
  8. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    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
     
    Viimeksi muokattu: 26.04.2012
  9. dropadrop

    Rekisteröitynyt:
    18.01.2002
    Viestejä:
    2 186
    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.
     
  10. esn

    Rekisteröitynyt:
    30.07.2009
    Viestejä:
    300
    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.
     
  11. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    En ajatellutkaan tuota.

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

    [​IMG]
     
  12. dropadrop

    Rekisteröitynyt:
    18.01.2002
    Viestejä:
    2 186
    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ä?
     
  13. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    Ext JS gridissä on jos-lause, joka estää editoimasta muita kuin omia issueita. Siis voit editoida vain issueta jossa olet assignoituna.
     
  14. esn

    Rekisteröitynyt:
    30.07.2009
    Viestejä:
    300
    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ä?
     
  15. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    Tuote tulee myyntiin Atlassian Marketplacen ja ei ole varmaa, että ostaako sitä kukaan.
     
  16. esn

    Rekisteröitynyt:
    30.07.2009
    Viestejä:
    300
    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ä:
    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?
     
  17. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    Tätä hsin. Joo ja tarvitsen mallisuorituksen.
     
  18. esn

    Rekisteröitynyt:
    30.07.2009
    Viestejä:
    300
    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.
     
  19. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    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ä.
     
  20. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
  21. Para

    Rekisteröitynyt:
    15.09.2002
    Viestejä:
    300
    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.
     
  22. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
    Tein tuotteen erään asikkaan tarjouspyynnöstä, koska halusivat Timesheetin.

    Tässä on kuitenkin tuotteeni kilpailija: Tempo | Easy Time Tracking – Billing, Worklogs & Time Sheets
     
  23. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
  24. traitor

    Rekisteröitynyt:
    29.01.2012
    Viestejä:
    55
  25. KokaKolaPullo

    Rekisteröitynyt:
    02.06.2012
    Viestejä:
    9
    Saa nähdä koska asiakas pettyy tuohon räpellykseen
     

Jaa tämä sivu