...
Code Block | ||||
---|---|---|---|---|
| ||||
import org.slf4j.*;
import com.deniz.jira.versioning.*;
import com.deniz.jira.versioning.bundles.*;
import com.deniz.jira.versioning.bundles.events.*;
import com.atlassian.jira.bc.project.component.*;
import com.atlassian.jira.project.version.*;
import com.atlassian.jira.project.*;
import com.atlassian.jira.component.ComponentAccessor;
//please enable logging for package "com.deniz.jira.versioning.scripting" from Administration/System/Logging and Profiling
Logger log = LoggerFactory.getLogger(com.deniz.jira.versioning.scripting.ScriptingService.class);
def bundleService = ComponentAccessor.getOSGiComponentInstanceOfType(BundleService.class);
def projectManager = ComponentAccessor.getComponent(ProjectManager.class);
def versionManager = ComponentAccessor.getComponent(VersionManager.class);
def componentManager = ComponentAccessor.getComponent(ProjectComponentManager.class);
def targetProjectKeys = ["ERP", "CLG"];
def event = parameters.event;
def project = parameters.project;
targetProjectKeys.each { targetProjectKey ->
log.debug("Checking for project:{}", targetProjectKey);
def targetProject = projectManager.getProjectByCurrentKey(targetProjectKey);
if (event instanceof BundleCreatedEvent) {
def sourceBundle = event.getBundle();
log.debug("a new bundle is created:{}", sourceBundle);
BundleImp bundle = new BundleImp(sourceBundle);
bundle.id = -1;
bundle.projectId = targetProject.id;
def sourceVersion = versionManager.getVersion(bundle.getVersionId());
if (sourceVersion != null) {
//version is optional for bundles.
def targetProjectVersions = versionManager.getVersions(targetProject);
def targetVersion = targetProjectVersions.find {v -> v.name.equals(sourceVersion.name)};
if (targetVersion == null) {
targetVersion = copyVersion(versionManager, targetProject, sourceVersion);
}
bundle.versionId = targetVersion.id;
}
bundleService.addBundle(bundle, false);
} else if (event instanceof BundleContentAddedEvent) {
def sourceBundleContent = event.bundleContent;
log.debug("Component/Version is aded to bundle:{}", sourceBundleContent.bundleId);
def sourceBundle = bundleService.getBundle(sourceBundleContent.bundleId);
def bundlesWithSameName = bundleService.getBundles(sourceBundle.bundleName);
targetBundle = bundlesWithSameName.find {b -> b.projectId == targetProject.id};
if (targetBundle) {
log.debug("Corresponding bundle in project {} is {}", targetProject.key, targetBundle.id);
def sourceComponentVersion = versionManager.getVersion(sourceBundleContent.versionId);
//clone version if necessary
def targetProjectVersions = versionManager.getVersions(targetProject);
def targetComponentVersion = targetProjectVersions.find {v -> v.name.equals(sourceComponentVersion.name)};
if (targetComponentVersion == null) {
targetComponentVersion = copyVersion(versionManager, targetProject, sourceComponentVersion);
}
//clone project if necessary
def sourceComponent = componentManager.getProjectComponent(sourceBundleContent.componentId);
def targetComponent = componentManager.findByComponentName(targetProject.id, sourceComponent.name);
if (targetComponent == null) {
targetComponent = copyComponent(componentManager, targetProject, sourceComponent);
}
def bundleContent = new BundleContentImp();
bundleContent.versionId = targetComponentVersion.id;
bundleContent.componentId = targetComponent.id;
bundleContent.bundleId = targetBundle.id;
bundleService.addContentToBundle(bundleContent);
}
}
}
def copyVersion(versionManager, targetProject, sourceVersion) {
log.debug("Creating target version '{}' in target project '{}'", sourceVersion.name, targetProject.key);
return versionManager.createVersion(
sourceVersion.name,
sourceVersion.startDate,
sourceVersion.releaseDate,
sourceVersion.description,
targetProject.id,
null, //sequence
sourceVersion.released
);
}
def copyComponent(componentManager, targetProject, sourceComponent) {
log.debug("Creating target component '{}' in target project '{}'", sourceComponent.name, targetProject.key);
return componentManager.create(
sourceComponent.name,
sourceComponent.description,
sourceComponent.lead,
sourceComponent.assigneeType,
targetProject.id
);
}
|
...