From: <jbo...@li...> - 2005-12-09 17:08:04
|
Author: adamw Date: 2005-12-09 12:07:45 -0500 (Fri, 09 Dec 2005) New Revision: 1758 Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Resource.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectoryProxy.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNodeProxy.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnRepoNode.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnResourceProxy.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/operations/CopyDirectoryOperation.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnRepository.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/DummyService.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/StandaloneTest.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/PropertiesTest.java Log: http://jira.jboss.com/jira/browse/JBSHOTOKU-40 http://jira.jboss.com/jira/browse/JBSHOTOKU-43 http://jira.jboss.com/jira/browse/JBSHOTOKU-13 Bug fixes Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Resource.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Resource.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Resource.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -72,7 +72,7 @@ * @return A map of properties associated with this resource. * @throws RepositoryException */ - public Map<String, String> getAllProperties() throws RepositoryException; + public Map<String, String> getProperties() throws RepositoryException; /** * Gets the value of the given property. Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -169,7 +169,7 @@ return getPropertyInternal(name); } - public Map<String, String> getAllProperties() { + public Map<String, String> getProperties() { Map<String, String> ret = getAllPropertiesInternal(); ret.putAll(modifiedProperties); Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectoryProxy.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectoryProxy.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectoryProxy.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -22,7 +22,6 @@ package org.jboss.shotoku.svn; import java.util.List; -import java.util.Map; import org.jboss.shotoku.Directory; import org.jboss.shotoku.Node; @@ -119,11 +118,6 @@ currentDirectory.moveTo(dir, logMessage); } - public Map<String, String> getAllProperties() throws RepositoryException { - checkSwitch(); - return currentDirectory.getAllProperties(); - } - public void copyTo(Directory dir, String newName, String logMessage) throws CopyException { currentDirectory.copyTo(dir, newName, logMessage); Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNodeProxy.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNodeProxy.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNodeProxy.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -24,7 +24,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.Date; -import java.util.Map; import org.jboss.shotoku.Directory; import org.jboss.shotoku.History; @@ -169,9 +168,4 @@ throws CopyException { currentNode.copyTo(dir, newName, logMessage); } - - public Map<String, String> getAllProperties() throws RepositoryException { - checkSwitch(); - return currentNode.getAllProperties(); - } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnRepoNode.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnRepoNode.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnRepoNode.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -25,6 +25,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import org.jboss.shotoku.exceptions.RepositoryException; @@ -98,6 +99,14 @@ SvnTools.getNodeContent(getFullPath(), -1, getSvnCm(), baos, properties); + // Filtering out any svn: properties. + for (Iterator<String> iter = properties.keySet().iterator(); + iter.hasNext();) { + if (iter.next().startsWith("svn:")) { + iter.remove(); + } + } + if (repoContent) { setNodeContent(new NodeContent(baos.toByteArray())); } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnResourceProxy.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnResourceProxy.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnResourceProxy.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -244,4 +244,9 @@ public void setProperty(String name, String value) { currentResource.setProperty(name, value); } + + public Map<String, String> getProperties() throws RepositoryException { + checkSwitch(); + return currentResource.getProperties(); + } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -64,6 +64,32 @@ public boolean isNodeModified(String id, String fullPath); /** + * Tells the service that a whole tree at the given path was modified + * (for example, moved or copied) and it should be read from the + * repository, until the WC is updated (adds this + * path to a "dirty set"). + * + * @param id + * Id of the repository. + * @param fullPath + * Full path to the modified tree. + */ + public void addTreeToModfied(String id, String fullPath); + + /** + * Checks if a the given path isn't in a modified tree and should be read + * straight from the repository (in other words, if it is in a + * "dirty set"). + * + * @param id + * Id of the repository. + * @param fullPath + * Full path to the resource to be checked. + * @return + */ + public boolean isTreeModified(String id, String fullPath); + + /** * Tells the service that a directory at the given path was modified and it * should be read from the repository, until the WC is updated (adds this * path to a "dirty set"). Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/operations/CopyDirectoryOperation.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/operations/CopyDirectoryOperation.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/operations/CopyDirectoryOperation.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -55,7 +55,6 @@ } public void addModifiedPaths(SvnService service) { - service.addDirectoryToModfied(id, destParentPath); - service.addDirectoryToModfied(id, destPath); + service.addTreeToModfied(id, destParentPath); } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnRepository.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -53,9 +53,11 @@ private File wc; private Set<String> modifiedFiles; private Set<String> modifiedDirs; + private Set<String> modifiedTrees; private Set<String> deletedResources; private Set<String> frozenModifiedFiles; private Set<String> frozenModifiedDirs; + private Set<String> frozenModifiedTrees; private Set<String> frozenDeletedResources; private Object synchronizer; @@ -82,10 +84,12 @@ synchronizer = new Object(); + modifiedTrees = new HashSet<String>(); modifiedFiles = new HashSet<String>(); modifiedDirs = new HashSet<String>(); deletedResources = new HashSet<String>(); + frozenModifiedTrees = new HashSet<String>(); frozenModifiedFiles = new HashSet<String>(); frozenModifiedDirs = new HashSet<String>(); frozenDeletedResources = new HashSet<String>(); @@ -145,6 +149,9 @@ frozenModifiedDirs = modifiedDirs; modifiedDirs = new HashSet<String>(); + frozenModifiedTrees = modifiedTrees; + modifiedTrees = new HashSet<String>(); + frozenDeletedResources = deletedResources; deletedResources = new HashSet<String>(); } @@ -185,6 +192,7 @@ frozenDeletedResources.clear(); frozenModifiedFiles.clear(); frozenModifiedDirs.clear(); + frozenModifiedTrees.clear(); } } @@ -206,16 +214,18 @@ */ deleteFromSet(modifiedFiles, suffFullPath); deleteFromSet(modifiedDirs, suffFullPath); + deleteFromSet(modifiedTrees, suffFullPath); deleteFromSet(frozenModifiedFiles, suffFullPath); deleteFromSet(frozenModifiedDirs, suffFullPath); + deleteFromSet(frozenModifiedTrees, suffFullPath); deletedResources.add(suffFullPath); } } - private boolean checkDelete(Set<String> resources, String pathToCheck) { - for (String deletedPath : resources) { - if (pathToCheck.startsWith(deletedPath)) { + private boolean checkPrefixes(Set<String> resources, String path) { + for (String prefix : resources) { + if (path.startsWith(prefix)) { return true; } } @@ -236,8 +246,8 @@ String suffFullPath = Tools.concatenatePaths(fullPath, ""); synchronized (synchronizer) { - if (checkDelete(deletedResources, suffFullPath) || - checkDelete(frozenDeletedResources, suffFullPath)) { + if (checkPrefixes(deletedResources, suffFullPath) || + checkPrefixes(frozenDeletedResources, suffFullPath)) { return true; } } @@ -246,7 +256,9 @@ } public boolean isModified(String fullPath) { - return isNodeModified(fullPath) || isDirectoryModified(fullPath); + return isNodeModified(fullPath, false) || + isDirectoryModified(fullPath, false) || + isTreeModified(fullPath); } public void addNodeToModfied(String fullPath) { @@ -267,11 +279,16 @@ } public boolean isNodeModified(String fullPath) { + return isNodeModified(fullPath, true); + } + + public boolean isNodeModified(String fullPath, boolean checkTree) { String suffFullPath = Tools.concatenatePaths(fullPath, ""); synchronized (synchronizer) { return modifiedFiles.contains(suffFullPath) || - frozenModifiedFiles.contains(suffFullPath); + frozenModifiedFiles.contains(suffFullPath) || + (checkTree && isTreeModified(fullPath)); } } @@ -284,11 +301,37 @@ } public boolean isDirectoryModified(String fullPath) { + return isDirectoryModified(fullPath, true); + } + + public boolean isDirectoryModified(String fullPath, boolean checkTree) { String suffFullPath = Tools.concatenatePaths(fullPath, ""); synchronized (synchronizer) { return modifiedDirs.contains(suffFullPath) || - frozenModifiedDirs.contains(suffFullPath); + frozenModifiedDirs.contains(suffFullPath) || + (checkTree && isTreeModified(fullPath)); } } + + public void addTreeToModfied(String fullPath) { + String suffFullPath = Tools.concatenatePaths(fullPath, ""); + + synchronized (synchronizer) { + modifiedTrees.add(suffFullPath); + } + } + + public boolean isTreeModified(String fullPath) { + String suffFullPath = Tools.concatenatePaths(fullPath, ""); + + synchronized (synchronizer) { + if (checkPrefixes(modifiedTrees, suffFullPath) || + checkPrefixes(frozenModifiedTrees, suffFullPath)) { + return true; + } + } + + return false; + } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -166,7 +166,15 @@ public boolean isNodeModified(String id, String fullPath) { return repositories.get(id).isNodeModified(fullPath); } + + public void addTreeToModfied(String id, String fullPath) { + repositories.get(id).addTreeToModfied(fullPath); + } + public boolean isTreeModified(String id, String fullPath) { + return repositories.get(id).isTreeModified(fullPath); + } + public void addDirectoryToModfied(String id, String fullPath) { repositories.get(id).addDirectoryToModfied(fullPath); } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/DummyService.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/DummyService.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/DummyService.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -105,4 +105,14 @@ } + public void addTreeToModfied(String id, String fullPath) { + // TODO Auto-generated method stub + + } + + public boolean isTreeModified(String id, String fullPath) { + // TODO Auto-generated method stub + return false; + } + } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/StandaloneTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/StandaloneTest.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/test/StandaloneTest.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -426,17 +426,10 @@ cm.save(parent, dir1, dir2, n1, "setup"); - Node original = cm.getNode(TEST_DIR + "/dir1/node1"); - original.copyTo(cm.getDirectory(TEST_DIR + "/dir2"), "node2", "copy-node"); + Directory original = cm.getDirectory(TEST_DIR + "/dir1"); + original.copyTo(cm.getDirectory(TEST_DIR + "/dir2"), "dir3", "copy-dir"); - System.out.println(TEST_CONTENT.equals(original.getContent())); - System.out.println(TEST_CONTENT.equals(cm.getNode(TEST_DIR + "/dir2/node2").getContent())); - /* - // Waiting for a WC update. - Thread.sleep(1000 * 20); - - System.out.println(TEST_CONTENT.equals(cm.getNode(TEST_DIR + "/dir1/node1").getContent())); - System.out.println(TEST_CONTENT.equals(cm.getNode(TEST_DIR + "/dir2/node2").getContent()));*/ + System.out.println(TEST_CONTENT.equals(cm.getNode(TEST_DIR + "/dir2/dir3/node1").getContent())); } finally { try { cm.getDirectory(TEST_DIR).delete(); @@ -446,13 +439,47 @@ } } + private static void checkProperties(Node n) { + Map<String, String> props = n.getProperties(); + + System.out.println(3 == props.size()); + System.out.println("v1".equals(props.get("p1"))); + System.out.println("v2".equals(props.get("p2"))); + System.out.println("v3".equals(props.get("p3"))); + System.out.println(); + } + + public static void propsTest() throws Exception { + try { + Node n0 = cm.getRootDirectory().newNode(TEST_FILE); + n0.save(TEST_FILE); + + Node n = cm.getNode(TEST_FILE); + + n.setProperty("p1", "v1"); + n.setProperty("p2", "v2"); + n.setProperty("p3", "v3"); + n.save("a"); + + checkProperties(n); + + // Waiting for a WC update. + Thread.sleep(1000 * 20); + checkProperties(n); + checkProperties(cm.getNode(TEST_FILE)); + } finally { + cm.getNode(TEST_FILE).delete(); + } + } + public static void main(String[] argv) throws Exception { long now = Calendar.getInstance().getTimeInMillis(); ContentManager.setup(); cm = ContentManager.getContentManager("shotoku-test"); - testCopy(); + propsTest(); + //testCopy(); //multiSaveTest(); //testInject(); //testNested(); Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/PropertiesTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/PropertiesTest.java 2005-12-09 16:56:45 UTC (rev 1757) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/PropertiesTest.java 2005-12-09 17:07:45 UTC (rev 1758) @@ -92,7 +92,7 @@ } private void checkProperties(Node n) { - Map<String, String> props = n.getAllProperties(); + Map<String, String> props = n.getProperties(); assertTrue(3 == props.size()); assertTrue("v1".equals(props.get("p1"))); |