1.- First see the instructions of this old post
2.- Change the file /src/main/resources/atlassian-plugin.xml like this. Bassically you need to add <projectTypeKey>business</projectTypeKey>
<atlassian-plugin key="${project.groupId}.${project.artifactId}" name="${project.name}" plugins-version="2">
<plugin-info>
<description>${project.description}</description>
<version>${project.version}</version>
<vendor name="${project.organization.name}" url="${project.organization.url}" />
<param name="plugin-icon">images/pluginIcon.png</param>
<param name="plugin-logo">images/pluginLogo.png</param>
</plugin-info>
<!-- add our i18n resource -->
<resource type="i18n" name="i18n" location="my-project-template"/>
<!-- add our web resources -->
<web-resource key="my-project-template-resources" name="my-project-template Web Resources">
<dependency>com.atlassian.auiplugin:ajs</dependency>
<transformation extension="soy">
<transformer key="soyTransformer"/>
</transformation>
<resource type="download" name="MyProjectTemplate.soy.js" location="/soy/MyProjectTemplate.soy"/>
<resource type="download" name="images/" location="/images">
<param name="content-type" value="image/png; charset=binary"/>
</resource>
<context>atl.general</context>
<context>atl.admin</context>
</web-resource>
<project-blueprint key="my-project-template" weight="90">
<label key="my.project.template.name"/>
<projectTypeKey>business</projectTypeKey>
<description key="my.project.template.description"/>
<longDescription key="my.project.template.description.long"/>
<infoPage soy-template="JIRA.Templates.ProjectTemplates.Tutorial.renderMyProjectTemplateExplanation" />
<icon location="images/my-template-icon.png"/>
<backgroundIcon location="images/my-template-background.png"/>
<add-project>
<hook class="com.example.projectTemplate.MyAddProjectHook"/>
<descriptor file="/config/my-project-template-config.json"/>
</add-project>
</project-blueprint>
</atlassian-plugin>
3.- In the file /src/main/java/com/example/plugins/tutorial/MyAddProjectHook.java change the file to like this:
package com.example.projectTemplate;
//import com.atlassian.jira.blueprint.api.AddProjectHook;
import com.atlassian.jira.project.template.hook.AddProjectHook;
import com.atlassian.jira.project.template.*;
import com.atlassian.jira.project.template.hook.*;
//import com.atlassian.jira.blueprint.api.ConfigureData;
//import com.atlassian.jira.blueprint.api.ConfigureResponse;
//import com.atlassian.jira.blueprint.api.ValidateData;
//import com.atlassian.jira.blueprint.api.ValidateResponse;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import com.atlassian.jira.config.ConstantsManager;
import com.atlassian.jira.bc.projectroles.ProjectRoleService;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.fields.layout.field.*;
import com.atlassian.jira.issue.fields.screen.*;
import com.atlassian.jira.issue.fields.screen.issuetype.*;
import com.atlassian.jira.issue.issuetype.IssueType;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.IssueFieldConstants;
import com.atlassian.jira.issue.context.GlobalIssueContext;
import com.atlassian.jira.issue.customfields.CustomFieldSearcher;
import com.atlassian.jira.issue.customfields.CustomFieldType;
import com.atlassian.jira.issue.operation.IssueOperations;
import com.atlassian.jira.issue.operation.IssueOperations;
import com.atlassian.jira.issue.operation.ScreenableIssueOperation;
import com.atlassian.jira.notification.NotificationSchemeManager;
import com.atlassian.jira.permission.PermissionSchemeManager;
import com.atlassian.jira.scheme.SchemeManager;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectCategory;
import com.atlassian.jira.project.ProjectManager;
import com.atlassian.jira.scheme.Scheme;
import com.atlassian.jira.security.roles.ProjectRole;
import com.atlassian.jira.util.SimpleErrorCollection;
import com.atlassian.jira.workflow.WorkflowSchemeManager;
import com.atlassian.jira.util.SimpleErrorCollection;
import com.atlassian.sal.api.message.I18nResolver;
import org.ofbiz.core.entity.GenericEntityException;
import org.ofbiz.core.entity.GenericValue;
public class MyAddProjectHook implements AddProjectHook
{
private static final Logger LOGGER = LogManager.getLogger(MyAddProjectHook.class);
@Override
public ValidateResponse validate(final ValidateData validateData)
{
return ValidateResponse.create();
}
@Override
public ConfigureResponse configure(final ConfigureData configureData)
{
Project project = configureData.project();
ConstantsManager constantsManager = ComponentAccessor.getConstantsManager();
String template_name = "Company Project Template";
String template_new_name = project.getKey() + ":" + template_name;
PermissionSchemeManager permissionSchemeManager = ComponentAccessor.getPermissionSchemeManager();
Scheme permissionScheme = permissionSchemeManager.getSchemeObject(template_name);
if (permissionScheme != null) {
Scheme permissionSchemeNew = permissionSchemeManager.copyScheme(permissionScheme);
permissionSchemeNew.setName(template_new_name);
permissionSchemeManager.updateScheme(permissionSchemeNew);
permissionSchemeManager.removeSchemesFromProject(project);
permissionSchemeManager.addSchemeToProject(project, permissionSchemeNew);
}
FieldLayoutManager fieldLayoutManager = ComponentAccessor.getFieldLayoutManager();
EditableDefaultFieldLayout defaultFieldLayout = fieldLayoutManager.getEditableDefaultFieldLayout();
EditableFieldLayout editableFieldLayout = new EditableFieldLayoutImpl(null, defaultFieldLayout.getFieldLayoutItems());
editableFieldLayout.setName(template_new_name);
editableFieldLayout.setDescription(template_new_name);
FieldLayout myFieldLayout = fieldLayoutManager.storeAndReturnEditableFieldLayout(editableFieldLayout);
FieldLayoutScheme fieldLayoutScheme = new FieldLayoutSchemeImpl(fieldLayoutManager, null);
fieldLayoutScheme.setName(template_new_name);
fieldLayoutScheme.setDescription(template_new_name);
fieldLayoutScheme.store();
FieldLayoutSchemeEntity fieldLayoutSchemeEntity = new FieldLayoutSchemeEntityImpl(fieldLayoutManager, null, constantsManager);
fieldLayoutSchemeEntity.setIssueTypeId(null);
fieldLayoutSchemeEntity.setFieldLayoutId(myFieldLayout.getId());
//fieldLayoutSchemeEntity.store();
fieldLayoutScheme.addEntity(fieldLayoutSchemeEntity);
//fieldLayoutScheme.store();
//This part not works fine 😦
fieldLayoutScheme = null;
for (FieldLayoutScheme scheme : fieldLayoutManager.getFieldLayoutSchemes()) {
if (scheme.getName().equals(template_new_name)) {
fieldLayoutScheme = scheme;
break;
}
}
fieldLayoutManager.addSchemeAssociation(project, fieldLayoutScheme.getId());
FieldScreenManager fieldScreenManager = ComponentAccessor.getFieldScreenManager();
FieldScreen fieldScreen = new FieldScreenImpl(fieldScreenManager);
fieldScreen.setName(template_new_name);
fieldScreen.setDescription(template_new_name);
fieldScreen.store();
FieldScreenTab defaultTab = fieldScreen.addTab("Details");
FieldScreenSchemeManager fieldScreenSchemeManager = ComponentAccessor.getComponent(FieldScreenSchemeManager.class);
FieldScreenSchemeImpl fieldScreenScheme = new FieldScreenSchemeImpl(fieldScreenSchemeManager, null);
fieldScreenScheme.setName(template_new_name);
fieldScreenScheme.setDescription(template_new_name);
fieldScreenScheme.store();
FieldScreenSchemeItemImpl fieldScreenSchemeItem = new FieldScreenSchemeItemImpl(fieldScreenSchemeManager, (GenericValue) null, fieldScreenManager);
fieldScreenSchemeItem.setIssueOperation(null);
fieldScreenSchemeItem.setFieldScreen(fieldScreenManager.getFieldScreen(fieldScreen.getId()));
fieldScreenScheme.addFieldScreenSchemeItem(fieldScreenSchemeItem);
IssueTypeScreenSchemeManager issueTypeScreenSchemeManager = (IssueTypeScreenSchemeManager) ComponentManager.getComponentInstanceOfType(IssueTypeScreenSchemeManager.class);
IssueTypeScreenScheme issueTypeScreenScheme = new IssueTypeScreenSchemeImpl(issueTypeScreenSchemeManager, null);
issueTypeScreenScheme.setName(template_new_name);
issueTypeScreenScheme.setDescription(template_new_name);
issueTypeScreenScheme.store();
IssueTypeScreenSchemeEntity issueTypeScreenSchemeEntity = new IssueTypeScreenSchemeEntityImpl(issueTypeScreenSchemeManager, (GenericValue) null, fieldScreenSchemeManager, constantsManager);
issueTypeScreenSchemeEntity.setIssueTypeId(null);
issueTypeScreenSchemeEntity.setFieldScreenScheme(fieldScreenSchemeManager.getFieldScreenScheme(fieldScreenScheme.getId()));
issueTypeScreenScheme.addEntity(issueTypeScreenSchemeEntity);
issueTypeScreenSchemeManager.addSchemeAssociation(project,issueTypeScreenScheme);
// RETURN FINAL
ConfigureResponse configureResponse = ConfigureResponse.create().setRedirect("/plugins/servlet/project-config/" + project.getKey() + "/summary");
return configureResponse;
}
}






