public boolean needToVersionRegistryObject(RegistryObjectType ro) throws RegistryException { boolean needToVersion = true; BindingUtility bu = BindingUtility.getInstance(); boolean newObject = false; try { needToVersion = isVersionableClass(ro); if (needToVersion) { HashMap slotsMap; // Honour dontVersion flag if specified on request if (!context.getRegistryRequestStack().empty()) { slotsMap = bu.getSlotsFromRequest(context.getCurrentRegistryRequest()); if (slotsMap.containsKey(bu.CANONICAL_SLOT_LCM_DONT_VERSION)) { String val = (String) slotsMap.get(bu.CANONICAL_SLOT_LCM_DONT_VERSION); if (val.trim().equalsIgnoreCase("true")) { needToVersion = false; } } } // Honour dontVersion flag if specified on ro slotsMap = bu.getSlotsFromRegistryObject(ro); if (slotsMap.containsKey(bu.CANONICAL_SLOT_LCM_DONT_VERSION)) { String val = (String) slotsMap.get(bu.CANONICAL_SLOT_LCM_DONT_VERSION); if (val.trim().equalsIgnoreCase("true")) { needToVersion = false; } } } // TODO: // Need to investigate case where not versioning and it is a new object. // Need unit test for this case. if (needToVersion) { versions = getAllRegistryObjectVersions(ro); if (versions.size() == 0) { // If there are any existing versions (ie. ro's with same LID) then we need to // version // This is a new ro and therefor need not be versioned needToVersion = false; newObject = true; } } // Must set versionName to match latest versionName if existing object // or set to version 1.1 if new object. if (!needToVersion) { RegistryObjectType lastVersion = getLatestVersionOfRegistryObject(ro); String versionName = null; if (lastVersion == null) { versionName = "1.1"; } else { versionName = lastVersion.getVersionInfo().getVersionName(); // Must bump up versionName for new objects if (newObject) { versionName = nextVersion(versionName); } } VersionInfoType versionInfo = ro.getVersionInfo(); if (versionInfo == null) { versionInfo = bu.rimFac.createVersionInfoType(); ro.setVersionInfo(versionInfo); } versionInfo.setVersionName(versionName); if (!context.getRegistryRequestStack().empty()) { setVersionInfoComment(versionInfo); } } } catch (JAXBException e) { throw new RegistryException(e); } return needToVersion; }
public boolean needToVersionRepositoryItem(ExtrinsicObjectType eo, RepositoryItem riNew) throws RegistryException { boolean needToVersion = true; try { // dontVersion eo imples dontVersion ro needToVersion = needToVersionRegistryObject(eo); if (needToVersion) { // This is an existing object not a newly submitted object // See if repository item has changed or not. HashMap slotsMap; // Honour dontVersion flag if specified on request if (!context.getRegistryRequestStack().empty()) { slotsMap = bu.getSlotsFromRequest(context.getCurrentRegistryRequest()); if (slotsMap.containsKey(bu.CANONICAL_SLOT_LCM_DONT_VERSION_CONTENT)) { String val = (String) slotsMap.get(bu.CANONICAL_SLOT_LCM_DONT_VERSION_CONTENT); if (val.trim().equalsIgnoreCase("true")) { needToVersion = false; } } } // Honour dontVersion flag if specified on ro slotsMap = bu.getSlotsFromRegistryObject(eo); if (slotsMap.containsKey(bu.CANONICAL_SLOT_LCM_DONT_VERSION_CONTENT)) { String val = (String) slotsMap.get(bu.CANONICAL_SLOT_LCM_DONT_VERSION_CONTENT); if (val.trim().equalsIgnoreCase("true")) { needToVersion = false; } } } if (needToVersion) { if (riNew == null) { needToVersion = false; return needToVersion; } else { RepositoryItem riOld = null; try { riOld = rm.getRepositoryItem(eo.getId()); } catch (RepositoryItemNotFoundException e) { // It is possible that there is no RepositoryItem yet. // Ignore the exception. } catch (ObjectNotFoundException e) { // It is possible that there is no RepositoryItem yet. // Ignore the exception. } if (riOld == null) { needToVersion = false; } else { if (repositoryItemsAreIdentical(riOld, riNew)) { needToVersion = false; } } } } // Must set contentVersionName to match latest versionName if existing object // or set to version 1.1 if new object. if (!needToVersion) { ExtrinsicObjectType lastVersion = (ExtrinsicObjectType) getLatestVersionOfRegistryObject(eo); VersionInfoType contentVersionInfo = eo.getContentVersionInfo(); if (contentVersionInfo == null) { contentVersionInfo = bu.rimFac.createVersionInfoType(); } if (lastVersion == null) { // This is the first ExtrinsicObject version. if (riNew != null) { // This is the first RepositoryItem version. Make sure versionName is "1.1" contentVersionInfo.setVersionName("1.1"); } else { // No repository item means that the contentVersionInfo MUST be set to null contentVersionInfo = null; } } else { // This is not the first ExtrinsicObject version. // Note that contentversionName is set even if no RI is submitted since // it is OK to update just the EO and have new version use last version of RO VersionInfoType lastContentVersionInfo = lastVersion.getContentVersionInfo(); if (lastContentVersionInfo == null) { // Previous version had no repository item String lastContentVersionName = rm.getLatestVersionName(context, eo.getLid()); if (lastContentVersionName != null) { contentVersionInfo.setVersionName(lastContentVersionName); } else { contentVersionInfo.setVersionName("1.1"); } } else { // Previous version had a repository item // Use the last contentVersionName contentVersionInfo.setVersionName(lastContentVersionInfo.getVersionName()); } } eo.setContentVersionInfo(contentVersionInfo); } } catch (JAXBException e) { throw new RegistryException(e); } return needToVersion; }