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; } |