Search in sources :

Example 1 with SerialVersionLabelPolicy

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);
}
Also used : Version(org.alfresco.service.cmr.version.Version) SerialVersionLabelPolicy(org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy)

Example 2 with SerialVersionLabelPolicy

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);
    }
}
Also used : NodeRef(org.alfresco.service.cmr.repository.NodeRef) Version(org.alfresco.service.cmr.version.Version) QName(org.alfresco.service.namespace.QName) SerialVersionLabelPolicy(org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy)

Example 3 with SerialVersionLabelPolicy

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;
}
Also used : CalculateVersionLabelPolicy(org.alfresco.repo.version.VersionServicePolicies.CalculateVersionLabelPolicy) VersionServiceException(org.alfresco.service.cmr.version.VersionServiceException) SerialVersionLabelPolicy(org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy)

Aggregations

SerialVersionLabelPolicy (org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicy)3 Version (org.alfresco.service.cmr.version.Version)2 CalculateVersionLabelPolicy (org.alfresco.repo.version.VersionServicePolicies.CalculateVersionLabelPolicy)1 NodeRef (org.alfresco.service.cmr.repository.NodeRef)1 VersionServiceException (org.alfresco.service.cmr.version.VersionServiceException)1 QName (org.alfresco.service.namespace.QName)1