package com.almworks.jira.structure.util;
import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.bc.project.component.ProjectComponent;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueConstant;
import com.atlassian.jira.issue.customfields.CustomFieldType;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.issuetype.IssueType;
import com.atlassian.jira.issue.link.IssueLinkType;
import com.atlassian.jira.issue.status.Status;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager;
import com.atlassian.jira.project.version.Version;
import com.atlassian.jira.security.PermissionManager;
import com.atlassian.jira.security.Permissions;
import com.atlassian.jira.security.roles.ProjectRole;
import com.atlassian.jira.sharing.SharedEntity;
import com.atlassian.jira.workflow.JiraWorkflow;
import com.atlassian.plugin.ModuleDescriptor;
import com.opensymphony.user.Entity;
import com.opensymphony.user.User;
import org.ofbiz.core.entity.GenericValue;
import java.util.List;
import java.util.Set;
/**
* <p><code>JiraFunc</code> contains Jira-related functions.</p>
*
* @author Igor Sereda
*/
public class JiraFunc {
public static final La<Project, Long> PROJECT_ID = new La<Project, Long>(Long.class) {
@Override
public Long la(Project argument) {
return argument.getId();
}
};
public static final La<Project, String> PROJECT_NAME = new La<Project, String>() {
public String la(Project argument) {
return argument == null ? null : argument.getName();
}
};
public static final La<Project, String> PROJECT_KEY = new La<Project, String>(String.class) {
public String la(Project argument) {
return argument == null ? null : argument.getKey();
}
};
public static final La<Issue, Long> ISSUE_ID = new La<Issue, Long>() {
@Override
public Long la(Issue argument) {
return argument.getId();
}
};
public static final La<String, Project> KEY_PROJECT = new La<String, Project>() {
public Project la(String key) {
if (key == null) return null;
return ComponentManager.getComponentInstanceOfType(ProjectManager.class).getProjectObjByKey(key);
}
};
public static final La<Long, Project> ID_PROJECT = new La<Long, Project>() {
public Project la(Long id) {
if (id == null) return null;
return ComponentManager.getComponentInstanceOfType(ProjectManager.class).getProjectObj(id);
}
};
public static final La<String, IssueType> ID_ISSUETYPE = new La<String, IssueType>() {
public IssueType la(String id) {
return id == null ? null : ComponentManager.getInstance().getConstantsManager().getIssueTypeObject(id);
}
};
public static final La<ProjectRole, Long> PROJECTROLE_ID = new La<ProjectRole, Long>() {
public Long la(ProjectRole argument) {
return argument.getId();
}
};
public static final La<Entity, String> ENTITY_NAME = new La<Entity, String>() {
public String la(Entity argument) {
return argument.getName();
}
};
public static final La<ModuleDescriptor, String> MODULE_COMPLETE_KEY = new La<ModuleDescriptor, String>() {
public String la(ModuleDescriptor argument) {
return argument == null ? null : argument.getCompleteKey();
}
};
public static final La<IssueLinkType, Long> LINKTYPE_ID = new La<IssueLinkType, Long>() {
public Long la(IssueLinkType argument) {
return argument == null ? null : argument.getId();
}
};
public static final La<SharedEntity, Long> SHAREDENTITY_ID = new La<SharedEntity, Long>() {
public Long la(SharedEntity argument) {
return argument == null ? null : argument.getId();
}
};
public static final La<CustomField, CustomFieldType> CUSTOMFIELD_TYPE = new La<CustomField, CustomFieldType>() {
public CustomFieldType la(CustomField argument) {
return argument == null ? null : argument.getCustomFieldType();
}
};
public static final La<CustomFieldType, String> CUSTOMFIELDTYPE_KEY = new La<CustomFieldType, String>() {
public String la(CustomFieldType argument) {
return argument == null ? null : argument.getKey();
}
};
public static final La<CustomField, String> CUSTOMFIELD_ID = new La<CustomField, String>() {
public String la(CustomField argument) {
return argument == null ? null : argument.getId();
}
};
public static final La<IssueType, Boolean> ISSUETYPE_SUBTASK = new La<IssueType, Boolean>() {
public Boolean la(IssueType argument) {
return argument != null && argument.isSubTask();
}
};
public static final La<IssueConstant, String> ISSUECONSTANT_ID = new La<IssueConstant, String>(String.class) {
public String la(IssueConstant argument) {
return argument == null ? null : argument.getId();
}
};
public static final La<IssueConstant, String> ISSUECONSTANT_NAME_LOCAL = new La<IssueConstant, String>(String.class) {
public String la(IssueConstant argument) {
return argument == null ? null : argument.getNameTranslation();
}
};
public static final La<String, Status> ID_STATUS = new La<String, Status>() {
public Status la(String argument) {
return argument == null ? null : ComponentManager.getInstance().getConstantsManager().getStatusObject(argument);
}
};
public static final La<JiraWorkflow, String> WORKFLOW_NAME = new La<JiraWorkflow, String>() {
public String la(JiraWorkflow argument) {
return argument == null ? null : argument.getName();
}
};
public static final La<Version, Long> VERSION_ID = new La<Version, Long>(Long.class) {
public Long la(Version argument) {
return argument == null ? null : argument.getId();
}
};
public static final La<ProjectComponent, Long> COMPONENT_ID = new La<ProjectComponent, Long>(Long.class) {
public Long la(ProjectComponent argument) {
return argument == null ? null : argument.getId();
}
};
public static final La<GenericValue, Long> GENERICVALUE_LONG_ID = new La<GenericValue, Long>() {
public Long la(GenericValue argument) {
try {
return argument == null ? null : argument.getLong("id");
} catch (Exception e) {
return null;
}
}
};
public static final La<GenericValue, String> GENERICVALUE_STRING_ID = new La<GenericValue, String>() {
public String la(GenericValue argument) {
try {
return argument == null ? null : argument.getString("id");
} catch (Exception e) {
return null;
}
}
};
public static La<Project, Boolean> browseableBy(final User user) {
final PermissionManager permissionManager = ComponentManager.getComponentInstanceOfType(PermissionManager.class);
if (permissionManager == null) {
assert false : "no permissions";
return La.constant(false);
}
return new La<Project, Boolean>() {
public Boolean la(Project argument) {
return argument != null && permissionManager.hasPermission(Permissions.BROWSE, argument, user);
}
};
}
public static La<Project, Boolean> hasCustomField(final CustomField field) {
if (field == null) return La.constant(false);
List<GenericValue> projects = field.isAllProjects() ? null : field.getAssociatedProjects();
final Set<Long> pids = projects == null ? null : GENERICVALUE_LONG_ID.hashSet(projects);
return new La<Project, Boolean>() {
public Boolean la(Project argument) {
return argument != null && (pids == null || pids.contains(argument.getId()));
}
};
}
}