use of org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy in project alfresco-repository by Alfresco.
the class BaseVersionStoreTest method peekNextVersionLabel.
/**
* Gets the next version label
*/
protected String peekNextVersionLabel(NodeRef nodeRef, Map<String, Serializable> versionProperties) {
Version version = this.versionService.getCurrentVersion(nodeRef);
SerialVersionLabelPolicy policy = new SerialVersionLabelPolicy();
return policy.calculateVersionLabel(ContentModel.TYPE_CMOBJECT, version, versionProperties);
}
use of org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy in project alfresco-repository by Alfresco.
the class Version2ServiceImpl method checkForCorruptedVersions.
/**
* Check if versions are marked with invalid version label, if true > apply default serial version label (e.g. "1.0", "1.1")
*
* @param versionHistory a version history node reference
* @param nodeRef a node reference
*/
private void checkForCorruptedVersions(NodeRef versionHistory, NodeRef nodeRef) {
// get the current version label in live store
String versionLabel = (String) this.nodeService.getProperty(nodeRef, ContentModel.PROP_VERSION_LABEL);
if (versionLabel != null && versionLabel.equals("0")) {
// need to correct version labels
List<Version> versions = getAllVersions(versionHistory);
// sort versions by node id
Collections.sort(versions, new Comparator<Version>() {
public int compare(Version v1, Version v2) {
int result = v1.getFrozenModifiedDate().compareTo(v2.getFrozenModifiedDate());
if (result == 0) {
Long dbid1 = (Long) nodeService.getProperty(v1.getFrozenStateNodeRef(), ContentModel.PROP_NODE_DBID);
Long dbid2 = (Long) nodeService.getProperty(v2.getFrozenStateNodeRef(), ContentModel.PROP_NODE_DBID);
if (dbid1 != null && dbid2 != null) {
result = dbid1.compareTo(dbid2);
} else {
result = 0;
if (logger.isWarnEnabled()) {
logger.warn("node-dbid property is missing for versions: " + v1.toString() + " or " + v2.toString());
}
}
}
return result;
}
});
SerialVersionLabelPolicy serialVersionLabelPolicy = new SerialVersionLabelPolicy();
QName classRef = this.nodeService.getType(nodeRef);
Version preceedingVersion = null;
for (Version version : versions) {
// re-calculate version label
versionLabel = serialVersionLabelPolicy.calculateVersionLabel(classRef, preceedingVersion, 0, version.getVersionProperties());
// update version with new version label
NodeRef versionNodeRef = new NodeRef(StoreRef.PROTOCOL_WORKSPACE, version.getFrozenStateNodeRef().getStoreRef().getIdentifier(), version.getFrozenStateNodeRef().getId());
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_VERSION_LABEL, versionLabel);
version.getVersionProperties().put(VersionBaseModel.PROP_VERSION_LABEL, versionLabel);
// remember preceding version
preceedingVersion = version;
}
// update current version label in live store
this.nodeService.setProperty(nodeRef, ContentModel.PROP_VERSION_LABEL, versionLabel);
}
}
use of org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy in project alfresco-repository by Alfresco.
the class AbstractVersionServiceImpl method invokeCalculateVersionLabel.
/**
* Invoke the calculate version label policy behaviour
*
* @param classRef QName
* @param preceedingVersion Version
* @param versionNumber int
* @return String
*/
protected String invokeCalculateVersionLabel(QName classRef, Version preceedingVersion, int versionNumber, Map<String, Serializable> versionProperties) {
String versionLabel = null;
Collection<CalculateVersionLabelPolicy> behaviours = this.calculateVersionLabelDelegate.getList(classRef);
if (behaviours.size() == 0) {
// Default the version label to the SerialVersionLabelPolicy
SerialVersionLabelPolicy defaultVersionLabelPolicy = new SerialVersionLabelPolicy();
versionLabel = defaultVersionLabelPolicy.calculateVersionLabel(classRef, preceedingVersion, versionNumber, versionProperties);
} else if (behaviours.size() == 1) {
// Call the policy behaviour
CalculateVersionLabelPolicy[] arr = behaviours.toArray(new CalculateVersionLabelPolicy[] {});
versionLabel = arr[0].calculateVersionLabel(classRef, preceedingVersion, versionNumber, versionProperties);
} else {
// Error since we can only deal with a single caculate version label policy
throw new VersionServiceException("More than one CalculateVersionLabelPolicy behaviour has been registered for the type " + classRef.toString());
}
return versionLabel;
}
Aggregations