Author: adamw Date: 2005-09-28 11:28:39 -0400 (Wed, 28 Sep 2005) New Revision: 1228 Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/SimpleTest.java Removed: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/ trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeServiceRemote.java Modified: trunk/forge/portal-extensions/common.xml trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java 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/blog/BlogUpdater.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsNodeWatcher.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/XmlInputFactory.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ForgeManagement.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ResourceWatcher.java trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConDescriptor.java trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConNodeWatcher.java trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConServer.java trunk/forge/portal-extensions/forge-file-access/src/java/org/jboss/forge/fileaccess/FileAccessFilter.java trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationDescriptor.java trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationNodeWatcher.java trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationTools.java trunk/forge/portal-extensions/forge-service/project.xml trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java trunk/forge/portal-extensions/jbosswiki/ trunk/forge/portal-extensions/jbosswiki/forge-wiki/ trunk/forge/portal-extensions/jbosswiki/wiki-common/ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/ trunk/forge/portal-extensions/jbosswiki/wiki-management/ trunk/forge/portal-extensions/maven.xml trunk/forge/portal-extensions/project.properties trunk/forge/portal-extensions/shotoku/maven.xml trunk/forge/portal-extensions/shotoku/project.properties trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java trunk/forge/portal-extensions/shotoku/shotoku-svn-service/project.properties trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.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/SvnContentManager.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHistoricNode.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewDirectory.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewNode.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNode.java Log: Shotoku instead of CM in forge-common Modified: trunk/forge/portal-extensions/common.xml =================================================================== --- trunk/forge/portal-extensions/common.xml 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/common.xml 2005-09-28 15:28:39 UTC (rev 1228) @@ -42,6 +42,16 @@ <version>1.0</version> <jar>portal-portlet-lib.jar</jar> </dependency> + + <dependency> + <groupId>shotoku</groupId> + <artifactId>shotoku-base</artifactId> + <version>1.0</version> + <jar>shotoku-base.jar</jar> + <properties> + <ejb.manifest.classpath>true</ejb.manifest.classpath> + </properties> + </dependency> </dependencies> <build> Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -14,7 +14,8 @@ import javax.servlet.*; import javax.servlet.http.HttpServletRequest; -import org.jboss.forge.common.content.ContentManager; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; /** * A filter for reading JSP (and html, text etc) files from a file repository @@ -50,12 +51,12 @@ */ private int repoAccessDirLength; - private ContentManager contentReader; + private ContentManager contentManager; public void init(FilterConfig conf) { separator = '/'; repoAccessDirLength = ForgeHelper.REPO_ACCESS_DIR.length(); - contentReader = ForgeHelper.getContentManager(""); + contentManager = ForgeHelper.getContentManager(""); // Constructing the base path. basePath = conf.getServletContext().getRealPath("") + separator @@ -74,6 +75,7 @@ .indexOf(ForgeHelper.REPO_ACCESS_DIR) + repoAccessDirLength + 1); + Node requestedNode = contentManager.getNode(requestedFile); if (requestedFile.toLowerCase().endsWith("jsp")) { // If the requested page is a jsp, then we copy it and dispatch // a request for it @@ -81,15 +83,14 @@ + separator + requestedFile.substring(0, requestedFile .lastIndexOf(separator))).mkdirs(); - contentReader.copyResourceToFile(requestedFile, basePath - + separator + requestedFile); + requestedNode.copyToFile(basePath + separator + requestedFile); request.getRequestDispatcher( separator + COPIED_TO_REPO_DIR + separator + requestedFile).include(request, response); } else // If it is not a jsp, then we just print its contents. - response.getWriter().write(contentReader.read(requestedFile)); + response.getWriter().write(requestedNode.getContent()); } else { response.setContentType("text/html"); response.getWriter().write(WRONG_REQ_RESP); 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-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -20,12 +20,11 @@ import javax.portlet.PortalContext; import org.jboss.forge.common.blog.BlogUpdater; -import org.jboss.forge.common.content.ContentManager; -import org.jboss.forge.common.content.SvnContentManager; import org.jboss.forge.common.service.ForgeManagement; import org.jboss.mx.util.MBeanProxyExt; import org.jboss.mx.util.MBeanServerLocator; import org.jboss.portlet.JBossRenderRequest; +import org.jboss.shotoku.ContentManager; import org.w3c.dom.Node; /** @@ -146,9 +145,7 @@ * @return An instance of a ready-to-use content manager. */ public static ContentManager getContentManager(String prefix) { - return new SvnContentManager(props.getSvnPath() + prefix, - props.getLocalPath() + prefix, - props.getSvnUsername(), props.getSvnPassword()); + return ContentManager.getContentManager(prefix); } /** Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/BlogUpdater.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/BlogUpdater.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/BlogUpdater.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -16,11 +16,15 @@ import java.io.PrintWriter; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import org.jboss.forge.common.ForgeHelper; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.projects.ProjectsHelper; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Directory; +import org.jboss.shotoku.Node; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; /** * A blog updater - updates blog entries based on what can be found in the content repository. @@ -28,14 +32,12 @@ * @author adamw */ public class BlogUpdater { - private ContentManager cm; private String blogPath; - private String[] portals; + private List<Directory> portals; public BlogUpdater(ContentManager cm, String blogPath) { - this.cm = cm; this.blogPath = blogPath; - portals = cm.getDirectories(""); + portals = cm.getRootDirectory().getDirectories(); } /** @@ -69,43 +71,53 @@ * Updates blog entries for a specific portal. * @param portalName Name of the portal which entries to update. */ - private void updatePortal(String portalName) { + private void updatePortal(Directory portal) { // Getting ids of all projects in the given portal - String projectIds[] = cm.getDirectories(portalName + "/" - + ProjectsHelper.MEMBERS_DIR); + List<Directory> projects; + try { + projects = portal.getDirectory( + ProjectsHelper.MEMBERS_DIR).getDirectories(); + } catch (ResourceDoesNotExist e) { + // Means that this is not a portal directory. + return; + } - for (int i = 0; i < projectIds.length; i++) { + for (Directory project : projects) { // Getting blog entries that are held in the repository. - String[] repoEntries = cm.getResources(portalName + "/" - + ProjectsHelper.MEMBERS_DIR + "/" + projectIds[i] - + "/" + ProjectsHelper.BLOG_DIR); + List<Node> repoEntries; + try { + repoEntries = project.getDirectory( + ProjectsHelper.BLOG_DIR).getNodes().toList(); + } catch (ResourceDoesNotExist e) { + // No blog in this project. + return; + } // Getting blog entries that are now present in blojsom. String[] blogEntries = new File(blogPath + File.separator - + projectIds[i]).list(new FilenameFilter() { + + project.getName()).list(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".html"); } }); - Set<String> repoEntriesSet = createSetFromStringArray(repoEntries); + Set<String> repoEntriesSet = new HashSet<String>(); + for (Node entry : repoEntries) + repoEntriesSet.add(entry.getName()); + Set<String> blogEntriesSet = createSetFromStringArray(blogEntries); - for (int j = 0; j < repoEntries.length; j++) { + for (Node entry : repoEntries) { // Checking only html files - if (repoEntries[j].endsWith(".html")) { + if (entry.getName().endsWith(".html")) { String blogFilename = blogPath + File.separator - + projectIds[i] + File.separator + repoEntries[j]; - String repoFilename = portalName + "/" - + ProjectsHelper.MEMBERS_DIR + "/" - + projectIds[i] + "/" + ProjectsHelper.BLOG_DIR - + "/" + repoEntries[j]; + + project.getName() + File.separator + entry.getName(); File blogFile = new File(blogFilename); boolean blogFileCreated = false; - if (!blogEntriesSet.contains(repoEntries[j])) { + if (!blogEntriesSet.contains(entry.getName())) { // New blog entry, creating. try { @@ -122,17 +134,17 @@ // Creating the meta file String blogMetaFilename = blogPath + File.separator - + projectIds[i] + + project.getName() + File.separator - + ForgeHelper.replace(repoEntries[j], + + ForgeHelper.replace(entry.getName(), ".html", ".meta"); File blogMetaFile = new File(blogMetaFilename); blogMetaFile.createNewFile(); String metaContent = "blog-entry-author=" - + projectIds[i] + "\n"; + + project.getName() + "\n"; metaContent += "blog-entry-metadata-timestamp=" - + cm.getLastModification(repoFilename) + + entry.getLastModfication() + "\n"; writeToFile(blogMetaFile, metaContent); @@ -145,19 +157,18 @@ long blogFileLastModified; if (blogFileCreated) - blogFileLastModified = cm - .getLastModification(repoFilename); + blogFileLastModified = entry.getLastModfication(); else blogFileLastModified = blogFile.lastModified(); // If the entry already is in the blog, checking if it has // been changed (or just created). if ((blogFileCreated) - || (blogFileLastModified != cm - .getLastModification(repoFilename))) { + || (blogFileLastModified != + entry.getLastModfication())) { // Modification found, or a new entry - putting content. try { - writeToFile(blogFile, cm.read(repoFilename)); + writeToFile(blogFile, entry.getContent()); blogFile.setLastModified(blogFileLastModified); } catch (IOException e) { @@ -171,10 +182,10 @@ blogEntriesSet.removeAll(repoEntriesSet); for (Iterator iter = blogEntriesSet.iterator(); iter.hasNext();) { String blogEntry = ((String) iter.next()); - String blogFilename = blogPath + File.separator + projectIds[i] + String blogFilename = blogPath + File.separator + project.getName() + File.separator + blogEntry; String blogMetaFilename = blogPath + File.separator - + projectIds[i] + File.separator + + project.getName() + File.separator + ForgeHelper.replace(blogEntry, ".html", ".meta"); new File(blogFilename).delete(); @@ -184,7 +195,7 @@ } public void update() { - for (int i=0; i<portals.length; i++) - updatePortal(portals[i]); + for (Directory portal : portals) + updatePortal(portal); } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -9,12 +9,12 @@ package org.jboss.forge.common.portlet; import org.jboss.forge.common.ForgeHelper; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.service.NodeWatcher; import org.jboss.forge.common.service.ResourceWatcher; import org.jboss.portlet.JBossPortlet; import org.jboss.portlet.JBossRenderRequest; import org.jboss.portlet.JBossRenderResponse; +import org.jboss.shotoku.ContentManager; import javax.portlet.*; @@ -161,7 +161,7 @@ * @throws IOException */ public String readFile(String filename) throws IOException { - return cm.read(filename); + return cm.getNode(filename).getContent(); } /** Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -9,9 +9,9 @@ package org.jboss.forge.common.projects; import org.jboss.forge.common.ForgeHelper; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; +import org.jboss.shotoku.ContentManager; /** * A class which manages creating project and projects descriptors for a given Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsNodeWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsNodeWatcher.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsNodeWatcher.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,8 +1,8 @@ package org.jboss.forge.common.projects; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.service.NodeWatcher; import org.jboss.forge.common.service.ResourceWatcher; +import org.jboss.shotoku.ContentManager; public class ProjectsNodeWatcher implements NodeWatcher { private ResourceWatcher rw; Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/XmlInputFactory.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/XmlInputFactory.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/XmlInputFactory.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -8,10 +8,10 @@ *****************************************/ package org.jboss.forge.common.projects; -import java.io.IOException; import java.io.InputStream; -import org.jboss.forge.common.content.ContentManager; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; import org.xml.sax.InputSource; /** @@ -24,8 +24,8 @@ private ContentManager cm; - private XmlInputFactory(ContentManager cr) { - this.cm = cr; + private XmlInputFactory(ContentManager cm) { + this.cm = cm; } /** @@ -39,8 +39,9 @@ public InputSource getInputSource(String xmlIdentifier) throws XmlNotFoundException { try { - return new InputSource(cm.getInputStream(xmlIdentifier)); - } catch (IOException e) { + return new InputSource(cm.getNode(xmlIdentifier) + .getContentInputStream()); + } catch (ResourceDoesNotExist e) { throw new XmlNotFoundException(); } } @@ -56,8 +57,8 @@ public InputStream getInputStream(String xmlIdentifier) throws XmlNotFoundException { try { - return cm.getInputStream(xmlIdentifier); - } catch (IOException e) { + return cm.getNode(xmlIdentifier).getContentInputStream(); + } catch (ResourceDoesNotExist e) { throw new XmlNotFoundException(); } } @@ -71,7 +72,7 @@ * @return Length of the given resource. */ public long getLength(String identifier) { - return cm.getLength(identifier); + return cm.getNode(identifier).getLength(); } /** @@ -83,7 +84,7 @@ * @return Last modification time of the given resource. */ public long getLastModification(String identifier) { - return cm.getLastModification(identifier); + return cm.getNode(identifier).getLastModfication(); } public static XmlInputFactory getContentReadingInstance(ContentManager cm) { Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ForgeManagement.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ForgeManagement.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ForgeManagement.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -48,17 +48,8 @@ */ public Object forceNodeUpdate(String portalName, String key); /** - * Adds a resource or catalogue to commit queue. - * @param name Name of the resource or catalogue to commit. The name must - * be root-relative. + * Updates the forge: executes update methods of all node watchers. */ - public void addToCommit(String name); - /** - * Updates the forge: - * - updates the repo - * - commits any resources (added by <code>addResourceToCommit(String)</code>) - * - executes update methods of all node watchers. - */ public void update(); /** * Sets the forge timer interval, that is, time that elapses between two calls Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ResourceWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ResourceWatcher.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/service/ResourceWatcher.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -3,7 +3,7 @@ import java.util.HashMap; import java.util.Map; -import org.jboss.forge.common.content.ContentManager; +import org.jboss.shotoku.ContentManager; /** * @author adamw @@ -25,7 +25,7 @@ * @param name Name of the resouce to add. */ public void watchResource(String name) { - lastUpdates.put(name, cm.getLastModification(name)); + lastUpdates.put(name, cm.getNode(name).getLastModfication()); } /** @@ -36,7 +36,7 @@ public boolean checkResources() { boolean ret = false; for (String name : lastUpdates.keySet()) { - long lastModification = cm.getLastModification(name); + long lastModification = cm.getNode(name).getLastModfication(); if (lastModification != lastUpdates.get(name)) { ret = true; lastUpdates.put(name, lastModification); Modified: trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConDescriptor.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConDescriptor.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -11,7 +11,6 @@ import java.util.Map; import java.util.Set; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.projects.XmlInputFactory; import org.jboss.forge.common.projects.elements.ElementDescriptor; import org.jboss.forge.common.projects.elements.ElementsDescriptor; @@ -20,6 +19,7 @@ import org.jboss.forge.common.projects.permissions.NullPermissionsChecker; import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; +import org.jboss.shotoku.ContentManager; import org.w3c.dom.Node; import org.xml.sax.InputSource; @@ -102,7 +102,8 @@ try { // Filling data & notAcceptedData new ElementsDescriptor( - new InputSource(cm.getInputStream(xmlPath)), + new InputSource( + cm.getNode(xmlPath).getContentInputStream()), XmlInputFactory.getContentReadingInstance(cm), AGREEMENT_TAG, getPropertiesHandler()).collect(new Collection[] { Modified: trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConNodeWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConNodeWatcher.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConNodeWatcher.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,8 +1,8 @@ package org.jboss.forge.contributor; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.service.NodeWatcher; import org.jboss.forge.common.service.ResourceWatcher; +import org.jboss.shotoku.ContentManager; public class ConNodeWatcher implements NodeWatcher { private ResourceWatcher rw; Modified: trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConServer.java =================================================================== --- trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConServer.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConServer.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -8,7 +8,6 @@ *****************************************/ package org.jboss.forge.contributor; -import java.io.IOException; import java.text.DateFormat; import java.text.MessageFormat; import java.util.Calendar; @@ -19,12 +18,13 @@ import javax.portlet.PortletURL; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.projects.XmlInputFactory; import org.jboss.forge.common.projects.elements.ElementDescriptor; import org.jboss.forge.common.projects.elements.ElementsDescriptor; import org.jboss.forge.common.projects.elements.PropertiesHandlerDefault; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; import org.xml.sax.InputSource; /** @@ -74,10 +74,6 @@ messages = ResourceBundle.getBundle("Messages", currentLocale); } - private void addToToCommit(String toAdd) { - ForgeHelper.getForgeManagement().addToCommit(toAdd); - } - ResourceBundle getMessages() { return messages; } @@ -131,14 +127,14 @@ try { // Values ok, adding application. - String xmlFilePath = getConfirmedFilePath(); - String content = cm.read(xmlFilePath); + Node confirmed = cm.getNode(getConfirmedFilePath()); + String content = confirmed.getContent(); String newContent = ForgeHelper.replace(content, oldXml, newXml); - cm.write(xmlFilePath, newContent, false); - addToToCommit(getBaseFilePath()); + confirmed.setContent(newContent); + confirmed.save("New application accepted"); // Posting a notification to the contributor ForgeHelper.postMail(dataBean.getEmail(), @@ -173,20 +169,18 @@ try { // Values ok, adding application. - String xmlFilePath = getConfirmedFilePath(); - String content = cm.read(xmlFilePath); + Node confirmed = cm.getNode(getConfirmedFilePath()); + String content = confirmed.getContent(); String newContent = ForgeHelper.replace(content, oldXml, ""); - cm.write(xmlFilePath, newContent, false); - addToToCommit(getBaseFilePath()); + confirmed.setContent(newContent); + confirmed.save("New application deleted"); return true; - } catch (IOException e) { - return false; } finally { - // Sending the "you-are-reject" email anyway. + // Sending the "you-are-reject" email no matter exception or not. try { ForgeHelper.postMail(dataBean.getEmail(), messages.getString("deletedMailSubject"), @@ -212,7 +206,8 @@ ElementDescriptor toConfirm; try { toConfirm = new ElementsDescriptor( - new InputSource(cm.getInputStream(unconfirmedXmlFilePath)), + new InputSource(cm.getNode( + unconfirmedXmlFilePath).getContentInputStream()), XmlInputFactory.getContentReadingInstance(cm), ConDescriptor.AGREEMENT_TAG, new PropertiesHandlerDefault()).getElementWithId(code); @@ -243,9 +238,12 @@ // Writing changes to xml files. try { - String confirmedContent = cm.read(confirmedXmlFilePath); - String unconfirmedContent = cm.read(unconfirmedXmlFilePath); + Node confirmed = cm.getNode(confirmedXmlFilePath); + Node unconfirmed = cm.getNode(unconfirmedXmlFilePath); + String confirmedContent = confirmed.getContent(); + String unconfirmedContent = unconfirmed.getContent(); + confirmedContent = ForgeHelper.replace(confirmedContent, "</"+ConDescriptor.AGREEMENTS_TAG+">", newXml @@ -254,10 +252,12 @@ unconfirmedContent = ForgeHelper.replace(unconfirmedContent, oldXml, ""); - cm.write(confirmedXmlFilePath, confirmedContent, false); - cm.write(unconfirmedXmlFilePath, unconfirmedContent, false); - addToToCommit(getBaseFilePath()); + confirmed.setContent(confirmedContent); + unconfirmed.setContent(unconfirmedContent); + confirmed.save("Confirming new application"); + unconfirmed.save("Confirming new application"); + PortletURL url = ConTools.createRenderURL(); String adminURL = ConTools.getBaseServerAddress() + url.toString(); @@ -334,8 +334,8 @@ String confirmationURL = ConTools.getBaseServerAddress() + url.toString(); - String xmlFilePath = getUnconfirmedFilePath(); - String content = cm.read(xmlFilePath); + Node unconfirmed = cm.getNode(getUnconfirmedFilePath()); + String content = unconfirmed.getContent(); String newContent = ForgeHelper.replace(content, "</"+ConDescriptor.AGREEMENTS_TAG+">", @@ -343,8 +343,8 @@ + "</"+ConDescriptor.AGREEMENTS_TAG+">" ); - cm.write(xmlFilePath, newContent, false); - addToToCommit(getBaseFilePath()); + unconfirmed.setContent(newContent); + unconfirmed.save("Moving application to uncofirmed"); ForgeHelper.postMail(email, messages.getString("confirmMailSubject"), @@ -352,6 +352,7 @@ new Object[] { name, confirmationURL }), "for...@la..."); } catch (Exception e) { + e.printStackTrace(); return messages.getString("unableToAdd"); } Modified: trunk/forge/portal-extensions/forge-file-access/src/java/org/jboss/forge/fileaccess/FileAccessFilter.java =================================================================== --- trunk/forge/portal-extensions/forge-file-access/src/java/org/jboss/forge/fileaccess/FileAccessFilter.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-file-access/src/java/org/jboss/forge/fileaccess/FileAccessFilter.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -21,8 +21,9 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.ForgeHelper; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; /** * A filter that enables to download files which are stored in a working copy of @@ -117,13 +118,14 @@ String mimeType = mimeTypes .getContentType(tokens[tokens.length - 1]); + Node requestedNode = contentManager.getNode(requestedRes); + // Getting the input stream for the requested resource. - InputStream is = contentManager.getInputStream(requestedRes); + InputStream is = requestedNode.getContentInputStream(); // Setting response paramters response.setContentType(mimeType); - response.setContentLength((int) contentManager - .getLength(requestedRes)); + response.setContentLength((int) requestedNode.getLength()); // Getting the output stream of the servlet response. OutputStream os = response.getOutputStream(); Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -12,12 +12,12 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.projects.ProjectsHelper; import org.jboss.portlet.JBossPortlet; import org.jboss.portlet.JBossRenderRequest; import org.jboss.portlet.JBossRenderResponse; +import org.jboss.shotoku.ContentManager; /** * A portlet for a project freezone. @@ -165,9 +165,10 @@ throw new Exception(); // Reading the file. - String pageContent = cm.read(portalName + "/" + String pageContent = cm.getNode(portalName + "/" + ProjectsHelper.MEMBERS_DIR + "/" + projectId + "/" - + ProjectsHelper.FREEZONE_DIR + "/" + pagePath); + + ProjectsHelper.FREEZONE_DIR + "/" + + pagePath).getContent(); if (pageContent == null) throw new Exception(); Modified: trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationDescriptor.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationDescriptor.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -5,10 +5,10 @@ import org.apache.xerces.parsers.DOMParser; import org.jboss.forge.common.ForgeHelper; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.projects.ProjectsHelper; import org.jboss.portal.common.context.DelegateContext; import org.jboss.portlet.JBossRenderRequest; +import org.jboss.shotoku.ContentManager; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.InputSource; @@ -27,8 +27,8 @@ try { // Parsing the xml navigation descriptor. DOMParser parser = new DOMParser(); - parser.parse(new InputSource(cm.getInputStream(NavigationTools - .getXmlCmPath(portalName)))); + parser.parse(new InputSource(cm.getNode(NavigationTools + .getXmlCmPath(portalName)).getContentInputStream())); Document doc = parser.getDocument(); // Looking for the root menu element. Modified: trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationNodeWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationNodeWatcher.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationNodeWatcher.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,8 +1,8 @@ package org.jboss.forge.navigation; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.service.NodeWatcher; import org.jboss.forge.common.service.ResourceWatcher; +import org.jboss.shotoku.ContentManager; public class NavigationNodeWatcher implements NodeWatcher { private ResourceWatcher rw; Modified: trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationTools.java =================================================================== --- trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationTools.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationTools.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,7 +1,7 @@ package org.jboss.forge.navigation; import org.jboss.forge.common.ForgeHelper; -import org.jboss.forge.common.content.ContentManager; +import org.jboss.shotoku.ContentManager; /** * @author adamw Modified: trunk/forge/portal-extensions/forge-service/project.xml =================================================================== --- trunk/forge/portal-extensions/forge-service/project.xml 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-service/project.xml 2005-09-28 15:28:39 UTC (rev 1228) @@ -133,6 +133,15 @@ <ejb.manifest.classpath>true</ejb.manifest.classpath> </properties> </dependency> + + <dependency> + <groupId>shotoku</groupId> + <artifactId>shotoku-svn</artifactId> + <jar>shotoku-svn.jar</jar> + <properties> + <ejb.manifest.classpath>true</ejb.manifest.classpath> + </properties> + </dependency> <dependency> <groupId>jboss</groupId> 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-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,20 +1,15 @@ package org.jboss.forge.service; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; import javax.annotation.EJB; import javax.ejb.Local; -import javax.ejb.Remote; import org.jboss.annotation.ejb.Service; import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.blog.BlogUpdaterNodeWatcher; -import org.jboss.forge.common.content.ContentManager; import org.jboss.forge.common.service.NodeWatcher; import org.jboss.logging.Logger; @@ -24,12 +19,9 @@ */ @Service(objectName=ForgeHelper.FORGE_SERVICE_NAME) @Local(ForgeServiceLocal.class) -@Remote(ForgeServiceRemote.class) -public class ForgeService implements ForgeServiceLocal, ForgeServiceManagement, - ForgeServiceRemote { - private ContentManager cm; +public class ForgeService implements ForgeServiceLocal, + ForgeServiceManagement { private Map<CacheKey, Object> cache; - private Set<String> toCommit; private Map<CacheKey, NodeWatcher> nodeWatchers; private static final Logger log = Logger.getLogger(ForgeService.class); @@ -69,15 +61,6 @@ 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); - } - } - /** * Updates the value of a node with the specified key. * @param ck Key of a node which should be updated. @@ -97,57 +80,11 @@ 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 - first getting the files to commit - so we hold the - // sync lock for as short as possible. - String[] toCommitArray; - synchronized (toCommit) { - 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()) @@ -194,21 +131,11 @@ private ForgeTimerLocal timer; public void start() throws Exception { - // Getting a root-relative content manager. - cm = ForgeHelper.getContentManager(); - cache = Collections.synchronizedMap( new HashMap<CacheKey, Object>()); nodeWatchers = Collections.synchronizedMap( new HashMap<CacheKey, NodeWatcher>()); - toCommit = new HashSet<String>(); - // First repo update & possible checkout. - try { - cm.update(); - } catch (Exception e) { - log.warn(e); - e.printStackTrace(); - } + // Adding blog updater node watcher. addNodeWatcher(null, BlogUpdaterNodeWatcher.class.getName(), new BlogUpdaterNodeWatcher()); Deleted: trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeServiceRemote.java =================================================================== --- trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeServiceRemote.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeServiceRemote.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,4 +0,0 @@ -package org.jboss.forge.service; - -public interface ForgeServiceRemote { -} Property changes on: trunk/forge/portal-extensions/jbosswiki ___________________________________________________________________ Name: svn:ignore + target Property changes on: trunk/forge/portal-extensions/jbosswiki/forge-wiki ___________________________________________________________________ Name: svn:ignore + target Property changes on: trunk/forge/portal-extensions/jbosswiki/wiki-common ___________________________________________________________________ Name: svn:ignore + target Property changes on: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki ___________________________________________________________________ Name: svn:ignore + filedatasource.properties Property changes on: trunk/forge/portal-extensions/jbosswiki/wiki-management ___________________________________________________________________ Name: svn:ignore + target Modified: trunk/forge/portal-extensions/maven.xml =================================================================== --- trunk/forge/portal-extensions/maven.xml 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/maven.xml 2005-09-28 15:28:39 UTC (rev 1228) @@ -72,6 +72,11 @@ <ant:filename name="*.jar" /> </ant:fileset> </ant:copy> + <ant:copy todir="${forge.ear.dir}/target/${forge.ear.name}" flatten="true"> + <ant:fileset dir="${maven.repo.local}/shotoku/jars"> + <ant:filename name="*.jar" /> + </ant:fileset> + </ant:copy> <!-- Deploying the ear --> <ant:copy todir="${local.deploy.dir}"> @@ -91,10 +96,13 @@ <ant:fileset dir="binaries/maven-repo-addons" /> </ant:copy> + <maven:reactor includes="shotoku/project.xml" excludes="" basedir="." + banner="Making shotoku for the repo" + goals="clean,build" ignoreFailures="false" /> + <maven:reactor includes="forge-common/project.xml" excludes="" basedir="." banner="Making forge-common for the repo" goals="clean,jar" ignoreFailures="false" /> - <ant:copy todir="${maven.repo.local}/jboss-forge/jars"> <ant:fileset dir="forge-common/target"> <ant:include name="*.jar" /> @@ -193,6 +201,7 @@ </goal> <goal name="deploy"> + <ant:delete dir="${local.deploy.dir}/${forge.ear.name}" /> <j:set var="goal" value="deploy" /> <attainGoal name="multiproject:goal" /> <attainGoal name="deploy-ear" /> @@ -200,6 +209,7 @@ <!-- Convenience goal that does clean, build, deploy --> <goal name="all"> + <ant:delete dir="${local.deploy.dir}/${forge.ear.name}" /> <ant:delete dir="${forge.ear.dir}/target" /> <attainGoal name="prepare-repo" /> Modified: trunk/forge/portal-extensions/project.properties =================================================================== --- trunk/forge/portal-extensions/project.properties 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/project.properties 2005-09-28 15:28:39 UTC (rev 1228) @@ -7,8 +7,6 @@ forge.ear.name=jboss-forge.ear forge.ear.dir=forge-ear -maven.multiproject.excludes=shotoku/project.xml - ## Specify these properties if you are behind a proxy server ##maven.proxy.host ##maven.proxy.port Modified: trunk/forge/portal-extensions/shotoku/maven.xml =================================================================== --- trunk/forge/portal-extensions/shotoku/maven.xml 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/maven.xml 2005-09-28 15:28:39 UTC (rev 1228) @@ -6,31 +6,36 @@ <project xmlns:j="jelly:core" xmlns:ant="jelly:ant" xmlns:u="jelly:util" xmlns:maven="jelly:maven"> <goal name="all"> <attainGoal name="clean" /> - <attainGoal name="build" /> - <attainGoal name="deploy" /> + <j:set var="prefix" value="" /> + <j:set var="goal" value="build" /> + <attainGoal name="shotoku-all-projects" /> + <j:set var="goal" value="deploy" /> + <attainGoal name="shotoku-all-projects" /> </goal> <goal name="shotoku-all-projects"> - <maven:reactor includes="shotoku-base/project.xml" excludes="" basedir="." + <maven:reactor includes="${prefix}shotoku-base/project.xml" excludes="" basedir="." banner="Shotoku base" goals="${goal}" ignoreFailures="false" /> - <maven:reactor includes="shotoku-svn/project.xml" excludes="" basedir="." + <maven:reactor includes="${prefix}shotoku-svn/project.xml" excludes="" basedir="." banner="Shotoku svn" goals="${goal}" ignoreFailures="false" /> - <maven:reactor includes="shotoku-svn-service/project.xml" excludes="" basedir="." + <maven:reactor includes="${prefix}shotoku-svn-service/project.xml" excludes="" basedir="." banner="Shotoku svn service" goals="${goal}" ignoreFailures="false" /> - <maven:reactor includes="shotoku-test/project.xml" excludes="" basedir="." + <maven:reactor includes="${prefix}shotoku-test/project.xml" excludes="" basedir="." banner="Shotoku test" goals="${goal}" ignoreFailures="false" /> </goal> <goal name="build"> + <j:set var="prefix" value="shotoku/" /> <j:set var="goal" value="build" /> <attainGoal name="shotoku-all-projects" /> </goal> <goal name="deploy"> + <j:set var="prefix" value="shotoku/" /> <j:set var="goal" value="deploy" /> <attainGoal name="shotoku-all-projects" /> </goal> Modified: trunk/forge/portal-extensions/shotoku/project.properties =================================================================== --- trunk/forge/portal-extensions/shotoku/project.properties 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/project.properties 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,5 +1,3 @@ maven.repo.remote=http://repository.atlassian.com,http://www.ibiblio.org/maven,http://dist.codehaus.org/ maven.junit.fork=yes -maven.war.src=${basedir}/src/web - -maven.multiproject.includes=shotoku-base/project.xml,shotoku-svn/project.xml,shotoku-svn-service/project.xml,shotoku-test/project.xml +maven.war.src=${basedir}/src/web \ No newline at end of file Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -44,4 +44,10 @@ * @throws RepositoryException */ public void delete() throws RepositoryException; + /** + * Gets the name of this resource (node/ directory). + * @return Name of this resource (node/ directory). An empty string, if + * this is the root directory. + */ + public String getName(); } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -170,6 +170,8 @@ return (ContentManager) constructor.newInstance(new Object[] { id, prefix }); } catch (Exception e) { + // TODO + e.printStackTrace(); return null; } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -4,6 +4,7 @@ import org.jboss.shotoku.exceptions.RepositoryException; import org.jboss.shotoku.exceptions.ResourceAlreadyExists; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; /** * @author adamw Interface that must be implemented by classes which represent @@ -26,8 +27,26 @@ * @throws RepositoryException */ public List<Directory> getDirectories() throws RepositoryException; + + /** + * Gets a node from the given directory with the given name. + * + * @return A node with the given name from this directory. + * @throws RepositoryException + */ + public Node getNode(String name) throws RepositoryException, + ResourceDoesNotExist; /** + * Gets a node from the given directory with the given name. + * + * @return A directory with the given name from this directory. + * @throws RepositoryException + */ + public Directory getDirectory(String name) throws RepositoryException, + ResourceDoesNotExist; + + /** * Creates and returns a new node in this directory. Only after saving, this * node will be visible by other functions. * Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -31,7 +31,7 @@ * Gets a <code>java.util.List</code> representation of this node list. * @return A <code>java.util.List</code> representation of this node list. */ - public List toList() { + public List<Node> toList() { return nodeList; } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -1,5 +1,7 @@ package org.jboss.shotoku.exceptions; public class ResourceDoesNotExist extends RuntimeException { - + public ResourceDoesNotExist(String msg) { + super(msg); + } } 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-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -19,11 +19,13 @@ protected String id; protected String fullPath; protected File file; + protected String name; - public AbstractSvnResource(String id, String fullPath, File file) { + public AbstractSvnResource(String id, String fullPath, File file, String name) { this.file = file; this.fullPath = fullPath; this.id = id; + this.name = name; modifiedProperties = new HashMap<String, String>(); service = Tools.getService(); @@ -71,4 +73,8 @@ modifiedProperties.clear(); } + + public String getName() { + return name; + } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -33,7 +33,7 @@ this.prefix = prefix; this.id = id; - + service = Tools.getService(); } @@ -53,7 +53,7 @@ * @param path Path to the resource in the repository. * @return A <code>java.io.File</code> object for the given path. */ - private File getFileForPath(String path) { + File getFileForPath(String path) { try { return new File( service.getFileSystemPath(id, getPrefixedPath(path))); @@ -67,14 +67,37 @@ return getDirectory(""); } + private String getNameFromPath(String path) { + String name; + + path = path.trim(); + + // Getting the index of last /. + int lastSlash = path.lastIndexOf('/'); + + // If the name ends with a /, getting the part before it. + if ((lastSlash == path.length()-1) && (lastSlash != -1)) { + path = path.substring(0, lastSlash); + lastSlash = path.lastIndexOf('/'); + } + + if (lastSlash != -1) { + name = path.substring(lastSlash+1); + } else + name = path; + + return name; + } + @Override public Node getNode(String path) { File file = getFileForPath(path); if (!file.isFile()) - throw new ResourceDoesNotExist(); + throw new ResourceDoesNotExist(file.getAbsolutePath()); - return new SvnHeadNode(id, getPrefixedPath(path), file); + return new SvnHeadNode(id, getPrefixedPath(path), file, + getNameFromPath(path)); } @Override @@ -82,9 +105,10 @@ File file = getFileForPath(path); if (!file.isDirectory()) - throw new ResourceDoesNotExist(); + throw new ResourceDoesNotExist(file.getAbsolutePath()); - return new SvnDirectory(id, getPrefixedPath(path), file); + return new SvnDirectory(id, getPrefixedPath(path), file, + getNameFromPath(path), this); } @Override Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java 2005-09-27 21:57:39 UTC (rev 1227) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java 2005-09-28 15:28:39 UTC (rev 1228) @@ -10,10 +10,16 @@ import org.jboss.shotoku.NodeList; import org.jboss.shotoku.exceptions.RepositoryException; import org.jboss.shotoku.exceptions.ResourceAlreadyExists; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; public class SvnDirectory extends AbstractSvnResource implements Directory { - public SvnDirectory(String id, String fullPath, File file) { - super(id, fullPath, file); + SvnContentManager svnCm; + + public SvnDirectory(String id, String fullPath, File file, String name, + SvnContentManager svnCm) { + super(id, fullPath, file, name); + + this.svnCm = svnCm; } public NodeList getNodes() { @@ -21,7 +27,7 @@ try { // Filtering files from this directory and adding them. - for (String directory : new File(service.getFileSystemPath(id, + for (String node : new File(service.getFileSystemPath(id, fullPath)).list(new FilenameFilter() { public boolean accept(File dir, String name) { if (new File(dir.getAbsolutePath() + File.separator + name) @@ -30,9 +36,9 @@ return true; } })) { - String childFullPath = fullPath + '/' + directory; + String childFullPath = fullPath + '/' + node; ret.add(new SvnHeadNode(id, childFullPath, new File(service - .getFileSystemPath(id, childFullPath)))); + .getFileSystemPath(id, childFullPath)), node)); } } catch (SvnOperationFailed e) { throw new RepositoryException(e); @@ -59,7 +65,8 @@ })) { String childFullPath = fullPath + '/' + directory; ret.add(new SvnDirectory(id, childFullPath, new File(service - .getFileSystemPath(id, childFullPath)))); + .getFileSystemPath(id, childFullPath)), directory, + svnCm)); } } catch (SvnOperationFailed e) { throw new RepositoryException(e); @@ -67,7 +74,25 @@ return ret; } + + public Node getNode(String name) throws RepositoryException, ResourceDoesNotExist { + String reqFullPath = fullPath + "/" + name; + File reqNode = svnCm.getFileForPath(reqFullPath); + if (!reqNode.isFile()) + throw new ResourceDoesNotExist(file.getAbsolutePath()); + + return new SvnHeadNode(id, reqFullPath, reqNode, name); + } + public Directory getDirectory(String name) throws RepositoryException, ResourceDoesNotExist { + String reqFullPath = fullPath + "/" + name; + File reqDir = svnCm.getFileForPath(reqFullPath);... [truncated message content] |