view ssdt-jira-plugins-v2/plugins/src/main/java/org/nwoca/ssdt/jira/RequireNoTimeRemainingValidator.java @ 1:56349dc044f5

Added validators for Time tracking. Validators: Require an estimate and require no time remaining
author smith
date Thu, 22 May 2008 15:45:43 -0400
parents
children 4ca1ef5be75e
line wrap: on
line source
/*
 * RequireDocumentIssueValidator.java
 *
 * Created on May 14, 2007, 1:04 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package org.nwoca.ssdt.jira;

import com.atlassian.jira.ManagerFactory;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueUtils;
import com.atlassian.jira.issue.fields.CustomField;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.workflow.InvalidInputException;
import com.opensymphony.workflow.Validator;
import com.opensymphony.workflow.WorkflowException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Requires zero time remaining if the issue has Time Tracking.  Can use
 * during resolve step.
 *
 * @author SMITH
 */
public class RequireNoTimeRemainingValidator implements Validator {

    private final List<CustomField> cfs = new ArrayList<CustomField>();

    /**
     * Creates a new instance of RequireDocumentIssueValidator.
     */
    public RequireNoTimeRemainingValidator() {
        CustomFieldManager cfm = ManagerFactory.getCustomFieldManager();
        for (Object obj : cfm.getCustomFieldObjects()) {
            CustomField cf = (CustomField) obj;
            if (!cf.getName().contains("Message")) {
                cfs.add(cf);
                System.out.println("Custom Field: " + cf.getName());
            }

        }

    }

    public void validate(Map transientVars, Map args, PropertySet ps)
            throws InvalidInputException, WorkflowException {

        Issue issue = (Issue) transientVars.get("issue");
        
//        System.out.println("Issue: " + issue.getKey());
//        System.out.println("   OE: " + issue.getOriginalEstimate());
//        System.out.println("    E: " + issue.getEstimate() + "/" +issue.getEstimate() );
//        System.out.println("   TS: " + issue.getTimeSpent());
//        System.out.println("   hasTimeTracking:" + IssueUtils.hasTimeTracking(issue));
//
//        for (CustomField cf : cfs) {
//                System.out.println("   CF " + cf.getName() + ": " + issue.getCustomFieldValue(cf));
//        }
//        
//        {
//            Iterator it = transientVars.entrySet().iterator();
//            System.out.println("    Transient: ");
//            while (it.hasNext()) {
//                Map.Entry e = (Map.Entry) it.next();
//                System.out.println("       " + e.getKey() + ": " + e.getValue());
//            }
//        }
//
//        {
//            Iterator it = args.entrySet().iterator();
//            System.out.println("    Args: ");
//            while (it.hasNext()) {
//                Map.Entry e = (Map.Entry) it.next();
//                System.out.println("       " + e.getKey() + ": " + e.getValue());
//            }
//        }
//
//        
        if (IssueUtils.hasTimeTracking(issue) && issue.getEstimate().longValue() != 0 ) {
            throw new InvalidInputException("There is still Estimated Time Remaining on this issue.");
        }

    }
}