@Override
protected Object doExecute() throws Exception {
String latestVersion = null;
ProfileService profileService = fabricService.adapt(ProfileService.class);
List<String> versions = profileService.getVersions();
if (versions.size() > 0) {
latestVersion = versions.get(versions.size() - 1);
}
if (versionId == null) {
IllegalStateAssertion.assertNotNull(latestVersion, "Cannot default the new version name as there are no versions available");
VersionSequence sequence = new VersionSequence(latestVersion);
versionId = sequence.next().getName();
}
// TODO we maybe want to choose the version which is less than the 'name' if it was specified
// e.g. if you create a version 1.1 then it should use 1.0 if there is already a 2.0
String sourceId = null;
if (parentVersion == null) {
sourceId = latestVersion;
} else {
IllegalStateAssertion.assertTrue(profileService.hasVersion(parentVersion), "Cannot find parent version: " + parentVersion);
sourceId = parentVersion;
}
Version targetVersion;
if (sourceId != null) {
Map<String, String> attributes = description != null ? Collections.singletonMap(Version.DESCRIPTION, description) : null;
targetVersion = profileService.createVersionFrom(sourceId, versionId, attributes);
System.out.println("Created version: " + versionId + " as copy of: " + sourceId);
} else {
VersionBuilder builder = VersionBuilder.Factory.create(versionId);
if (description != null) {
builder.addAttribute(Version.DESCRIPTION, description);
}
targetVersion = profileService.createVersion(builder.getVersion());
System.out.println("Create version: " + versionId);
}
if (defaultVersion == Boolean.TRUE) {
fabricService.setDefaultVersionId(targetVersion.getId());