User Tools

Site Tools


validators

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
validators [2018/01/16 13:54]
pawel
validators [2019/02/13 09:10] (current)
root added cascading drop down
Line 42: Line 42:
 </code> </code>
  
-=== Verify if custom field value is not greater than 3 characters long ===+=== Verify if custom field value is characters long ===
 <code java> <code java>
 import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.component.ComponentAccessor;
-//import com.atlassian.jira.ComponentManager; 
 import com.atlassian.jira.issue.CustomFieldManager; import com.atlassian.jira.issue.CustomFieldManager;
-//import com.atlassian.jira.issue.fields.CustomField; 
 import com.atlassian.jira.issue.IssueManager; import com.atlassian.jira.issue.IssueManager;
-//import com.atlassian.jira.issue.Issue; 
-//import com.atlassian.jira.issue.ModifiedValue; 
-//import com.atlassian.jira.issue.util.DefaultIssueChangeHolder; 
  
 def customfield_ID = "customfield_11700" def customfield_ID = "customfield_11700"
Line 60: Line 55:
  
  
-if (cFieldValue.size() > 3){+if (cFieldValue.size() != 5){
     return false     return false
 } }
Line 68: Line 63:
 </code> </code>
  
 +=== Verify if any other tickets have the same dates as requested ===
 +
 +<code java>
 +import com.atlassian.jira.component.ComponentAccessor
 +import com.atlassian.jira.issue.search.SearchProvider
 +import com.atlassian.jira.jql.parser.JqlQueryParser
 +import com.atlassian.jira.web.bean.PagerFilter
 +import com.atlassian.jira.datetime.DateTimeFormatUtils
 +import org.apache.commons.lang.time.DateUtils
 +import java.text.SimpleDateFormat
 +import java.util.Date.*
 +import java.lang.String.*
 +//logging
 +import org.apache.log4j.Logger
 +import org.apache.log4j.Level
 +def log = Logger.getLogger("com.acme.CreateSubtask")
 +log.setLevel(Level.DEBUG)
 +// this function returns list of issues for JQL
 +
 +def findIssues(String jqlQuery) {
 +    def issueManager = ComponentAccessor.issueManager
 +    def user = ComponentAccessor.jiraAuthenticationContext.user
 +    def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class)
 +    def searchProvider = ComponentAccessor.getComponent(SearchProvider.class)
 +    def query = jqlQueryParser.parseQuery(jqlQuery)
 +    def results = searchProvider.search(query, user, PagerFilter.unlimitedFilter)
 +
 +    results.issues.collect { issue -> issueManager.getIssueObject(issue.id) }
 +
 +}
 +def customFieldManager = ComponentAccessor.getCustomFieldManager()
 +def isd = cfValues['OD Start Date']
 +def ied = cfValues['OD End Date']
 +def ie = cfValues['OD Environment']
 +def inputStartDate
 +def inputEndDate
 +def inputEnvironment = ie.toString()
 +def issues
 +if (! isd || ! ied){
 +    log.debug("Input Start date or Input End Date not available")
 +}else{
 +    inputStartDate = isd.format("YYYY-MM-dd").toString()
 +    inputEndDate = ied.format("YYYY-MM-dd").toString()
 +    issues = findIssues('project = ODRSRV  AND "OD Environment" = '+ inputEnvironment +'  AND (("OD Start Date" <= '+ inputStartDate +' AND "OD End Date" >= '+ inputEndDate +') OR ("OD Start Date" <= '+ inputEndDate +' AND "OD Start Date" >= '+ inputStartDate +') OR ("OD Start Date" >= '+ inputStartDate +' AND "OD End Date" <= '+ inputEndDate +') OR ("OD Start Date" <= '+ inputStartDate +' AND "OD End Date" >= '+ inputEndDate +'))' )
 +}
 +log.debug("inputStartdate: "+inputStartDate)
 +log.debug("inputEndDate: "+inputEndDate)
 +log.debug("inputEnvironment: "+inputEnvironment)
 +log.debug("issues: "+issues+" for "+inputEnvironment)
 +
 +if ( ! issues){
 +    return true
 + log.debug("Issues is " + issues)
 +}else{
 +    return false
 +    log.debug("Issues is " + issues)
 +}
 +</code>
 +
 +=== Validate user changed the OD Environment field if it was "None" previously ===
 +<code java>
 +import com.atlassian.jira.component.ComponentAccessor
 +import com.atlassian.jira.issue.Issue
 +import org.apache.log4j.Logger
 +import org.apache.log4j.Level
 +def log = Logger.getLogger("com.acme.CreateSubtask")
 +log.setLevel(Level.DEBUG)
 +
 +Issue issue = issue
 +
 +def customFieldManager = ComponentAccessor.getCustomFieldManager()
 +def issueManager = ComponentAccessor.getIssueManager()
 +def customField = customFieldManager.getCustomFieldObjectByName("OD Environment")
 +def originalIssue = issueManager.getIssueObject(issue.id)
 +
 +def originalValue = originalIssue.getCustomFieldValue(customField).toString()
 +def newValue = issue.getCustomFieldValue(customField).toString()
 +
 +log.debug("originalIssue ${originalValue}")
 +log.debug("newIssue ${newValue}")
 +
 +if (originalValue.equals("null") ){
 + if ( newValue != originalValue ) {
 +    log.debug("true -> User changed the field")
 +        return true
 +    }else{
 +        log.debug("false -> User must changed field")
 +        return false
 +    }    
 +}else{
 +
 + log.debug("true -> OD Environment is not null ${originalValue}")
 +    return true
 +
 +}
 +</code>
 +
 +===  Validate if user is allowed to change the OD Environment field ===
 +
 +<code java>
 +import com.atlassian.jira.component.ComponentAccessor
 +import com.atlassian.jira.issue.Issue
 +import org.apache.log4j.Logger
 +import org.apache.log4j.Level
 +def log = Logger.getLogger("com.acme.CreateSubtask")
 +log.setLevel(Level.DEBUG)
 +
 +Issue issue = issue
 +
 +def customFieldManager = ComponentAccessor.getCustomFieldManager()
 +def issueManager = ComponentAccessor.getIssueManager()
 +def customField = customFieldManager.getCustomFieldObjectByName("OD Environment")
 +def originalIssue = issueManager.getIssueObject(issue.id)
 +
 +def originalValue = originalIssue.getCustomFieldValue(customField).toString()
 +def newValue = issue.getCustomFieldValue(customField).toString()
 +
 +log.debug("originalIssue ${originalValue}")
 +log.debug("newIssue ${newValue}")
 +
 +if ( newValue != originalValue ) {
 +    if (! originalValue.equals("null") ){
 +    log.debug("false -> Changing from not None")
 +        return false
 +
 +    }else{
 +        log.debug("true -> changing from none")
 +        return true
 +    }
 +}else{
 +    log.debug("true -> not changing")
 +    return true
 +}
 +</code>
 +
 +=== Allow only specific users in project ABC or users in a group "JIRAGROUP" to create issues validator ===
 +
 +<code java>
 +import com.atlassian.jira.component.ComponentAccessor
 +import com.atlassian.jira.issue.Issue
 +def groupManager = ComponentAccessor.getGroupManager()
 +
 +(issue.projectObject.key == 'ABC' && issue.issueType.name == 'Bug' && currentUser.name in ["XYZ", "TEST"] ) || groupManager.isUserInGroup(currentUser, "JIRAGROUP")
 +
 +
 +</code>
 +
 +=== Only allow users in group "users" to execute this action ===
 +
 +<code java>
 +import com.atlassian.jira.component.ComponentAccessor
 +import com.atlassian.jira.issue.Issue
 +def groupManager = ComponentAccessor.getGroupManager()
 +
 +groupManager.isUserInGroup(currentUser, "users")
 +</code>
 +
 +=== Check if user is in group "users" or project role "Developers" to execute this action ===
 +
 +<code java>
 +import com.atlassian.jira.component.ComponentAccessor
 +import com.atlassian.jira.issue.Issue
 +import com.atlassian.jira.security.roles.ProjectRoleManager
 +
 +def projectManager = ComponentAccessor.projectManager
 +def projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager)
 +def role = projectRoleManager.getProjectRole("Developers")
 +
 +def groupManager = ComponentAccessor.getGroupManager()
 +
 +if (groupManager.isUserInGroup(currentUser, "users") || projectRoleManager.isUserInProjectRole(currentUser, role, issue.getProjectObject())){
 + return true
 +}
 +</code>
 +
 +=== Check if cascading child drop down is set to "None" ===
 +The following script was found on Atlassian community here: [[https://community.atlassian.com/t5/Jira-questions/How-to-check-the-second-value-of-a-cascading-select-list-in-a/qaq-p/759808|How to check the second value of a cascading select list in a custom field]]
 +Use the **Custom Validator** for this script-runner script.
 +<code java>
 +import com.atlassian.jira.component.ComponentAccessor
 +import com.atlassian.jira.issue.MutableIssue
 +import com.opensymphony.workflow.InvalidInputException
 +
 +def issue = issue as MutableIssue
 +def cf = ComponentAccessor.customFieldManager.getCustomFieldObjectByName("CascadingSelect")
 +def cfValue = issue.getCustomFieldValue(cf) as HashMap
 +
 +def parentOption = cfValue.values().getAt(0)?.value
 +def childOption = cfValue.values().getAt(1)?.value
 +
 +if (!childOption) {
 +    throw new InvalidInputException("Child option is Null")
 +}
 +</code>
validators.1516128875.txt.gz · Last modified: 2018/01/16 13:54 by pawel