You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2006/02/20 12:11:10 UTC
svn commit: r379085 - in
/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core:
ItemValidator.java version/AbstractVersionManager.java
Author: tripod
Date: Mon Feb 20 03:11:07 2006
New Revision: 379085
URL: http://svn.apache.org/viewcvs?rev=379085&view=rev
Log:
- adjust generation of version names
- suppress error message in ItemValidator
Modified:
incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemValidator.java
incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemValidator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemValidator.java?rev=379085&r1=379084&r2=379085&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemValidator.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/ItemValidator.java Mon Feb 20 03:11:07 2006
@@ -32,6 +32,7 @@
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
+import javax.jcr.ItemNotFoundException;
import javax.jcr.nodetype.ConstraintViolationException;
import java.util.Set;
@@ -234,7 +235,10 @@
public String safeGetJCRPath(ItemId id) {
try {
return safeGetJCRPath(hierMgr.getPath(id));
- } catch (RepositoryException re) {
+ } catch (ItemNotFoundException e) {
+ // return string representation if id as a fallback
+ return id.toString();
+ } catch (RepositoryException e) {
log.error(id + ": failed to build path");
// return string representation if id as a fallback
return id.toString();
Modified: incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java?rev=379085&r1=379084&r2=379085&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java (original)
+++ incubator/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java Mon Feb 20 03:11:07 2006
@@ -222,45 +222,29 @@
protected InternalVersion checkin(InternalVersionHistoryImpl history, NodeImpl node)
throws RepositoryException {
- // 0. resolve the predecessors
+ // 1. search a predecessor, suitable for generating the new name
Value[] values = node.getProperty(QName.JCR_PREDECESSORS).getValues();
- InternalVersion[] preds = new InternalVersion[values.length];
+ InternalVersion best = null;
for (int i = 0; i < values.length; i++) {
- preds[i] = history.getVersion(NodeId.valueOf(values[i].getString()));
+ InternalVersion pred = history.getVersion(NodeId.valueOf(values[i].getString()));
+ if (best == null || pred.getSuccessors().length < best.getSuccessors().length) {
+ best = pred;
+ }
}
- // 0.1 search a predecessor, suitable for generating the new name
- String versionName = null;
- int maxDots = Integer.MAX_VALUE;
- for (int i = 0; i < preds.length; i++) {
- // take the first pred. without a successor
- if (preds[i].getSuccessors().length == 0) {
- versionName = preds[i].getName().getLocalName(); //assuming no namespaces in version names
- // need to count the dots
- int pos = -1;
- int numDots = 0;
- while (versionName.indexOf('.', pos + 1) >= 0) {
- pos = versionName.indexOf('.', pos + 1);
- numDots++;
- }
- if (numDots < maxDots) {
- maxDots = numDots;
- if (pos < 0) {
- versionName = "1.0";
- } else {
- versionName = versionName.substring(0, pos + 1)
- + (Integer.parseInt(versionName.substring(pos + 1)) + 1);
- }
- }
- break;
- }
+ // 2. generate version name (assume no namespaces in version names)
+ String versionName = best.getName().getLocalName();
+ int pos = versionName.lastIndexOf('.');
+ if (pos>0) {
+ versionName = versionName.substring(0, pos + 1) +
+ (Integer.parseInt(versionName.substring(pos + 1)) + 1);
+ } else {
+ versionName = String.valueOf(best.getSuccessors().length + 1) + ".0";
}
- // if no empty found, generate new name
- if (versionName == null) {
- versionName = preds[0].getName().getLocalName();
- do {
- versionName += ".1";
- } while (history.hasVersion(new QName("", versionName)));
+
+ // 3. check for colliding names
+ while (history.hasVersion(new QName("", versionName))) {
+ versionName += ".1";
}
try {