Thank you,
It works on JIRA Core 7.1.9
LikeLiked by 1 person
Nice! U welcome Krastyo
LikeLike
Hi,
in the above example it is showing for default issuetype only, How to apply multiple screen schemes to issuetype screen scheme?
LikeLiked by 1 person
Hello Ram, easy!
Create multiple code blocks like this:
IssueTypeScreenSchemeEntity issueTypeScreenSchemeEntity = new IssueTypeScreenSchemeEntityImpl(issueTypeScreenSchemeManager, (GenericValue) null, fieldScreenSchemeManager, constantsManager); issueTypeScreenSchemeEntity.setIssueTypeId(null); issueTypeScreenSchemeEntity.setFieldScreenScheme(fieldScreenSchemeManager.getFieldScreenScheme(fieldScreenScheme.getId())); issueTypeScreenScheme.addEntity(issueTypeScreenSchemeEntity);In the line issueTypeScreenSchemeEntity.setIssueTypeId(null);
Remember to change “null” by an ID of the IssueType
Best regards
LikeLike
Do you have an update for Jira 8?
LikeLiked by 1 person
It’s easy
Remove the line
// import com.atlassian.jira.ComponentManager;
and change:
IssueTypeScreenSchemeManager issueTypeScreenSchemeManager = (IssueTypeScreenSchemeManager) ComponentManager.getComponentInstanceOfType(IssueTypeScreenSchemeManager.class);
by
IssueTypeScreenSchemeManager issueTypeScreenSchemeManager = (IssueTypeScreenSchemeManager) ComponentAccessor.getComponent(IssueTypeScreenSchemeManager.class);
That’s all!
LikeLike