|
From: <jbo...@li...> - 2005-08-23 15:02:19
|
Author: adamw
Date: 2005-08-23 11:02:05 -0400 (Tue, 23 Aug 2005)
New Revision: 923
Modified:
trunk/forge/portal-extensions/forge-common/project.xml
trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java
trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java
trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java
trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java
Log:
Svn repo cleanup after a svn exception
Modified: trunk/forge/portal-extensions/forge-common/project.xml
===================================================================
--- trunk/forge/portal-extensions/forge-common/project.xml 2005-08-23 14:48:06 UTC (rev 922)
+++ trunk/forge/portal-extensions/forge-common/project.xml 2005-08-23 15:02:05 UTC (rev 923)
@@ -79,6 +79,13 @@
<version>1.0</version>
<jar>mail.jar</jar>
</dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>portal-server</artifactId>
+ <version>1.0</version>
+ <jar>portal-server-lib.jar</jar>
+ </dependency>
</dependencies>
<build>
Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java
===================================================================
--- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2005-08-23 14:48:06 UTC (rev 922)
+++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2005-08-23 15:02:05 UTC (rev 923)
@@ -192,21 +192,21 @@
*/
public String getRequestParameter(JBossRenderRequest request,
String paramName) {
- // First trying to read it from the URL (this works, if it is not a
+ // First trying to read it from the URL (this works, if it is not a
// render/ action request).
String URL = request.getURL();
if (URL != null) {
- int prjStart = request.getURL().indexOf(paramName + "=");
- if (prjStart != -1) {
+ int paramStart = request.getURL().indexOf(paramName + "=");
+ if (paramStart != -1) {
String prjName;
// Skipping the <paramName>=
- prjStart += paramName.length() + 1;
- int prjEnd = request.getURL().substring(prjStart).indexOf('&');
- if (prjEnd == -1)
- prjName = URL.substring(prjStart);
+ paramStart += paramName.length() + 1;
+ int paramEnd = request.getURL().substring(paramStart).indexOf('&');
+ if (paramEnd == -1)
+ prjName = URL.substring(paramStart);
else
- prjName = URL.substring(prjStart, prjStart + prjEnd);
+ prjName = URL.substring(paramStart, paramStart + paramEnd);
return prjName;
}
Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java
===================================================================
--- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java 2005-08-23 14:48:06 UTC (rev 922)
+++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java 2005-08-23 15:02:05 UTC (rev 923)
@@ -57,6 +57,15 @@
this.localPath = localPath;
}
+ /**
+ * Performs a cleanup on the repo. This can be called in case of an exception.
+ * @throws SVNException
+ */
+ private void cleanup() throws SVNException {
+ ourClientManager.getWCClient().doCleanup(
+ new File(getSystemFilePath("")));
+ }
+
/* (non-Javadoc)
* @see org.jboss.forge.common.content.ContentManager#update()
*/
@@ -82,7 +91,7 @@
SVNRevision.HEAD, SVNRevision.HEAD, true);
}
} catch (SVNException e) {
- e.printStackTrace();
+ try { cleanup(); } catch (SVNException e1) { e1.printStackTrace(); }
}
}
@@ -99,6 +108,8 @@
ourClientManager.getCommitClient().doCommit(files, false,
"New content", true, true);
} catch (SVNException e) {
+ try { cleanup(); } catch (SVNException e1) { e1.printStackTrace(); }
+
e.printStackTrace();
throw new IOException(e.getMessage());
}
@@ -143,6 +154,7 @@
try {
ourClientManager.getWCClient().doAdd(file, true, false, false, false);
} catch (SVNException e) {
+ try { cleanup(); } catch (SVNException e1) { e1.printStackTrace(); }
throw new IOException("SVN error while adding the new file");
}
}
@@ -194,6 +206,7 @@
try {
ourClientManager.getWCClient().doDelete(file, true, false);
} catch (SVNException e) {
+ try { cleanup(); } catch (SVNException e1) { e1.printStackTrace(); }
throw new IOException("SVN error while deleting the given " +
"resource/catalogue.");
}
Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java
===================================================================
--- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java 2005-08-23 14:48:06 UTC (rev 922)
+++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java 2005-08-23 15:02:05 UTC (rev 923)
@@ -142,9 +142,7 @@
// exist an element with an appropriate id.
if (ed != null) {
addBinding(nodeName, ed);
- ed
- .addBinding(
- opm.getBindingKeyForBound(nodeName),
+ ed.addBinding(opm.getBindingKeyForBound(nodeName),
this);
}
}
Modified: trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java
===================================================================
--- trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java 2005-08-23 14:48:06 UTC (rev 922)
+++ trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java 2005-08-23 15:02:05 UTC (rev 923)
@@ -1,5 +1,6 @@
package org.jboss.forge.service;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -34,6 +35,9 @@
private static final Logger log = Logger.getLogger(ForgeService.class);
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#putToCache(java.lang.String, java.lang.String, java.lang.Object)
+ */
public void putToCache(String portalName, String key, Object value) {
putToCache(new CacheKey(portalName, key), value);
}
@@ -42,6 +46,9 @@
cache.put(ck, value);
}
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#getFromCache(java.lang.String, java.lang.String)
+ */
public Object getFromCache(String portalName, String key) {
return getFromCache(new CacheKey(portalName, key));
}
@@ -50,6 +57,9 @@
return cache.get(ck);
}
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#addNodeWatcher(java.lang.String, java.lang.String, org.jboss.forge.common.service.NodeWatcher)
+ */
public Object addNodeWatcher(String portalName, String key, NodeWatcher nw) {
// Calculating the initial value & putting it into the cache.
Object initialValue = nw.init(portalName);
@@ -60,6 +70,9 @@
return initialValue;
}
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#addToCommit(java.lang.String)
+ */
public void addToCommit(String name) {
synchronized (toCommit) {
toCommit.add(name);
@@ -85,17 +98,57 @@
return newValue == null ? currentValue : newValue;
}
+ /**
+ * Creates an array of only such strings from <code>array</code>, which
+ * don't contain any other string from this array as a prefix.
+ * @param array Array to compact.
+ * @return A modified array with "most general" strings from the given
+ * array.
+ */
+ private String[] compactArray(String[] array) {
+ // First sorting the array to be able to check the strings only once.
+ Arrays.sort(array);
+
+ // Index of the current "most general" string.
+ int lastPrefix = 0;
+ int numberOfElements = array.length;
+ for (int i=1; i<array.length; i++)
+ if ((lastPrefix != i) && (array[i].startsWith(array[lastPrefix]))) {
+ array[i] = null;
+ numberOfElements--;
+ } else
+ lastPrefix = i;
+
+ // Construting an array containing only non-null elements of
+ // <code>array</code>.
+ String[] ret = new String[numberOfElements];
+ int j = 0;
+ for (int i=0; i<array.length; i++)
+ if (array[i] != null) ret[j++] = array[i];
+
+ return ret;
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#update()
+ */
public synchronized void update() {
try {
// Updating repo.
cm.update();
- // Commiting.
+ // Commiting - first getting the files to commit - so we hold the
+ // sync lock for as short as possible.
+ String[] toCommitArray;
synchronized (toCommit) {
- cm.commit(toCommit.toArray(new String[0]));
+ toCommitArray = toCommit.toArray(new String[0]);
toCommit.clear();
}
+ // "Compacting" the array, that is, retaining only the most general
+ // names, as the commiting is recursive.
+ cm.commit(compactArray(toCommitArray));
+
synchronized (nodeWatchers) {
// Updating nodes.
for (CacheKey ck : nodeWatchers.keySet())
@@ -107,6 +160,9 @@
}
}
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#forceNodeUpdate(java.lang.String, java.lang.String)
+ */
public Object forceNodeUpdate(String portalName, String key) {
return updateNode(new CacheKey(portalName, key));
}
@@ -118,10 +174,16 @@
private final static long DEFAULT_TIMER_INTERVAL = 1000*60; // 1 minute
private long timerInterval;
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#setTimerInterval(long)
+ */
public void setTimerInterval(long timerInterval) {
this.timerInterval = timerInterval;
}
+ /* (non-Javadoc)
+ * @see org.jboss.forge.common.service.ForgeManagement#getTimerInterval()
+ */
public long getTimerInterval() {
return timerInterval;
}
|