You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(233) |
Sep
(199) |
Oct
(206) |
Nov
(185) |
Dec
(270) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(232) |
Feb
(426) |
Mar
(623) |
Apr
(592) |
May
(506) |
Jun
(389) |
Jul
(160) |
Aug
(3) |
Sep
(1) |
Oct
(1) |
Nov
(2) |
Dec
(5) |
2007 |
Jan
(1) |
Feb
(1) |
Mar
(2) |
Apr
(2) |
May
(4) |
Jun
(2) |
Jul
|
Aug
(3) |
Sep
(5) |
Oct
(9) |
Nov
(6) |
Dec
(6) |
2008 |
Jan
(3) |
Feb
|
Mar
(1) |
Apr
(3) |
May
(3) |
Jun
(5) |
Jul
(10) |
Aug
(2) |
Sep
(12) |
Oct
(10) |
Nov
(54) |
Dec
(49) |
2009 |
Jan
(19) |
Feb
(13) |
Mar
(20) |
Apr
(24) |
May
(44) |
Jun
(29) |
Jul
(32) |
Aug
(10) |
Sep
(7) |
Oct
(10) |
Nov
(4) |
Dec
(17) |
2010 |
Jan
(14) |
Feb
(5) |
Mar
(23) |
Apr
(50) |
May
(31) |
Jun
(9) |
Jul
(5) |
Aug
(4) |
Sep
(7) |
Oct
(5) |
Nov
(2) |
Dec
(3) |
2011 |
Jan
(12) |
Feb
(5) |
Mar
(5) |
Apr
(3) |
May
(4) |
Jun
(3) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2012 |
Jan
(1) |
Feb
(2) |
Mar
|
Apr
(1) |
May
(1) |
Jun
(2) |
Jul
(4) |
Aug
(1) |
Sep
|
Oct
(1) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2015 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
Author: adamw Date: 2005-09-30 12:14:51 -0400 (Fri, 30 Sep 2005) New Revision: 1248 Removed: trunk/forge/portal-extensions/portal-default/src/java/org/ trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/jboss-web.xml Modified: trunk/forge/portal-extensions/forge-root-redirect/src/java/org/jboss/forge/redirect/RootRedirectFilter.java trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/web.xml Log: Projects and products redirects Modified: trunk/forge/portal-extensions/forge-root-redirect/src/java/org/jboss/forge/redirect/RootRedirectFilter.java =================================================================== --- trunk/forge/portal-extensions/forge-root-redirect/src/java/org/jboss/forge/redirect/RootRedirectFilter.java 2005-09-30 15:52:51 UTC (rev 1247) +++ trunk/forge/portal-extensions/forge-root-redirect/src/java/org/jboss/forge/redirect/RootRedirectFilter.java 2005-09-30 16:14:51 UTC (rev 1248) @@ -14,32 +14,63 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.jboss.forge.common.projects.ProjectsHelper; + /** * @author adamw */ public class RootRedirectFilter implements Filter { - private final static String WRONG_REQ_RESP = "Error accessing the requested resource."; - - public void init(FilterConfig conf) { - - } + /** + * <code>DEFAULT_PORTAL</code> - Name of the portal in which forge pages are in. + */ + private final static String FORGE_PORTAL = "default"; + private final static String WRONG_REQ_RESP = "Error accessing the requested resource."; + + public void init(FilterConfig conf) { + + } + + private boolean checkFirstToken(String token) { + return "projects".equals(token) || "products".equals(token); + } + + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException { + if ((request instanceof HttpServletRequest) + && (response instanceof HttpServletResponse)) { + HttpServletRequest httpRequest = (HttpServletRequest) request; + HttpServletResponse httpResponse = (HttpServletResponse) response; + + String requestURI = httpRequest.getRequestURI(); + String[] tokens = requestURI.split("[/]", 4); + + String redirectTo; + + if ((tokens.length > 3) && (!"".equals(tokens[3])) && (checkFirstToken(tokens[1]))) { + String freezonePage = tokens[3]; + + if (!freezonePage.contains(".")) { + if (!freezonePage.endsWith("/")) freezonePage += "/"; + freezonePage += "index.html"; + } + + redirectTo = ProjectsHelper.createFreezonePageLink(FORGE_PORTAL, + tokens[2], freezonePage); + } else if ((tokens.length > 2) && (!"".equals(tokens[2])) && (checkFirstToken(tokens[1]))) { + redirectTo = ProjectsHelper.getProjects(FORGE_PORTAL).getProjectLink(tokens[2]); + } else if ((tokens.length > 1) && (!"".equals(tokens[1]))) { + redirectTo = "/portal/" + FORGE_PORTAL; + } else { + redirectTo = "/portal"+requestURI; + } - public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) throws IOException { - if ((request instanceof HttpServletRequest) - && (response instanceof HttpServletResponse)) { - HttpServletRequest httpRequest = (HttpServletRequest)request; - HttpServletResponse httpResponse = (HttpServletResponse) response; - - String requestURI = httpRequest.getRequestURI(); - - httpResponse.sendRedirect("/portal"+requestURI); - } else { - response.setContentType("text/html"); - response.getWriter().write(WRONG_REQ_RESP); - } - } - - public void destroy() { - } + httpResponse.sendRedirect(redirectTo); + } else { + response.setContentType("text/html"); + response.getWriter().write(WRONG_REQ_RESP); + } + } + + public void destroy() { + } } Deleted: trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/jboss-web.xml =================================================================== --- trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/jboss-web.xml 2005-09-30 15:52:51 UTC (rev 1247) +++ trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/jboss-web.xml 2005-09-30 16:14:51 UTC (rev 1248) @@ -1,4 +0,0 @@ -<?xml version="1.0"?> -<jboss-web> - <context-root>/projects</context-root> -</jboss-web> Modified: trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/web.xml =================================================================== --- trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/web.xml 2005-09-30 15:52:51 UTC (rev 1247) +++ trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/web.xml 2005-09-30 16:14:51 UTC (rev 1248) @@ -3,14 +3,5 @@ "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> - <filter> - <filter-name>redirectFilter</filter-name> - <filter-class>org.jboss.forge.redirect.RedirectFilter</filter-class> - </filter> - - <filter-mapping> - <filter-name>redirectFilter</filter-name> - <url-pattern>/*</url-pattern> - <dispatcher>REQUEST</dispatcher> - </filter-mapping> + </web-app> \ No newline at end of file |
From: <jbo...@li...> - 2005-09-30 15:53:12
|
Author: adamw Date: 2005-09-30 11:52:51 -0400 (Fri, 30 Sep 2005) New Revision: 1247 Modified: trunk/forge/portal-extensions/binaries/maven-repo-addons/tmate/jars/javasvn-cli.jar trunk/forge/portal-extensions/binaries/maven-repo-addons/tmate/jars/javasvn-javahl.jar trunk/forge/portal-extensions/binaries/maven-repo-addons/tmate/jars/javasvn.jar trunk/forge/portal-extensions/forge-blog/src/java/org/jboss/portlet/blog/BlogPortlet.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.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/SvnHeadNode.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java Log: Bug fix, freezone redirects Modified: trunk/forge/portal-extensions/binaries/maven-repo-addons/tmate/jars/javasvn-cli.jar =================================================================== (Binary files differ) Modified: trunk/forge/portal-extensions/binaries/maven-repo-addons/tmate/jars/javasvn-javahl.jar =================================================================== (Binary files differ) Modified: trunk/forge/portal-extensions/binaries/maven-repo-addons/tmate/jars/javasvn.jar =================================================================== (Binary files differ) Modified: trunk/forge/portal-extensions/forge-blog/src/java/org/jboss/portlet/blog/BlogPortlet.java =================================================================== --- trunk/forge/portal-extensions/forge-blog/src/java/org/jboss/portlet/blog/BlogPortlet.java 2005-09-30 15:44:47 UTC (rev 1246) +++ trunk/forge/portal-extensions/forge-blog/src/java/org/jboss/portlet/blog/BlogPortlet.java 2005-09-30 15:52:51 UTC (rev 1247) @@ -66,8 +66,7 @@ public void doView(JBossRenderRequest request, JBossRenderResponse response) throws IOException { - - response.setContentType("text/html"); + response.setContentType("text/html"); PortalContext portalCtx = request.getPortalContext(); @@ -121,7 +120,7 @@ boolean isMainPortlet = false; if (mainportlet != null) isMainPortlet = mainportlet.equals("yes"); - + // Name of the entry to expand String blogLink = ForgeHelper.getRequestParameter(request, "link"); if (blogLink != null) @@ -179,8 +178,10 @@ projectId, portalName, feedTypeFreeAddress); ProjectsHelper.prepareRequest(request); + writePage(request, response, ForgeHelper.createRepoAccessPath( portalName, getJsp(request))); + response.setTitle("Blog"); } 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-30 15:44:47 UTC (rev 1246) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java 2005-09-30 15:52:51 UTC (rev 1247) @@ -74,7 +74,7 @@ String requestedFile = requestURI.substring(requestURI .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 Modified: trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.java =================================================================== --- trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.java 2005-09-30 15:44:47 UTC (rev 1246) +++ trunk/forge/portal-extensions/portal-default/src/java/org/jboss/forge/redirect/RedirectFilter.java 2005-09-30 15:52:51 UTC (rev 1247) @@ -43,11 +43,21 @@ HttpServletResponse httpResponse = (HttpServletResponse) response; String requestURI = httpRequest.getRequestURI(); - String[] tokens = requestURI.split("[/]"); + String[] tokens = requestURI.split("[/]", 4); String redirectTo; - if ((tokens.length > 2) && (!tokens[2].equals(""))) + if ((tokens.length > 3) && (!"".equals(tokens[3]))) { + String freezonePage = tokens[3]; + + if (!freezonePage.contains(".")) { + if (!freezonePage.endsWith("/")) freezonePage += "/"; + freezonePage += "index.html"; + } + + redirectTo = ProjectsHelper.createFreezonePageLink(FORGE_PORTAL, + tokens[2], freezonePage); + } else if ((tokens.length > 2) && (!"".equals(tokens[2]))) redirectTo = ProjectsHelper.getProjects(FORGE_PORTAL).getProjectLink(tokens[2]); else redirectTo = "/portal/" + FORGE_PORTAL; 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-30 15:44:47 UTC (rev 1246) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-09-30 15:52:51 UTC (rev 1247) @@ -30,7 +30,7 @@ // Compacting fullPath, that is, throwing out unnecessary /. while (fullPath.contains("//")) - fullPath.replace("//", "/"); + fullPath = fullPath.replace("//", "/"); if (fullPath.startsWith("/")) fullPath = fullPath.substring(1); Modified: 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/SvnHeadNode.java 2005-09-30 15:44:47 UTC (rev 1246) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java 2005-09-30 15:52:51 UTC (rev 1247) @@ -32,9 +32,11 @@ fc.read(buff); buff.flip(); - return Charset.forName( + String ret = Charset.forName( System.getProperty("file.encoding")).decode( buff).toString(); + + return ret; } catch (IOException e) { throw new RepositoryException(e); } Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java 2005-09-30 15:44:47 UTC (rev 1246) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java 2005-09-30 15:52:51 UTC (rev 1247) @@ -4,7 +4,7 @@ import junit.framework.TestCase; -public class ShotokuTest extends TestCase { +public abstract class ShotokuTest extends TestCase { protected ContentManager cm; public ShotokuTest() { |
From: <jbo...@li...> - 2005-09-30 15:34:45
|
Author: dam...@jb... Date: 2005-09-30 11:34:31 -0400 (Fri, 30 Sep 2005) New Revision: 1245 Added: branches/forge/rysiek/portal-extensions/ Log: Branching for rysiek intern test. Copied: branches/forge/rysiek/portal-extensions (from rev 1244, trunk/forge/portal-extensions) |
From: <jbo...@li...> - 2005-09-30 15:34:05
|
Author: dam...@jb... Date: 2005-09-30 11:33:54 -0400 (Fri, 30 Sep 2005) New Revision: 1244 Added: branches/forge/rysiek/ Log: Making a branch dir for rysiek |
From: <jbo...@li...> - 2005-09-30 15:33:26
|
Author: dam...@jb... Date: 2005-09-30 11:33:15 -0400 (Fri, 30 Sep 2005) New Revision: 1243 Removed: branches/forge/rysiek/ Log: Wrong branch path.. going to redo. |
From: <jbo...@li...> - 2005-09-30 15:15:12
|
Author: dam...@jb... Date: 2005-09-30 11:15:02 -0400 (Fri, 30 Sep 2005) New Revision: 1242 Added: branches/forge/rysiek/ Log: Branching trunk for Rysiek to do his portal test. Copied: branches/forge/rysiek (from rev 1241, trunk/forge/portal-extensions) |
Author: adamw Date: 2005-09-30 10:10:39 -0400 (Fri, 30 Sep 2005) New Revision: 1240 Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/SimpleDirectoryTest.java Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.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/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/SvnNewDirectory.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewNode.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/PropertiesTest.java Log: Properties bug workaround, directory creating, more tests 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-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -21,12 +21,23 @@ protected File file; protected String name; - public AbstractSvnResource(String id, String fullPath, File file, String name) { + public AbstractSvnResource(String id, String resFullPath, File file, String name) { this.file = file; - this.fullPath = fullPath; this.id = id; this.name = name; + fullPath = resFullPath; + + // Compacting fullPath, that is, throwing out unnecessary /. + while (fullPath.contains("//")) + fullPath.replace("//", "/"); + + if (fullPath.startsWith("/")) + fullPath = fullPath.substring(1); + + if (fullPath.endsWith("/")) + fullPath = fullPath.substring(0, fullPath.length() - 1); + modifiedProperties = new HashMap<String, String>(); service = Tools.getService(); } @@ -61,14 +72,10 @@ * Saves modified properties, if any, and clears the modified * properties map. */ - protected void save() { + protected void save() throws SvnOperationFailed { for (String name : modifiedProperties.keySet()) { - try { - service.setProperty(id, fullPath, name, - modifiedProperties.get(name)); - } catch (SvnOperationFailed e) { - throw new RepositoryException(e); - } + service.setProperty(id, fullPath, name, + modifiedProperties.get(name)); } modifiedProperties.clear(); @@ -78,10 +85,14 @@ return name; } + protected boolean deleteResource() { + return false; + } + public void delete() { service.getWriteLock(id, fullPath); - if (!file.delete()) { + if (!deleteResource()) { service.putWriteLock(id, fullPath); throw new RepositoryException("Unable to delete: " + fullPath); } 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-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -75,7 +75,15 @@ return ret; } + private void checkName(String name) throws RepositoryException { + if (name.contains("/")) + throw new RepositoryException("A / found in the given name: " + + name); + } + public Node getNode(String name) throws RepositoryException, ResourceDoesNotExist { + checkName(name); + String reqFullPath = fullPath + "/" + name; File reqNode = svnCm.getFileForPrefixedPath(reqFullPath); if (!reqNode.isFile()) @@ -85,6 +93,8 @@ } public Directory getDirectory(String name) throws RepositoryException, ResourceDoesNotExist { + checkName(name); + String reqFullPath = fullPath + "/" + name; File reqDir = svnCm.getFileForPrefixedPath(reqFullPath); if (!reqDir.isDirectory()) @@ -94,6 +104,8 @@ } public Node newNode(String name) { + checkName(name); + String childFullPath = fullPath + '/' + name; try { @@ -109,7 +121,9 @@ } } - public Directory newDirectory(String name) { + public Directory newDirectory(String name) throws RepositoryException { + checkName(name); + String childFullPath = fullPath + '/' + name; try { File newDir = new File(service.getFileSystemPath(id, @@ -123,6 +137,26 @@ throw new RepositoryException(e); } } + + public void save(String logMessage) { + if (!checkForChanges()) return; + + service.getWriteLock(id, fullPath); + + // Saving properties only. + try { + save(); + } catch (SvnOperationFailed e) { + service.putWriteLock(id, fullPath); + throw new RepositoryException(e); + } + + try { + service.commit(id, fullPath, logMessage); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } + } public boolean hasIndex(String propertyName) { throw new RuntimeException("Operation not yet implemented"); @@ -136,11 +170,26 @@ throw new RuntimeException("Operation not yet implemented"); } - public void save(String logMessage) { + public String getLogMessage() { throw new RuntimeException("Operation not yet implemented"); } - public String getLogMessage() { - throw new RuntimeException("Operation not yet implemented"); + private boolean deleteDir(File dir) { + if (dir.isDirectory()) { + String[] children = dir.list(); + for (int i=0; i<children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } + } + } + + // The directory is now empty so delete it + return dir.delete(); } + + protected boolean deleteResource() { + return deleteDir(file); + } } Modified: 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/SvnHeadNode.java 2005-09-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -136,4 +136,8 @@ public String getLogMessage() { throw new RuntimeException("Operation not yet implemented"); } + + protected boolean deleteResource() { + return file.delete(); + } } Modified: 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/SvnNewDirectory.java 2005-09-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewDirectory.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -91,18 +91,31 @@ @Override public void save(String logMessage) { - if (!saved) { + if (saved) { + super.save(logMessage); + } else { + service.getWriteLock(id, fullPath); + file.mkdir(); try { service.add(id, fullPath); + + // Saving properties. + save(); } catch (SvnOperationFailed e) { + service.putWriteLock(id, fullPath); throw new RepositoryException(e); } + + try { + service.commit(id, fullPath, logMessage); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } + saved = true; } - - super.save(logMessage); } @Override Modified: 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/SvnNewNode.java 2005-09-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewNode.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -94,7 +94,7 @@ @Override public void save(String logMessage) throws RepositoryException { if (saved) - super.save(); + super.save(logMessage); else { service.getWriteLock(id, fullPath); @@ -113,6 +113,7 @@ try { service.add(id, fullPath); } catch (SvnOperationFailed e) { + service.putWriteLock(id, fullPath); throw new RepositoryException(e); } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -170,9 +170,6 @@ try { File file = new File(getFileSystemPath(path)); - System.out.println(ourClientManager.getStatusClient().doStatus(file, false). - getContentsStatus()); - // Checking if this item is under version control // already. If not - returning null, as it cannot have // any saved properties. @@ -180,7 +177,7 @@ ourClientManager.getStatusClient().doStatus(file, false). getContentsStatus()) return null; - + SVNPropertyData data = ourClientManager.getWCClient().doGetProperty( file, name, SVNRevision.WORKING, SVNRevision.WORKING, @@ -188,8 +185,12 @@ return data == null ? null : data.getValue(); } catch (SVNException e) { - e.printStackTrace(); - throw new SvnOperationFailed(e); + /*e.printStackTrace(); + throw new SvnOperationFailed(e);*/ + + // TODO - sometimes "svn status" returns "M", but getProperty throws + // a "not under version control" exception. + return null; } } 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-09-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/PropertiesTest.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -11,9 +11,7 @@ @Override protected void setUp() throws Exception { Node n = cm.getRootDirectory().newNode(TEST_FILE); - System.out.println("Creating ... "); n.save(TEST_FILE); - System.out.println("Done"); } public void testOnePropertyChange() { @@ -64,8 +62,6 @@ @Override protected void tearDown() throws Exception { - System.out.println("Deleting ... "); cm.getNode(TEST_FILE).delete(); - System.out.println("Done"); } } Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/SimpleDirectoryTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/SimpleDirectoryTest.java 2005-09-29 22:36:02 UTC (rev 1239) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/SimpleDirectoryTest.java 2005-09-30 14:10:39 UTC (rev 1240) @@ -0,0 +1,58 @@ +package org.jboss.shotoku.test; + +import org.jboss.shotoku.Directory; +import org.jboss.shotoku.Node; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; + +public class SimpleDirectoryTest extends ShotokuTest { + public void testAddDeleteDirectory() { + // Creating the directory. + Directory newDir = cm.getRootDirectory().newDirectory("new-dir-test"); + + // We shouldn't be able to do anything just yet - it's not saved. + assertNull(newDir.newNode("zzz")); + + // Saving the dir - it should be created. + newDir.save("new-dir-test"); + + // Creating some nodes and directories in it. + newDir.newDirectory("subdir1").save("subdir1"); + newDir.newNode("node1").save("node1"); + Node newNode = newDir.newNode("node2"); + newNode.save("node2"); + newNode.setContent("test"); + newNode.save("node2-2"); + + assertTrue("test".equals(cm.getNode( + "new-dir-test/node2").getContent())); + } + + public void testNames() { + // Checking name of the root directory. + assertTrue("".equals(cm.getRootDirectory().getName())); + + Directory newDir = cm.getRootDirectory().newDirectory("new-dir-test"); + newDir.save("new-dir-test"); + Node newNode = newDir.newNode("new-node"); + newNode.save("new-node-test"); + + // Checking name of a new directory. + assertTrue("new-dir-test".equals(newDir.getName())); + assertTrue("new-dir-test".equals(cm.getRootDirectory().getDirectory( + "new-dir-test").getName())); + + // Checking name of a new node. + assertTrue("new-node".equals(newNode.getName())); + assertTrue("new-node".equals(cm.getRootDirectory().getDirectory( + "new-dir-test").getNode("new-node").getName())); + } + + public void tearDown() { + try { + Directory newDir = cm.getDirectory("new-dir-test"); + newDir.delete(); + } catch (ResourceDoesNotExist e) { + // If it does not exist, all the better, no deleting :). + } + } +} |
From: <jbo...@li...> - 2005-09-29 22:36:14
|
Author: adamw Date: 2005-09-29 18:36:02 -0400 (Thu, 29 Sep 2005) New Revision: 1239 Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/AddDeleteTest.java 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/ShotokuTest.java 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/Directory.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.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/SvnNewNode.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java Log: Tests and bug fixes 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-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -15,7 +15,8 @@ */ public String getProperty(String propertyName) throws RepositoryException; /** - * Sets the value of a given property. + * Sets the value of a given property. Only after saving this change will + * be persisted. * @param propertyName Name of the property to set. * @param propertyValue Value of the property to set. */ @@ -39,8 +40,9 @@ */ public String getLogMessage() throws RepositoryException; /** - * Deletes this node or directory. This node should not be used after - * performing this operation. + * Deletes this node or directory (immediately, no <code>save()</code> + * is needed). This node should not be used after performing this + * operation. * @throws RepositoryException */ public void delete() throws RepositoryException; 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-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -48,7 +48,7 @@ /** * Creates and returns a new node in this directory. Only after saving, this - * node will be visible by other functions. + * node will be visible by other functions and persisted. * * @param name * Name of the new node. @@ -61,8 +61,9 @@ /** * Creates a new directory in this directory. Only after saving this - * directory, it will be visible by other functions. Also, new nodes/ - * directories in it will be possible to create only after saving. + * directory, it will be visible by other functions and persisted. + * Also, new nodes/ directories in it will be possible to create only + * after saving. * * @param name * Name of the directory to create. Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java 2005-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -19,7 +19,8 @@ public String getContent() throws RepositoryException; /** - * Sets the content of this node. + * Sets the content of this node. Only after saving this change will be + * persisted. * * @param content * New content of this node. 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-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -82,6 +82,7 @@ service.getWriteLock(id, fullPath); if (!file.delete()) { + service.putWriteLock(id, fullPath); throw new RepositoryException("Unable to delete: " + fullPath); } 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-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -44,6 +44,7 @@ * @return A prefixed path to the given resource. */ private String getPrefixedPath(String path) { + if ("".equals(path)) return prefix; return prefix + '/' + path; } @@ -54,9 +55,19 @@ * @return A <code>java.io.File</code> object for the given path. */ File getFileForPath(String path) { + return getFileForPrefixedPath(getPrefixedPath(path)); + } + + /** + * Gets a <code>java.io.File</code> object that corresponds to a resource + * that, in the repository, can be found under the given path. + * @param path Path to the resource in the repository, already prefixed. + * @return A <code>java.io.File</code> object for the given path. + */ + File getFileForPrefixedPath(String path) { try { return new File( - service.getFileSystemPath(id, getPrefixedPath(path))); + service.getFileSystemPath(id, path)); } catch (SvnOperationFailed e) { throw new RepositoryException(e); } 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-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -77,18 +77,18 @@ public Node getNode(String name) throws RepositoryException, ResourceDoesNotExist { String reqFullPath = fullPath + "/" + name; - File reqNode = svnCm.getFileForPath(reqFullPath); + File reqNode = svnCm.getFileForPrefixedPath(reqFullPath); if (!reqNode.isFile()) - throw new ResourceDoesNotExist(file.getAbsolutePath()); + throw new ResourceDoesNotExist(reqNode.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); + File reqDir = svnCm.getFileForPrefixedPath(reqFullPath); if (!reqDir.isDirectory()) - throw new ResourceDoesNotExist(file.getAbsolutePath()); + throw new ResourceDoesNotExist(reqDir.getAbsolutePath()); return new SvnDirectory(id, reqFullPath, reqDir, name, svnCm); } Modified: 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/SvnHeadNode.java 2005-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -1,15 +1,15 @@ package org.jboss.shotoku.svn; -import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; +import java.nio.ByteBuffer; import java.nio.channels.FileChannel; +import java.nio.charset.Charset; import org.jboss.shotoku.Directory; import org.jboss.shotoku.History; @@ -17,7 +17,6 @@ public class SvnHeadNode extends SvnNode { private String newContent; - private String oldContent; public SvnHeadNode(String id, String fullPath, File file, String name) { super(id, fullPath, file, name); @@ -27,27 +26,18 @@ public String getContent() { if (newContent != null) return newContent; - if (oldContent == null) { - try { - BufferedReader bf = new BufferedReader(new FileReader(file)); - - StringBuffer sf = new StringBuffer(); - while (true) { - String line = bf.readLine(); - if (line == null) - break; - sf.append(line); - sf.append('\n'); - } - - oldContent = sf.toString(); - bf.close(); - } catch (IOException e) { - throw new RepositoryException(e); - } + try { + FileChannel fc = new FileInputStream(file).getChannel(); + ByteBuffer buff = ByteBuffer.allocate((int) file.length()); + fc.read(buff); + buff.flip(); + + return Charset.forName( + System.getProperty("file.encoding")).decode( + buff).toString(); + } catch (IOException e) { + throw new RepositoryException(e); } - - return oldContent; } public void setContent(String content) { @@ -86,13 +76,8 @@ return newContent != null || super.checkForChanges(); } - public void save(String logMessage) { - // Checking if there is anything to save. - if (!checkForChanges()) return; - + protected void saveWithLock(String logMessage) { try { - service.getWriteLock(id, fullPath); - // Saving modified properties. save(); @@ -107,10 +92,9 @@ throw new RepositoryException(e); } - pw.println(newContent); + pw.print(newContent); pw.close(); - - oldContent = newContent; + newContent = null; } @@ -120,6 +104,15 @@ } } + public void save(String logMessage) { + // Checking if there is anything to save. + if (!checkForChanges()) return; + + service.getWriteLock(id, fullPath); + + saveWithLock(logMessage); + } + public void copyToFile(String filename) throws RepositoryException { try { // Create channel on the source Modified: 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/SvnNewNode.java 2005-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewNode.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -93,28 +93,38 @@ @Override public void save(String logMessage) throws RepositoryException { - if (!saved) { + if (saved) + super.save(); + else { + service.getWriteLock(id, fullPath); + try { - file.createNewFile(); - service.add(id, fullPath); + if (!file.createNewFile()) { + service.putWriteLock(id, fullPath); + throw new RepositoryException( + "Could not create file: " + + file.getAbsolutePath()); + } } catch (IOException e) { + service.putWriteLock(id, fullPath); throw new RepositoryException(e); + } + + try { + service.add(id, fullPath); } catch (SvnOperationFailed e) { throw new RepositoryException(e); } - } - super.save(logMessage); + saveWithLock(logMessage); - saved = true; + saved = true; + } } @Override public void setContent(String content) { - if (saved) - super.setContent(content); - else - this.content = content; + super.setContent(content); + this.content = content; } - } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -18,6 +18,7 @@ import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNPropertyData; import org.tmatesoft.svn.core.wc.SVNRevision; +import org.tmatesoft.svn.core.wc.SVNStatusType; import org.tmatesoft.svn.core.wc.SVNUpdateClient; import org.tmatesoft.svn.core.wc.SVNWCUtil; @@ -115,10 +116,7 @@ log.info("Performing delayed op: " + op.getClass().getName()); op.performOperation(ourClientManager); - } catch (SVNException e) { - // TODO Delete - e.printStackTrace(); - + } catch (SVNException e) { tryCleanup(); log.warn("Performing delayed op: " + op.getClass().getName() + " failed.", e); } @@ -130,6 +128,10 @@ } public void getWriteLock(String path) { + // TODO + if (path.contains("//")) + throw new RuntimeException("Two / in: " + path); + Semaphore s; synchronized (semaphores) { @@ -144,6 +146,7 @@ s.acquire(); } catch (InterruptedException e) { // We never interrupt the threads. + throw new RuntimeException(e); } } @@ -165,14 +168,27 @@ public String getProperty(String path, String name) throws SvnOperationFailed { try { + File file = new File(getFileSystemPath(path)); + + System.out.println(ourClientManager.getStatusClient().doStatus(file, false). + getContentsStatus()); + + // Checking if this item is under version control + // already. If not - returning null, as it cannot have + // any saved properties. + if (SVNStatusType.STATUS_UNVERSIONED == + ourClientManager.getStatusClient().doStatus(file, false). + getContentsStatus()) + return null; + SVNPropertyData data = ourClientManager.getWCClient().doGetProperty( - new File(getFileSystemPath(path)), name, - SVNRevision.WORKING, SVNRevision.WORKING, + file, name, SVNRevision.WORKING, SVNRevision.WORKING, false); return data == null ? null : data.getValue(); } catch (SVNException e) { + e.printStackTrace(); throw new SvnOperationFailed(e); } } Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/AddDeleteTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/AddDeleteTest.java 2005-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/AddDeleteTest.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -0,0 +1,110 @@ +package org.jboss.shotoku.test; + +import org.jboss.shotoku.Node; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; + +public class AddDeleteTest extends ShotokuTest { + private final static String TEST_FILE = "add-delete-test-1"; + + private void checkTestFileNotExists() { + try { + cm.getNode(TEST_FILE); + + // An exception should be thrown. + fail("A node which shouldn't exist, does."); + } catch (ResourceDoesNotExist e) { + // Getting here means everything is ok. + } + } + + public void testDeleteWithoutSave() { + Node n = cm.getRootDirectory().newNode(TEST_FILE); + + checkTestFileNotExists(); + + n.delete(); + + checkTestFileNotExists(); + } + + public void testDeleteWithSaveImmediate() { + Node n = cm.getRootDirectory().newNode(TEST_FILE); + + checkTestFileNotExists(); + + n.save(TEST_FILE); + + // The file should exist now. + try { + cm.getNode(TEST_FILE); + } catch (ResourceDoesNotExist e) { + fail(e.getMessage()); + } + + n.delete(); + + checkTestFileNotExists(); + } + + public void testDeleteWithSaveDelayed() { + Node n = cm.getRootDirectory().newNode(TEST_FILE); + + checkTestFileNotExists(); + + n.save(TEST_FILE); + + // The file should exist now. + try { + cm.getNode(TEST_FILE); + } catch (ResourceDoesNotExist e) { + fail(e.getMessage()); + } + + // Waiting for a commit for 20 seconds ... + try { + Thread.sleep(1000 * 20); + } catch (InterruptedException e) { + fail(e.getMessage()); + } + + // The file should still exist. + try { + cm.getNode(TEST_FILE); + } catch (ResourceDoesNotExist e) { + fail(e.getMessage()); + } + + n.delete(); + + checkTestFileNotExists(); + } + + public void testAddAfterDelete() { + // Adding and deleting + Node n = cm.getRootDirectory().newNode(TEST_FILE); + n.save(TEST_FILE); + n.delete(); + + // Only adding. + n = cm.getRootDirectory().newNode(TEST_FILE); + n.save(TEST_FILE); + + // Waiting for a commit for 20 seconds ... + try { + Thread.sleep(1000 * 20); + } catch (InterruptedException e) { + fail(e.getMessage()); + } + + // The node should exist. + // The file should still exist. + try { + cm.getNode(TEST_FILE); + } catch (ResourceDoesNotExist e) { + fail(e.getMessage()); + } + + // Finally - deleting the node. + n.delete(); + } +} Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java 2005-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -1,24 +1,63 @@ package org.jboss.shotoku.test; -import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; -import junit.framework.TestCase; - -public class ModifyContentTest extends TestCase { - private ContentManager cm; +public class ModifyContentTest extends ShotokuTest { + private final static String TEST_FILE = "modify-content-test-1"; + private final static String TEST_CONTENT = "content 1"; + private final static String TEST_CONTENT_2 = "content 2"; + private final static String TEST_CONTENT_3 = "content 3"; - public ModifyContentTest() { - cm = ContentManager.getContentManager("shotoku-test"); - } - @Override protected void setUp() throws Exception { + Node n = cm.getRootDirectory().newNode(TEST_FILE); + n.setContent("initial"); + n.save(TEST_FILE); + } + public void testOneContentChange() { + // Getting the test node. + Node n = cm.getNode(TEST_FILE); + + // Setting content, but not saving. + n.setContent(TEST_CONTENT); + + // Getting the same node again. Its content shouldn't be + // modified. + Node n2 = cm.getNode(TEST_FILE); + assertFalse(TEST_CONTENT.equals(n2.getContent())); + + // Saving the first node. + n.save(TEST_FILE); + + // Now both contents should be the same. + assertTrue(TEST_CONTENT.equals(n2.getContent())); + + // Getting a third node, checking its content, it should + // be modified. + assertTrue(TEST_CONTENT.equals(cm.getRootDirectory().getNode( + TEST_FILE).getContent())); } - + + public void testTwoContentChange() { + Node n = cm.getNode(TEST_FILE); + Node n2 = cm.getNode(TEST_FILE); + + // Setting and saving content for the first time. + n.setContent(TEST_CONTENT_2); + n.save(TEST_FILE); + + // Setting and saving content for the second time. + n2.setContent(TEST_CONTENT_3); + n2.save(TEST_FILE); + + // Checking if the change is there. + assertTrue(TEST_CONTENT_3.equals(cm.getRootDirectory().getNode( + TEST_FILE).getContent())); + } + @Override protected void tearDown() throws Exception { - + cm.getNode(TEST_FILE).delete(); } - } Added: 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-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/PropertiesTest.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -0,0 +1,71 @@ +package org.jboss.shotoku.test; + +import org.jboss.shotoku.Node; + +public class PropertiesTest extends ShotokuTest { + private final static String TEST_FILE = "properties-test-1"; + private final static String PROP_NAME = "prop1"; + private final static String PROP_VAL_1 = "val1"; + private final static String PROP_VAL_2 = "val2"; + + @Override + protected void setUp() throws Exception { + Node n = cm.getRootDirectory().newNode(TEST_FILE); + System.out.println("Creating ... "); + n.save(TEST_FILE); + System.out.println("Done"); + } + + public void testOnePropertyChange() { + // Getting the test node. + Node n = cm.getNode(TEST_FILE); + + // The file is new, this property shouldn't have a value. + assertNull(n.getProperty(PROP_NAME)); + + n.setProperty(PROP_NAME, PROP_VAL_1); + + // Still, the property shouldn't be set yet on a new node, + // but should be set on the old one. + assertNull(cm.getNode(TEST_FILE).getProperty(PROP_NAME)); + assertTrue(PROP_VAL_1.equals(n.getProperty(PROP_NAME))); + + // Saving - the change should be persisted. + n.save(TEST_FILE); + + // Now it should be visible everywhere. + assertTrue(PROP_VAL_1.equals(n.getProperty(PROP_NAME))); + assertTrue(PROP_VAL_1.equals(cm.getNode(TEST_FILE).getProperty( + PROP_NAME))); + } + + public void testTwoPropertyChange() { + // Getting the test nodes. + Node n = cm.getNode(TEST_FILE); + Node n2 = cm.getNode(TEST_FILE); + + // The file is new, this property shouldn't have a value. + assertNull(n.getProperty(PROP_NAME)); + + // Setting first value. + n.setProperty(PROP_NAME, PROP_VAL_1); + n.save(TEST_FILE); + + // Setting the second value. + n2.setProperty(PROP_NAME, PROP_VAL_2); + n2.save(TEST_FILE); + + // Now everywhere the new value should be visible. + assertTrue(PROP_VAL_2.equals(n.getProperty(PROP_NAME))); + assertTrue(PROP_VAL_2.equals(n2.getProperty(PROP_NAME))); + assertTrue(PROP_VAL_2.equals(cm.getNode(TEST_FILE).getProperty( + PROP_NAME))); + } + + @Override + protected void tearDown() throws Exception { + System.out.println("Deleting ... "); + cm.getNode(TEST_FILE).delete(); + System.out.println("Done"); + } +} Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java 2005-09-29 08:17:04 UTC (rev 1238) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java 2005-09-29 22:36:02 UTC (rev 1239) @@ -0,0 +1,13 @@ +package org.jboss.shotoku.test; + +import org.jboss.shotoku.ContentManager; + +import junit.framework.TestCase; + +public class ShotokuTest extends TestCase { + protected ContentManager cm; + + public ShotokuTest() { + cm = ContentManager.getContentManager("shotoku-test"); + } +} |
From: <jbo...@li...> - 2005-09-29 08:17:10
|
Author: szimano Date: 2005-09-29 04:17:04 -0400 (Thu, 29 Sep 2005) New Revision: 1238 Modified: trunk/forge/portal-extensions/maven.xml Log: force copying fprge-common.jar to maven repo Modified: trunk/forge/portal-extensions/maven.xml =================================================================== --- trunk/forge/portal-extensions/maven.xml 2005-09-29 00:16:23 UTC (rev 1237) +++ trunk/forge/portal-extensions/maven.xml 2005-09-29 08:17:04 UTC (rev 1238) @@ -103,7 +103,7 @@ <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:copy todir="${maven.repo.local}/jboss-forge/jars" overwrite="true"> <ant:fileset dir="forge-common/target"> <ant:include name="*.jar" /> </ant:fileset> |
From: <jbo...@li...> - 2005-09-29 00:16:27
|
Author: dam...@jb... Date: 2005-09-28 20:16:23 -0400 (Wed, 28 Sep 2005) New Revision: 1237 Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java Modified: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java Log: Developing Primates. Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java =================================================================== --- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java 2005-09-28 21:21:08 UTC (rev 1236) +++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java 2005-09-29 00:16:23 UTC (rev 1237) @@ -0,0 +1,83 @@ +package org.jbosslabs.portlets.primates; + +import java.util.HashSet; +import java.util.Set; + +import org.jboss.forge.common.ForgeHelper; +import org.jboss.forge.common.XmlTools; +import org.jboss.forge.common.projects.AbstractDescriptor; +import org.jboss.forge.common.projects.Projects; +import org.jboss.forge.common.projects.ProjectsHelper; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; +import org.jboss.forge.common.projects.permissions.RenderRequestPermissionsChecker; +import org.jboss.portal.common.context.DelegateContext; +import org.jboss.portal.core.model.User; +import org.jboss.portlet.JBossRenderRequest; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * @author Damon Sicore + * @author adamw + * A class representing a primate. + */ +public class Primate extends AbstractDescriptor { + final static String NAME_ELEMENT = "link"; + final static String TITLE_ELEMENT = "title"; + final static String PROJECTS_ELEMENT = "projects"; + final static String PROJECT_ELEMENT = "project"; + final static String MUGSHOT_ELEMENT = "mugshot"; + final static String STATUS_ELEMENT = "status"; + final static String BIO_ELEMENT = "bio"; + + /** + * <code>name</code> - The name this filthy primate calls itself. + */ + private String name; + /** + * <code>title</code> - A disgustingly self-important title. + */ + private String title; + /** + * <code>mugshot</code> - You will blow lunch when you see this. + */ + private String mugshot; + /** + * <code>status</code> - Whether or not this monkey is slacking. + */ + private String status; + /** + * <code>bio</code> - More self-promotion and hot air. + */ + private String bio; + + private Set<String> allProjects; + + + + public Primate(Node root) { + + NodeList nodes = root.getChildNodes(); + + for (int i = 0; i < nodes.getLength(); i++) { + Node n = nodes.item(i); + + if (n.getNodeType() == Node.ELEMENT_NODE) { + String nodeName = n.getNodeName(); + if (NAME_ELEMENT.equals(nodeName)) { + name = XmlTools.unmarshallText(n); + } else if (TITLE_ELEMENT.equals(nodeName)) { + title = XmlTools.unmarshallText(n); + } else if (PROJECT_ELEMENT.equals(nodeName)) { + allProjects.add(XmlTools.unmarshallText(n)); + } else if (MUGSHOT_ELEMENT.equals(nodeName)) { + mugshot = XmlTools.unmarshallText(n); + } else if (STATUS_ELEMENT.equals(nodeName)) { + status = XmlTools.unmarshallText(n); + } else if (BIO_ELEMENT.equals(nodeName)) { + bio = XmlTools.unmarshallText(n); + } + } + } + } +} Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java =================================================================== --- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java 2005-09-28 21:21:08 UTC (rev 1236) +++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primates.java 2005-09-29 00:16:23 UTC (rev 1237) @@ -0,0 +1,41 @@ +package org.jbosslabs.portlets.primates; + +import java.util.List; +import java.util.ArrayList; +import java.util.Set; + +import org.jboss.portal.common.context.DelegateContext; +import org.jboss.portlet.JBossRenderRequest; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * @author Damon Sicore + * @author adamw + * A class holding other primates. + */ +public class Primates { + final static String PRIMATE_ELEMENT = "primate"; + + /** + * <code>primates</code> - a list of primates. + */ + private List<Primate> primates; + + public Primates(Node root) { + primates = new ArrayList<Primate>(); + + NodeList nodes = root.getChildNodes(); + + for (int i = 0; i < nodes.getLength(); i++) { + Node n = nodes.item(i); + + if ((n.getNodeType() == Node.ELEMENT_NODE) + && (n.getNodeName().equals(PRIMATE_ELEMENT))) { + // Parsing and adding a new primate. + primates.add(new Primate(n)); + } + } + } + +} Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java =================================================================== --- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java 2005-09-28 21:21:08 UTC (rev 1236) +++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesDescriptor.java 2005-09-29 00:16:23 UTC (rev 1237) @@ -0,0 +1,51 @@ +package org.jbosslabs.portlets.primates; + +import java.util.HashSet; +import java.util.Set; + +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.w3c.dom.Document; +import org.w3c.dom.Node; +import org.xml.sax.InputSource; + +/** + * @author Damon Sicore + * @author adamw + * A class which handles xml parsing of the primates.xml + */ +public class PrimatesDescriptor { + private Primates primates; + + public PrimatesDescriptor(String portalName, ContentManager cm) { + try { + // Parsing the xml navigation descriptor. + DOMParser parser = new DOMParser(); + parser.parse(new InputSource(cm.getInputStream(PrimatesTools.getXmlCmPath(portalName)))); + Document doc = parser.getDocument(); + // Looking for the root menu element. + Node root = doc.getDocumentElement(); + if ((root.getNodeType() == Node.ELEMENT_NODE) + && (root.getNodeName().equals(PrimatesTools.PRIMATES_ELEMENT))) { + // Found a menu element, parsing and ending the loop. + primates = new Primates(root); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public DelegateContext getContext(JBossRenderRequest request) { + String requestedLink = null; + + // Creating a context specific to this request. + DelegateContext context = new DelegateContext(); + return context; + } + + +} Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java =================================================================== --- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java 2005-09-28 21:21:08 UTC (rev 1236) +++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesNodeWatcher.java 2005-09-29 00:16:23 UTC (rev 1237) @@ -0,0 +1,34 @@ +package org.jbosslabs.portlets.primates; + +import org.jboss.forge.common.content.ContentManager; +import org.jboss.forge.common.service.NodeWatcher; +import org.jboss.forge.common.service.ResourceWatcher; + +public class PrimatesNodeWatcher implements NodeWatcher { + private ResourceWatcher rw; + private ContentManager cm; + + public PrimatesNodeWatcher(ContentManager cm) { + this.cm = cm; + } + + private PrimatesDescriptor getDesc(String portalName) { + PrimatesDescriptor desc = new PrimatesDescriptor(portalName, cm); + + rw = new ResourceWatcher(cm); + rw.watchResource(PrimatesTools.getXmlCmPath(portalName)); + + return desc; + } + + public Object init(String portalName) { + return getDesc(portalName); + } + + public Object nodeUpdate(String portalName, Object currentValue) { + if ((currentValue == null) || (rw.checkResources())) + return getDesc(portalName); + else + return null; + } +} Modified: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java =================================================================== --- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java 2005-09-28 21:21:08 UTC (rev 1236) +++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesPortlet.java 2005-09-29 00:16:23 UTC (rev 1237) @@ -1,77 +1,39 @@ -/***************************************** - * * - * JBoss Portal: The OpenSource Portal * - * * - * Distributable under LGPL license. * - * See terms of license at gnu.org. * - * * - *****************************************/ package org.jbosslabs.portlets.primates; -import org.jboss.portlet.JBossRenderRequest; -import org.jboss.portlet.JBossRenderResponse; -import org.jboss.forge.common.ForgeHelper; -import org.jboss.forge.common.portlet.ContentPortlet; -import org.jboss.portal.core.servlet.jsp.PortalJsp; -import org.jboss.portal.common.context.DelegateContext; import java.io.IOException; -import javax.portlet.*; -public class PrimatesPortlet extends ContentPortlet { - public PrimatesPortlet() { - super("Primates", "primates"); - } +import javax.portlet.PortletException; +import javax.portlet.PortletRequestDispatcher; - protected String getCacheKey(JBossRenderRequest rReq, String portalName) { - return portalName + "primates"; - } +import org.jboss.forge.common.ForgeHelper; +import org.jboss.forge.common.projects.ProjectsHelper; +import org.jboss.portal.common.context.DelegateContext; +import org.jboss.portal.core.servlet.jsp.PortalJsp; +import org.jboss.portlet.JBossPortlet; +import org.jboss.portlet.JBossRenderRequest; +import org.jboss.portlet.JBossRenderResponse; - protected String[] getWatchedFiles(JBossRenderRequest rReq) { - String []empty = new String [0]; - return empty; - } +/** + * @author adamw + * Primates portlet. + */ +public class PrimatesPortlet extends JBossPortlet { + public void doView(JBossRenderRequest request, JBossRenderResponse response) + throws IOException, PortletException { + response.setContentType("text/html"); - protected Object generateContent(JBossRenderRequest rReq, String portalName) - throws IOException { - String content = readFile(portalName+"/primates/primates.txt"); - System.out.println("wuffie.txt content:\n "+ content); - String[] data = parse(content); - DelegateContext root = new DelegateContext(); - for (int j = 0; j < data.length/2; j++) { - DelegateContext menuContext = root.next("menuentry"); - menuContext.put("url", data[j * 2]);//adds link of the image - //System.out.println("added to navigation the name "+ data[j * 2]); - menuContext.put("name", data[j * 2 + 1]);//adds name of image - } - return root; - } - - public void prepareRequest(JBossRenderRequest rReq) { - ForgeHelper.prepareRequest(rReq); - } + String portalName = ForgeHelper.getPortalName(request); - protected void displayContent(JBossRenderRequest rReq, - JBossRenderResponse rRes, WindowState ws, Object content) - throws PortletException, IOException { - String fileName = "/WEB-INF/jsp/normal.jsp"; + ProjectsHelper.prepareRequest(request); - rRes.setContentType("text/html"); - rReq.setAttribute(PortalJsp.CTX_REQUEST, content); - writeJsp(rReq, rRes, fileName); - } + // Getting the primates context. + DelegateContext navContext = PrimatesTools.getDesc(portalName).getContext(request); - protected static String[] parse(String target) { - String[] cnt; - String[] separated; - cnt = target.split(";"); - separated = new String[cnt.length * 2]; - for (int i = 0; i < cnt.length; i++) { - separated[i * 2] = cnt[i].split(",")[0].trim();//split to image name and - // trim whitespaces - separated[i * 2 + 1] = cnt[i].split(",")[1].trim();//split to - // link and trim whitespaces - } + // Displaying. + request.setAttribute(PortalJsp.CTX_REQUEST, navContext); - return separated; - } + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher( + ForgeHelper.createRepoAccessPath(portalName, PrimatesTools.getJspCmPath())); + rd.include(request, response); + } } Added: branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java =================================================================== --- branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java 2005-09-28 21:21:08 UTC (rev 1236) +++ branches/forge/damon/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/PrimatesTools.java 2005-09-29 00:16:23 UTC (rev 1237) @@ -0,0 +1,84 @@ +package org.jbosslabs.portlets.primates; + +import org.jboss.forge.common.ForgeHelper; +import java.io.File; +import org.jboss.forge.common.content.ContentManager; + +/** + * @author adamw + * Common constants and functions. + */ +public class PrimatesTools { + final static String PRIMATES_ELEMENT = "primates"; + + private final static String PRIMATES_XML = "primates.xml"; + private final static String PRIMATES_JSP = "primates.jsp"; + private final static String PRIMATES_DIR = "primates"; + private final static String BIOS_DIR = PRIMATES_DIR + File.separator +"html"; + private final static String MUGSHOTS_DIR = PRIMATES_DIR + File.separator +"mugshots"; + + private static ContentManager cm; + + static { + cm = ForgeHelper.getContentManager(""); + } + + static String getXmlCmPath(String portalName) { + return portalName + "/" + PRIMATES_DIR + "/" + PRIMATES_XML; + } + + static String getJspCmPath() { + return PRIMATES_DIR + "/" + PRIMATES_JSP; + } + + static synchronized PrimatesDescriptor getDesc(final String portalName) { + PrimatesDescriptor desc = (PrimatesDescriptor) ForgeHelper + .getForgeManagement().getFromCache(portalName, + PrimatesDescriptor.class.getName()); + + if (desc == null) + desc = (PrimatesDescriptor) ForgeHelper.getForgeManagement() + .addNodeWatcher(portalName, + PrimatesDescriptor.class.getName(), + new PrimatesNodeWatcher(cm)); + + return desc; + } + + private static String NO_PROJECT_PARAM = "&noproject=true"; + + static String prepareLinkForDisplay(String link) { + if (link == null) + return link; + + // To each link, adding a noproject param, unless it's a project link. + if ((!link.contains(NO_PROJECT_PARAM)) && + (!link.contains("project=")) && + (!ForgeHelper.isOutsideLink(link))) + return link + NO_PROJECT_PARAM; + + return link; + } + + static String prepareLinkForChecking(String portalName, String link) { + if (link == null) + return link; + + if (("/portal/".equals(link)) || ("/portal".equals(link)) + || ("//portal".equals(link))) + return ForgeHelper.createPageLink(portalName, "default"); + + // Deleting the noproject parameter, as it is not present in the generated links. + int i = link.indexOf(NO_PROJECT_PARAM); + if (i != -1) + link = link.substring(0, i); + + // Deleting the project=default parameter from freezone link, as it is a dummy + // project and not present in the generated links. + if (link.contains("freezone")) { + link = link.replace("&project=default", ""); + } + + return link; + } +} |
From: <jbo...@li...> - 2005-09-28 21:21:12
|
Author: szimano Date: 2005-09-28 17:21:08 -0400 (Wed, 28 Sep 2005) New Revision: 1236 Removed: trunk/forge/portal-extensions/jbosswiki/wiki-management/.classpath Log: removinf eclipse trash :-) Deleted: trunk/forge/portal-extensions/jbosswiki/wiki-management/.classpath =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-management/.classpath 2005-09-28 21:19:47 UTC (rev 1235) +++ trunk/forge/portal-extensions/jbosswiki/wiki-management/.classpath 2005-09-28 21:21:08 UTC (rev 1236) @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<classpath> - <classpathentry excluding="" kind="src" path="src/java"> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/aslibs/jars/javax.servlet.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/wiki-common/jars/wiki-common.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/aslibs/jars/javax.servlet.jsp.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/tmate/jars/javasvn.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/tmate/jars/jsch.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/activation.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/commons-fileupload/jars/commons-fileupload-1.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/informa/jars/informa-0.6.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/dom4j/jars/dom4j-1.6.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jdom/jars/jdom-1.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3x.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/portlet-api/jars/portlet-api-1.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-jmx.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-common.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-common-lib.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-core-lib.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-portlet-lib.jar"> - </classpathentry> - <classpathentry kind="output" path="target/classes"> - </classpathentry> -</classpath> \ No newline at end of file |
From: <jbo...@li...> - 2005-09-28 21:20:02
|
Author: szimano Date: 2005-09-28 17:19:47 -0400 (Wed, 28 Sep 2005) New Revision: 1235 Removed: trunk/forge/portal-extensions/jbosswiki/forge-wiki/.classpath Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java trunk/forge/portal-extensions/jbosswiki/wiki-common/maven.xml trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java Log: additional changes to dictionary and some code cleaning Deleted: trunk/forge/portal-extensions/jbosswiki/forge-wiki/.classpath =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/.classpath 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/.classpath 2005-09-28 21:19:47 UTC (rev 1235) @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<classpath> - <classpathentry excluding="" kind="src" path="src/java"> - </classpathentry> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/aslibs/jars/javax.servlet.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/wiki-common/jars/wiki-common.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/aslibs/jars/javax.servlet.jsp.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/tmate/jars/javasvn.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/tmate/jars/jsch.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/activation.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/commons-fileupload/jars/commons-fileupload-1.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/informa/jars/informa-0.6.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/dom4j/jars/dom4j-1.6.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jdom/jars/jdom-1.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3x.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-ejb3.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/portlet-api/jars/portlet-api-1.0.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-jmx.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/jboss-common.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-common-lib.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-core-lib.jar"> - </classpathentry> - <classpathentry kind="var" path="MAVEN_REPO/jboss/jars/portal-portlet-lib.jar"> - </classpathentry> - <classpathentry kind="output" path="target/classes"> - </classpathentry> -</classpath> \ No newline at end of file Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -195,9 +195,7 @@ if (edPage == null) { edPage = new WikiPage(rReq.getParameter("editedPage"), - credentials, "", 0, 0, new Date(), wikiEngine - .getMediaDataSource(), wikiEngine - .getAttachementDataSource(), true, true); + credentials, "", 0, 0, new Date(), wikiEngine, true, true); } // set new content @@ -248,11 +246,11 @@ rReq.getPortletSession().setAttribute("isSecure", new Boolean(rReq.isSecure())); - WikiPage noSuchPage = new WikiPage("", + /*WikiPage noSuchPage = new WikiPage("", credentials, "There is no such page. Click on EDIT to start it.", 0, 0, null, wikiEngine.getMediaDataSource(), wikiEngine - .getAttachementDataSource(), true, true); + .getAttachementDataSource(), true, true);*/ String page = "Wiki.jsp"; @@ -309,8 +307,7 @@ // wikiPage = defaultPage; pageToShow = new WikiPage(wikiPage,credentials, "", 0, 0, - new Date(), wikiEngine.getMediaDataSource(), - wikiEngine.getAttachementDataSource(), true, true); + new Date(), wikiEngine, true, true); // wikiEngine.getByName(wikiPage, wikiContext); } @@ -334,7 +331,7 @@ pageToShow = wikiEngine.getByName(wikiPage, null); - if (pageToShow == null) { // if somebody entered a link to info + /*if (pageToShow == null) { // if somebody entered a link to info // non-existing page page = "Wiki.jsp"; try { @@ -344,9 +341,9 @@ } pageToShow.setName(wikiPage); - } else { + } else {*/ rReq.setAttribute("pageAtTop", pageToShow); - } + } @@ -379,7 +376,7 @@ pageToShow = wikiEngine.getByName(wikiPage, wikiContext); } - if (pageToShow == null) { + /*if (pageToShow == null) { try { pageToShow = (WikiPage) noSuchPage.clone(); @@ -388,7 +385,7 @@ } pageToShow.setName(wikiPage); - } + }*/ } Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -254,11 +254,9 @@ WikiAttachment wikiAttachment; if (version == -1) { - wikiAttachment = wikiEngine.getAttachementDataSource() - .getAttachment(pageName, fileName); + wikiAttachment = wikiEngine.getAttachment(pageName, fileName); } else { - wikiAttachment = wikiEngine.getAttachementDataSource() - .getAttachment(pageName, fileName, version); + wikiAttachment = wikiEngine.getAttachment(pageName, fileName, version); } if (wikiAttachment != null) { Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/maven.xml =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/maven.xml 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/maven.xml 2005-09-28 21:19:47 UTC (rev 1235) @@ -9,7 +9,7 @@ <attainGoal name="jar" /> <!-- copy jar to repo --> - <ant:copy tofile="${maven.repo.local}/wiki-common/jars/wiki-common.jar" > + <ant:copy tofile="${maven.repo.local}/wiki-common/jars/wiki-common.jar" overwrite="true"> <ant:fileset dir="target"> <ant:filename name="wiki-common-1.0.jar" /> </ant:fileset> Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -62,7 +62,13 @@ private File modFile; private File pageDictionaryFile; + + private WikiEngine wikiEngine; + public void setWikiEngine(WikiEngine wikiEngine) { + this.wikiEngine = wikiEngine; + } + public FileDataSource() { System.out.println("Looking for props file !"); @@ -162,6 +168,7 @@ } pageDictionary.setProperty("Tomek", "TomekToZebesciak"); + pageDictionary.setProperty("Tomek/Life/Relatives/Gyg", "TomekToZebesciak/Bimbom/PlumPlum/Plum"); // create pageRevDictionary - to make it work faster @@ -455,7 +462,7 @@ int pageMods = getPageMod(pageName); page = new WikiPage(pageName, author, pageContent.toString(), - i, i, new Date(pageFile.lastModified()), this, this, + i, i, new Date(pageFile.lastModified()), wikiEngine, (pageMods & VIEWABLE) == VIEWABLE, (pageMods & EDITABLE) == EDITABLE); Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -186,4 +186,6 @@ * @param pageName Name of the page to delete. */ public boolean deletePage(String pageName); + + public void setWikiEngine(WikiEngine wikiEngine); } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -27,6 +27,8 @@ import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import java.io.File; + /** * * @author <a href="mailto:ds...@jb...">Damon Sicore</a> @@ -57,7 +59,7 @@ private MediaDataSource mediaDataSource; private AttachmentDataSource attachementDataSource; - + private WikiPageDictionary wikiPageDictionary; private String adminUserName = "admin"; @@ -96,7 +98,7 @@ } public boolean pageExists(String pageName) { - return mediaDataSource.pageExists(getWikiPageDictionary().getUid(pageName)); + return mediaDataSource.pageExists(getUid(pageName)); } /** @@ -126,8 +128,8 @@ */ public WikiPage getByName(String pageName, WikiContext wikiContext) { - String realPageName = getWikiPageDictionary().getUid(pageName); - + String realPageName = getUid(pageName); + WikiPage ret = null; if (!mediaDataSource.preGet()) { @@ -140,17 +142,18 @@ } else { ret = mediaDataSource.getPage(realPageName); - ret.setName(pageName); - - pages.put(realPageName, ret); + if (ret != null) { + ret.setName(pageName); + + pages.put(realPageName, ret); + } } if ((wikiContext != null) && (ret != null) && (!ret.isViewable()) && (!wikiContext.getUser().equals(adminUserName))) { return new WikiPage(realPageName, null, "I am sorry, but you are not allowed to see this page", 0, - 0, new Date(), getMediaDataSource(), - getAttachementDataSource(), false, false); + 0, new Date(), this, false, false); } if (!mediaDataSource.postGet()) { @@ -182,8 +185,8 @@ public WikiPage getByName(String pageName, WikiContext wikiContext, int version) { - String realPageName = getWikiPageDictionary().getUid(pageName); - + String realPageName = getUid(pageName); + WikiPage ret = null; if (pages.containsKey(realPageName)) { @@ -192,7 +195,7 @@ ret = mediaDataSource.getPage(realPageName); ret.setName(pageName); - + pages.put(realPageName, ret); } @@ -229,12 +232,14 @@ attachementDataSource = new FileDataSource(); wikiPageDictionary = new FileDataSource(); + mediaDataSource.setWikiEngine(this); + pages = new HashMap<String, WikiPage>(); wikiTypes = new HashMap<String, WikiType>(); noSuchPage = new WikiPage("", new SimpleCredentials(""), "There is no such page. Click on EDIT to start it.", 0, 0, - null, mediaDataSource, attachementDataSource, true, true); + null, this, true, true); loadWikiTypes(); loadInsidePlugins(); @@ -404,10 +409,6 @@ init(); } - public MediaDataSource getMediaDataSource() { - return mediaDataSource; - } - public void refreshPage(String pageName) { if (pages.containsKey(pageName)) { pages.remove(pageName); @@ -420,7 +421,7 @@ Map<String, Integer> resPages = new HashMap<String, Integer>(); - Set<String> pages = getMediaDataSource().getAllPageNames(); + Set<String> pages = mediaDataSource.getAllPageNames(); for (String name : pages) { WikiPage temp = getByName(name, null); @@ -461,10 +462,6 @@ return resPages; } - public AttachmentDataSource getAttachementDataSource() { - return attachementDataSource; - } - public Set<String> getPagesFor(String pageName) { return mediaDataSource.getPagesFor(pageName); } @@ -513,51 +510,233 @@ public boolean deletePage(String pageName, boolean deleteSubpages) { Set<String> subpages = new HashSet<String>(); - - System.out.println("DELETE SUBPAGES: "+deleteSubpages); - - + System.out.println("DELETE SUBPAGES: " + deleteSubpages); + if (deleteSubpages) { - subpages = getMediaDataSource().getPagesFor(pageName); + subpages = mediaDataSource.getPagesFor(pageName); } - if (getAttachementDataSource().getAttachmentsSet( - getByName(pageName, null)) != null) { - if (!getAttachementDataSource().deleteAttachments(pageName)) { - System.err.println("Couldn't delete attachments of page "+pageName); + if (attachementDataSource.getAttachmentsSet(getByName(pageName, null)) != null) { + if (!attachementDataSource.deleteAttachments(pageName)) { + System.err.println("Couldn't delete attachments of page " + + pageName); return false; } } boolean ret = true; - - if ((deleteSubpages)&&(subpages.size() > 0)) { + if ((deleteSubpages) && (subpages.size() > 0)) { + for (String subPage : subpages) { if (!deletePage(subPage, deleteSubpages)) { - System.err.println("[WikiEngine]: Problems with deleteing subpage: "+subPage); + System.err + .println("[WikiEngine]: Problems with deleteing subpage: " + + subPage); ret = false; } } } - - if (getMediaDataSource().deletePage(pageName)) { + if (mediaDataSource.deletePage(pageName)) { + if (pages.containsKey(pageName)) { pages.remove(pageName); } - System.out.println("Finishing deleting of page "+pageName+" with ret = "+ret); - + System.out.println("Finishing deleting of page " + pageName + + " with ret = " + ret); + return ret; } else { - System.err.println("Problems with deleting page "+pageName); + System.err.println("Problems with deleting page " + pageName); return false; } } - public WikiPageDictionary getWikiPageDictionary() { - return wikiPageDictionary; + public String getRealName(String uid) { + String[] pageTokens = uid.split("/"); + + if (pageTokens.length > 1) { + if (!wikiPageDictionary.getRealName(uid).equals(uid)) { + // this page is in dictionary + return wikiPageDictionary.getRealName(uid); + } else { + // look if parts of this page are in dictionary + + for (int i = pageTokens.length - 2; i > 0; i--) { + String page = ""; + String suffix = ""; + for (int j = 0; j < i; j++) { + page += "/" + pageTokens[j]; + } + + // build suffix + + for (int j = i; j < pageTokens.length; j++) { + suffix += "/" + pageTokens[j]; + } + + page = page.substring(1); + + System.out.println("Looking at page: " + page); + + if (!wikiPageDictionary.getRealName(page).equals(page)) // this + // page + // is + // in + // dictionary + return wikiPageDictionary.getRealName(page) + suffix; + + } + + return uid; + } + } else + return wikiPageDictionary.getRealName(uid); } + + public String getUid(String realName) { + String[] pageTokens = realName.split("/"); + + if (pageTokens.length > 1) { + if (!wikiPageDictionary.getUid(realName).equals(realName)) { + // this page is in dictionary + return wikiPageDictionary.getUid(realName); + } else { + // look if parts of this page are in dictionary + + for (int i = pageTokens.length - 2; i > 0; i--) { + String page = ""; + String suffix = ""; + for (int j = 0; j < i; j++) { + page += "/" + pageTokens[j]; + } + + // build suffix + + for (int j = i; j < pageTokens.length; j++) { + suffix += "/" + pageTokens[j]; + } + + page = page.substring(1); + + System.out.println("Looking at page(uid): " + page); + + if (!wikiPageDictionary.getUid(page).equals(page)) // this + // page + // is + // in + // dictionary + return wikiPageDictionary.getUid(page) + suffix; + } + + return realName; + } + } else + return wikiPageDictionary.getUid(realName); + } + + public void rename(String uid, String newName) { + wikiPageDictionary.rename(uid, newName); + } + + public boolean deleteAttachment(String pageName, String attName) { + return attachementDataSource.deleteAttachment(pageName, attName); + } + + public boolean deleteAttachments(String pageName) { + return attachementDataSource.deleteAttachments(pageName); + } + + public Set<String> getAttachmentsSet(WikiPage page) { + return attachementDataSource.getAttachmentsSet(page); + } + + public int getLastAttachmentVersion(String pageName, String attachmentName) { + return attachementDataSource.getLastAttachmentVersion(pageName, + attachmentName); + } + + public WikiAttachment getAttachment(String pageName, + String attachementName, int version) { + return attachementDataSource.getAttachment(pageName, attachementName, + version); + } + + public WikiAttachment getAttachment(String pageName, String attachementName) { + return attachementDataSource.getAttachment(pageName, attachementName); + } + + public void addAttachment(File attFile, String attName, WikiPage page, + String user) { + attachementDataSource.addAttachment(attFile, attName, page, user); + } + + public Set<String> getAllPageNames() { + Set<String> set = mediaDataSource.getAllPageNames(); + Set<String> translatedSet = new HashSet<String>(); + + for (String page : set) { + translatedSet.add(getRealName(page)); + } + + return translatedSet; + } + + public boolean preSave() { + return mediaDataSource.preSave(); + } + + public boolean savePage(WikiPage page, String languageCode) { + return mediaDataSource.savePage(page, languageCode); + } + + public boolean postSave() { + return mediaDataSource.postSave(); + } + + public boolean preGet() { + return mediaDataSource.preGet(); + } + + public boolean postGet() { + return mediaDataSource.postGet(); + } + + public WikiPage getPageAtVersion(WikiPage originPage, boolean loadContent, + String languageCode, int version) { + return mediaDataSource.getPageAtVersion(originPage, loadContent, + languageCode, version); + } + + public WikiPage getPageAtVersion(WikiPage originPage, boolean loadContent, + int version) { + return mediaDataSource.getPageAtVersion(originPage, loadContent, + version); + } + + public void getContentAtVersion(WikiPage page, boolean loadContent, + int version) { + mediaDataSource.getContentAtVersion(page, loadContent, version); + } + + public int getPageMod(String pageName) { + return mediaDataSource.getPageMod(pageName); + } + + public void setPageMod(String pageName, int mods) { + mediaDataSource.setPageMod(pageName, mods); + } + + public boolean deletePage(String pageName) { + return mediaDataSource.deletePage(pageName); + } + + public long getAttachmentSize(String pageName, String attachmentName, + int version) { + return attachementDataSource.getAttachmentSize(pageName, + attachmentName, version); + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -91,16 +91,13 @@ * </p> * */ - private MediaDataSource mediaDataSource; - private AttachmentDataSource attachementDataSource; - /** * <p> * </p> * */ - public WikiEngine wikiEngine; + private WikiEngine wikiEngine; /** * <p> @@ -117,8 +114,7 @@ public WikiPage(String pageName, Credentials pageAuthor, String pageContent, int pageLastVersion, int thisVersion, - Date editDate, MediaDataSource mediaDataSource, - AttachmentDataSource attachementDataSource, boolean viewable, + Date editDate, WikiEngine wikiEngine, boolean viewable, boolean editable) { name = pageName; lastAuthor = pageAuthor; @@ -126,8 +122,7 @@ lastVersion = pageLastVersion; version = thisVersion; this.editDate = editDate; - this.mediaDataSource = mediaDataSource; - this.attachementDataSource = attachementDataSource; + this.wikiEngine = wikiEngine; this.viewable = viewable; this.editable = editable; } @@ -152,13 +147,13 @@ * */ public synchronized void save() { - if (!mediaDataSource.preSave()) { + if (!wikiEngine.preSave()) { System.err.println("Couldn't save page"); return; } - mediaDataSource.savePage(this, null); + wikiEngine.savePage(this, null); - if (!mediaDataSource.postSave()) { + if (!wikiEngine.postSave()) { System.err.println("Problems with postSave"); } } @@ -176,18 +171,6 @@ return null; } - /** - * <p> - * Does ... - * </p> - * - * - * @return - * @param mds - */ - public void setMediaDataSource(MediaDataSource mds) { - mediaDataSource = mds; - } /** * <p> @@ -216,7 +199,7 @@ if (version == lastVersion) { return this; } else { - return mediaDataSource.getPageAtVersion(this, loadContent, version); + return wikiEngine.getPageAtVersion(this, loadContent, version); } } @@ -309,7 +292,7 @@ public String getPageContent() { if (pageContent == null) { // page wasn't loaded with conent - lets do it - mediaDataSource.getContentAtVersion(this, true, version); + wikiEngine.getContentAtVersion(this, true, version); } return pageContent; } @@ -322,7 +305,7 @@ public Object clone() throws CloneNotSupportedException { WikiPage clonedPage = new WikiPage(getName(), getLastAuthor(), getPageContent(), getLastVersion(), getVersion(), - getEditDate(), mediaDataSource, attachementDataSource,isViewable(),isEditable()); + getEditDate(), wikiEngine,isViewable(),isEditable()); clonedPage.setLength(getLength()); @@ -397,11 +380,11 @@ } public void addAttachement(File attFile, String attName, String user) { - attachementDataSource.addAttachment(attFile, attName, this, user); + wikiEngine.addAttachment(attFile, attName, this, user); } public Set<String> getAttachementsSet() { - return attachementDataSource.getAttachmentsSet(this); + return wikiEngine.getAttachmentsSet(this); } public boolean isEditable() { @@ -411,7 +394,7 @@ public void setEditable(boolean editable) { this.editable = editable; - mediaDataSource.setPageMod(getName(), ((isViewable()) ? MediaDataSource.VIEWABLE : 0) + ((isEditable()) ? MediaDataSource.EDITABLE : 0)); + wikiEngine.setPageMod(getName(), ((isViewable()) ? MediaDataSource.VIEWABLE : 0) + ((isEditable()) ? MediaDataSource.EDITABLE : 0)); } public boolean isViewable() { @@ -421,6 +404,6 @@ public void setViewable(boolean viewable) { this.viewable = viewable; - mediaDataSource.setPageMod(getName(), ((isViewable()) ? MediaDataSource.VIEWABLE : 0) + ((isEditable()) ? MediaDataSource.EDITABLE : 0)); + wikiEngine.setPageMod(getName(), ((isViewable()) ? MediaDataSource.VIEWABLE : 0) + ((isEditable()) ? MediaDataSource.EDITABLE : 0)); } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -73,7 +73,7 @@ String attName = (wikiSession.getAttribute("var2") != null) ? (String)wikiSession.getAttribute("var2") : null; if (attName != null) { - if (!wikiEngine.getAttachementDataSource().deleteAttachment(wikiPage.getName(), attName)) { + if (!wikiEngine.deleteAttachment(wikiPage.getName(), attName)) { errorMsg = "There was problem with deleting "+attName+" from page "+wikiPage.getName()+" (see log for more info)"; } } @@ -94,8 +94,7 @@ } if (SHOWDELETE) { - Set<String> attSet = wikiEngine.getAttachementDataSource() - .getAttachmentsSet(wikiPage); + Set<String> attSet = wikiEngine.getAttachmentsSet(wikiPage); if (attSet != null) { adminConsole.append("<h4>Attachments:</h4>\n<table border=\"0\">"); Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -21,14 +21,12 @@ if (((wikiPage.isEditable())||(credentials.isAdmin()))&&(rollbackToVer != null) && (credentials.isLogedIn()) - && (Integer.valueOf((String) rollbackToVer) < wikiEngine - .getAttachementDataSource().getLastAttachmentVersion( + && (Integer.valueOf((String) rollbackToVer) < wikiEngine.getLastAttachmentVersion( wikiPage.getName(), attachementName))) { - WikiAttachment wikiAttachment = wikiEngine - .getAttachementDataSource().getAttachment( + WikiAttachment wikiAttachment = wikiEngine.getAttachment( wikiPage.getName(), attachementName, Integer.valueOf((String) rollbackToVer)); - wikiEngine.getAttachementDataSource().addAttachment( + wikiEngine.addAttachment( wikiAttachment.getFile(), attachementName, wikiPage, (String) wikiSession.getAttribute("user")); } @@ -39,11 +37,9 @@ history .append("<tr><td><b>Version</b></td><td><b>Date</b></td><td><b>Author</b></td><td><b>Size</b></td><td><b>Rollback</b></td></tr>\n"); - int lastVer = wikiEngine.getAttachementDataSource() - .getLastAttachmentVersion(wikiPage.getName(), attachementName); + int lastVer = wikiEngine.getLastAttachmentVersion(wikiPage.getName(), attachementName); for (int i = lastVer; i > 0; i--) { - WikiAttachment wikiAttachment = wikiEngine - .getAttachementDataSource().getAttachment( + WikiAttachment wikiAttachment = wikiEngine.getAttachment( wikiPage.getName(), attachementName, i); history.append("<tr><td>").append("<a href=\"").append(attURL) .append(attachementName).append( Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -815,7 +815,7 @@ } else // [link] case { - text = link; + text = wikiEngine.getRealName(cleanLink(link)); } @@ -855,7 +855,7 @@ } // check for attachments later on else { - wikiPage = wikiEngine.getWikiPageDictionary().getRealName(cleanLink(link)); + wikiPage = wikiEngine.getRealName(cleanLink(link)); if (wikiEngine.pageExists(wikiPage)) { result = "<a href=\"" + portalHome + wikiHome + page + wikiPage + "\">" + text + "</a>"; Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java 2005-09-28 21:19:08 UTC (rev 1234) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java 2005-09-28 21:19:47 UTC (rev 1235) @@ -26,7 +26,7 @@ int offset = recentChanges.length(); - Set<String> pages = wikiEngine.getMediaDataSource().getAllPageNames(); + Set<String> pages = wikiEngine.getAllPageNames(); TreeMap<String, TreeSet<String>> sortedByDate = new TreeMap<String, TreeSet<String>>(); |
From: <jbo...@li...> - 2005-09-28 21:19:16
|
Author: adamw Date: 2005-09-28 17:19:08 -0400 (Wed, 28 Sep 2005) New Revision: 1234 Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java Log: Added initial check-outs and more resistancy do cleanup exceptions Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-28 20:59:32 UTC (rev 1233) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-28 21:19:08 UTC (rev 1234) @@ -57,7 +57,7 @@ private void tryCleanup() { try { ourClientManager.getWCClient().doCleanup(wc); - } catch (SVNException e) { + } catch (Exception e) { } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-09-28 20:59:32 UTC (rev 1233) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-09-28 21:19:08 UTC (rev 1234) @@ -72,12 +72,17 @@ String id = Tools.getAttributeValue(n, "id"); String url = Tools.getAttributeValue(n, "url"); - repositories.put(id, new SvnRepository( + SvnRepository repo = new SvnRepository( Tools.getAttributeValue(n, "username"), Tools.getAttributeValue(n, "password"), url, - Tools.getAttributeValue(n, "localpath"))); + Tools.getAttributeValue(n, "localpath")); + repositories.put(id, repo); + + // First update/ checkout. + repo.update(); + log.info("Added svn repository: " + id + ", " + url); } } |
From: <jbo...@li...> - 2005-09-28 20:59:37
|
Author: adamw Date: 2005-09-28 16:59:32 -0400 (Wed, 28 Sep 2005) New Revision: 1233 Modified: trunk/forge/portal-extensions/forge-common/src/etc/org/jboss/forge/common/forge.properties.sample trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeProperties.java Log: Deleted unneccessary properties Modified: trunk/forge/portal-extensions/forge-common/src/etc/org/jboss/forge/common/forge.properties.sample =================================================================== --- trunk/forge/portal-extensions/forge-common/src/etc/org/jboss/forge/common/forge.properties.sample 2005-09-28 20:52:35 UTC (rev 1232) +++ trunk/forge/portal-extensions/forge-common/src/etc/org/jboss/forge/common/forge.properties.sample 2005-09-28 20:59:32 UTC (rev 1233) @@ -1,14 +1,3 @@ -# Path to a svn repository from which content will be checked out. -# example: -# svnpath=https://cms.labs.jboss.com/trunk/forge/portal-content -svnpath= -# Authorization for the svn repo. -svnusername= -svnpassword= -# Local path to where the content will be checked out. -# example: -# localpath=/usr/local/forge/portal/content -localpath= # Local path where blojsom stores the entries. # example: # blogpath=/usr/local/forge/portal/blog Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeProperties.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeProperties.java 2005-09-28 20:52:35 UTC (rev 1232) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeProperties.java 2005-09-28 20:59:32 UTC (rev 1233) @@ -4,23 +4,7 @@ import java.util.Properties; public class ForgeProperties { - /** - * <code>svnPath</code> - path to the svn repository - */ - private String svnPath; /** - * <code>svnUsername</code> - a username to access the svn repository - */ - private String svnUsername; - /** - * <code>svnPassword</code> - a password to access the svn repository - */ - private String svnPassword; - /** - * <code>localPath</code> - path to a local working copy - */ - private String localPath; - /** * <code>blogPath</code> - path to the local blog content */ private String blogPath; @@ -45,10 +29,6 @@ throw new RuntimeException("Error loading properties"); } - svnPath = properties.getProperty("svnpath"); - svnUsername = properties.getProperty("svnusername"); - svnPassword = properties.getProperty("svnpassword"); - localPath = properties.getProperty("localpath"); blogPath = properties.getProperty("blogpath"); smtpServer = properties.getProperty("smtpserver"); contribAdmin = properties.getProperty("contribadmin"); @@ -62,23 +42,7 @@ return contribAdmin; } - String getLocalPath() { - return localPath; - } - String getSmtpServer() { return smtpServer; } - - String getSvnPassword() { - return svnPassword; - } - - String getSvnPath() { - return svnPath; - } - - String getSvnUsername() { - return svnUsername; - } } |
From: <jbo...@li...> - 2005-09-28 20:52:47
|
Author: adamw Date: 2005-09-28 16:52:35 -0400 (Wed, 28 Sep 2005) New Revision: 1232 Modified: trunk/forge/portal-extensions/maven.xml trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/ Log: Help changed Modified: trunk/forge/portal-extensions/maven.xml =================================================================== --- trunk/forge/portal-extensions/maven.xml 2005-09-28 20:49:58 UTC (rev 1231) +++ trunk/forge/portal-extensions/maven.xml 2005-09-28 20:52:35 UTC (rev 1232) @@ -133,6 +133,7 @@ 4. forge-login/to-copy/portal-login-ds.xml 5. federation-register/src/web/WEB-INF/faces-config (only for the JOSF portal). 6. jbosswiki/wiki-common/src/etc/org/jboss/wiki/filedatasource.properties +7. shotoku/shotoku-svn-service/src/etc/repositories.xml Available goals: - help - prints this info Property changes on: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc ___________________________________________________________________ Name: svn:ignore + repositories.xml |
From: <jbo...@li...> - 2005-09-28 20:50:07
|
Author: adamw Date: 2005-09-28 16:49:58 -0400 (Wed, 28 Sep 2005) New Revision: 1231 Added: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml.sample Removed: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml Log: Moving configuration to .sample file Deleted: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml 2005-09-28 20:46:27 UTC (rev 1230) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml 2005-09-28 20:49:58 UTC (rev 1231) @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> - -<repositories> - <repository - id="default" - url="https://cms.labs.jboss.com/trunk/forge/portal-content" - username="jbf...@jb..." - password="rO@B5oPfff" - localpath="/home/adamw/jboss/content/trunk/forge/portal-content" /> -</repositories> \ No newline at end of file Copied: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml.sample (from rev 1229, trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml) =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/etc/repositories.xml.sample 2005-09-28 20:49:58 UTC (rev 1231) @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="iso-8859-1"?> + +<repositories> + <repository + id="default" + url="https://cms.labs.jboss.com/trunk/forge/portal-content" + username="" + password="" + localpath="" /> +</repositories> \ No newline at end of file |
Author: adamw Date: 2005-09-28 16:46:27 -0400 (Wed, 28 Sep 2005) New Revision: 1230 Added: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/DeleteDelayedOperation.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/AddDelayedOperation.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/SvnDirectory.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java Log: Added node/ dir deleting Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -4,4 +4,8 @@ public RepositoryException(Exception e) { super(e); } + + public RepositoryException(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-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -77,4 +77,21 @@ public String getName() { return name; } + + public void delete() { + service.getWriteLock(id, fullPath); + + if (!file.delete()) { + throw new RepositoryException("Unable to delete: " + fullPath); + } + + try { + service.delete(id, fullPath); + + // Log message is not important here. + service.commit(id, fullPath, ""); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } + } } 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-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -143,8 +143,4 @@ public String getLogMessage() { throw new RuntimeException("Operation not yet implemented"); } - - public void delete() { - throw new RuntimeException("Operation not yet implemented"); - } } Modified: 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/SvnHeadNode.java 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -143,8 +143,4 @@ public String getLogMessage() { throw new RuntimeException("Operation not yet implemented"); } - - public void delete() { - throw new RuntimeException("Operation not yet implemented"); - } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -15,6 +15,7 @@ import org.jboss.shotoku.svn.SvnService; import org.jboss.shotoku.svn.service.operations.AddDelayedOperation; import org.jboss.shotoku.svn.service.operations.CommitDelayedOperation; +import org.jboss.shotoku.svn.service.operations.DeleteDelayedOperation; import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl; import org.w3c.dom.Document; @@ -161,7 +162,8 @@ } public void delete(String id, String path) { - + SvnRepository repo = repositories.get(id); + repo.addDelayedOperation(new DeleteDelayedOperation(repo, path)); } public void add(String id, String path) throws SvnOperationFailed { Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/AddDelayedOperation.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/AddDelayedOperation.java 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/AddDelayedOperation.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -18,5 +18,4 @@ clientManager.getWCClient().doAdd(new File(fileSystemPath), true, false, false, false); } - } Added: trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/DeleteDelayedOperation.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/DeleteDelayedOperation.java 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/DeleteDelayedOperation.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -0,0 +1,21 @@ +package org.jboss.shotoku.svn.service.operations; + +import java.io.File; + +import org.jboss.shotoku.svn.service.SvnRepository; +import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.wc.SVNClientManager; + +public class DeleteDelayedOperation implements DelayedOperation { + private String fileSystemPath; + + public DeleteDelayedOperation(SvnRepository repo, String path) { + fileSystemPath = repo.getFileSystemPath(path); + } + + public void performOperation(SVNClientManager clientManager) + throws SVNException { + clientManager.getWCClient().doDelete(new File(fileSystemPath), true, + false); + } +} Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ModifyContentTest.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -0,0 +1,24 @@ +package org.jboss.shotoku.test; + +import org.jboss.shotoku.ContentManager; + +import junit.framework.TestCase; + +public class ModifyContentTest extends TestCase { + private ContentManager cm; + + public ModifyContentTest() { + cm = ContentManager.getContentManager("shotoku-test"); + } + + @Override + protected void setUp() throws Exception { + + } + + @Override + protected void tearDown() throws Exception { + + } + +} Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java 2005-09-28 17:49:15 UTC (rev 1229) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java 2005-09-28 20:46:27 UTC (rev 1230) @@ -43,10 +43,8 @@ pw.println("done<br />");*/ Node n = cm.getNode("shotoku-test/test2.txt"); - pw.println(n.getProperty("z") + "<br />"); - n.setProperty("z", "y"); - pw.println(n.getProperty("z") + "<br />"); - n.save("test"); + n.delete(); + pw.println("Deleted <br />"); } } |
From: <jbo...@li...> - 2005-09-28 17:49:33
|
Author: szimano Date: 2005-09-28 13:49:15 -0400 (Wed, 28 Sep 2005) New Revision: 1229 Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/main.gif trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/recentChanges.gif trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPageDictionary.java Removed: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslator.java Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/HTMLTranslatorTest.java Log: new buttons and begining of the rename function (added dictionary) Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-09-28 17:49:15 UTC (rev 1229) @@ -32,8 +32,8 @@ <a href="<%=actionURL%>&page=<%=defaultPage%>"><%=wikiName%></a> : <%=wikiPage%> </td> <td style="text-align: right;"> -[<a href="<%=actionURL%>&type=recentChanges">Recent changes</a>] -[<a href="<%=actionURL%>&page=<%=defaultPage%>"><%=defaultPage%></a>] +<a href="<%=actionURL%>&type=recentChanges"><img alt="Recent Changes" src="<%=wikiImagesUrl%>recentChanges.gif" border="0" /></a> +<a href="<%=actionURL%>&page=<%=defaultPage%>"><img alt="<%=defaultPage%>" src="<%=wikiImagesUrl%>main.gif" border="0" /></a> </td> </table> Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/main.gif =================================================================== (Binary files differ) Property changes on: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/main.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/recentChanges.gif =================================================================== (Binary files differ) Property changes on: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/recentChanges.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-28 17:49:15 UTC (rev 1229) @@ -24,7 +24,8 @@ * </p> * */ -public class FileDataSource implements MediaDataSource, AttachmentDataSource { +public class FileDataSource implements MediaDataSource, AttachmentDataSource, + WikiPageDictionary { /** * <p> @@ -46,14 +47,22 @@ private String pathToAttachments; + private boolean lock = false; + // private Properties fileDSProps; private final int BUF_SIZE = 32768; private Properties pageModProps; + private Properties pageDictionary; + + private Properties pageRevDictionary; + private File modFile; + private File pageDictionaryFile; + public FileDataSource() { System.out.println("Looking for props file !"); @@ -115,6 +124,53 @@ if (!pathToAttachmentsFile.exists()) { pathToAttachmentsFile.mkdirs(); } + + // load dictionary props + pageDictionary = new Properties(); + pageRevDictionary = new Properties(); + + pageDictionaryFile = new File(pathToMedia + "/dictionary.properties"); + + if (!pageDictionaryFile.exists()) { + try { + pageDictionaryFile.createNewFile(); + } catch (IOException e) { + System.err.println("Cannot create dictionary file: "); + e.printStackTrace(); + } + } else { + // there is dictionary file. Load props from it + FileInputStream is; + try { + is = new FileInputStream(pageDictionaryFile); + + try { + pageDictionary.load(is); + } catch (IOException e) { + e.printStackTrace(); + } + + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + } + + pageDictionary.setProperty("Tomek", "TomekToZebesciak"); + + // create pageRevDictionary - to make it work faster + + Set<Object> keys = pageDictionary.keySet(); + + for (Object key : keys) { + pageRevDictionary.setProperty(pageDictionary + .getProperty((String) key), (String) key); + } } public void loadProperties(Properties fileDSProps) { @@ -647,10 +703,14 @@ && (!pageFiles[i].getName().endsWith("-att"))) { // do not take dirs from OLD - if ((!pageFiles[i].getAbsolutePath() - .equals(pathToMedia + "/OLD"))&&(!pageFiles[i].getAbsolutePath() - .equals(pathToMedia + "/" + MediaDataSource.mediaTrashName))&&(!pageFiles[i].getAbsolutePath() - .equals(pathToMedia + "/" + AttachmentDataSource.attTrashName))) { + if ((!pageFiles[i].getAbsolutePath().equals( + pathToMedia + "/OLD")) + && (!pageFiles[i].getAbsolutePath().equals( + pathToMedia + "/" + + MediaDataSource.mediaTrashName)) + && (!pageFiles[i].getAbsolutePath().equals( + pathToMedia + "/" + + AttachmentDataSource.attTrashName))) { // get names for subpages getPageNamesFor(directory + "/" + pageFiles[i].getName(), attSet); @@ -798,12 +858,12 @@ File pageFile = new File(pageFileName); File pageTrashFile = new File(pageFileTrashName); - // create dirs to trash + // create dirs to trash File trashFileDir = new File(pathToMediaTrash + "/" + pageName); if (!trashFileDir.exists()) { trashFileDir.mkdirs(); } - + // look if page is already in trash (add i-bak) int i = 0; @@ -829,12 +889,12 @@ + pageName; String historyTrashDirName = historyTrashDirNameBase; - // create dirs to trash (history) + // create dirs to trash (history) trashFileDir = new File(pathToMediaTrash + "/OLD/" + pageName); if (!trashFileDir.exists()) { trashFileDir.mkdirs(); } - + pageFile = new File(historyDirName); pageTrashFile = new File(historyTrashDirName); @@ -884,12 +944,12 @@ + attachmentName + "-dir"; String attTrashName = attTrashNameBase; -// create dirs to trash + // create dirs to trash File trashFileDir = new File(pathToAttTrash + "/" + pageName + "-att/"); if (!trashFileDir.exists()) { trashFileDir.mkdirs(); } - + // moving file directory File attFile = new File(attName); @@ -927,12 +987,12 @@ String attTrashNameBase = pathToAttTrash + "/" + pageName + "-att"; String attTrashName = attTrashNameBase; - // create dirs to trash + // create dirs to trash File trashFileDir = new File(pathToAttTrash + "/" + pageName); if (!trashFileDir.exists()) { trashFileDir.mkdirs(); } - + // moving file directory File attFile = new File(attName); @@ -962,4 +1022,48 @@ return false; } } + + public String getRealName(String uid) { + while (lock); //wait till unlocked (dictionary is changing) + + return (pageDictionary.getProperty(uid) != null) ? pageDictionary + .getProperty(uid) : uid; + } + + public String getUid(String realName) { + while (lock); //wait till unlocked (dictionary is changing) + + return (pageRevDictionary.getProperty(realName) != null) ? pageRevDictionary + .getProperty(realName) + : realName; + } + + public synchronized void rename(String uid, String newName) { + lock = true; + + pageDictionary.setProperty(uid, newName); + pageRevDictionary.setProperty(newName, uid); + + FileOutputStream fos; + try { + fos = new FileOutputStream(pageDictionaryFile); + + try { + pageDictionary.store(fos, SAVE_COMMENT); + } catch (IOException e) { + e.printStackTrace(); + } + + try { + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + lock = false; + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-09-28 17:49:15 UTC (rev 1229) @@ -57,6 +57,8 @@ private MediaDataSource mediaDataSource; private AttachmentDataSource attachementDataSource; + + private WikiPageDictionary wikiPageDictionary; private String adminUserName = "admin"; @@ -94,7 +96,7 @@ } public boolean pageExists(String pageName) { - return mediaDataSource.pageExists(pageName); + return mediaDataSource.pageExists(getWikiPageDictionary().getUid(pageName)); } /** @@ -124,6 +126,8 @@ */ public WikiPage getByName(String pageName, WikiContext wikiContext) { + String realPageName = getWikiPageDictionary().getUid(pageName); + WikiPage ret = null; if (!mediaDataSource.preGet()) { @@ -131,17 +135,19 @@ return null; } - if (pages.containsKey(pageName)) { - ret = pages.get(pageName); + if (pages.containsKey(realPageName)) { + ret = pages.get(realPageName); } else { - ret = mediaDataSource.getPage(pageName); + ret = mediaDataSource.getPage(realPageName); - pages.put(pageName, ret); + ret.setName(pageName); + + pages.put(realPageName, ret); } if ((wikiContext != null) && (ret != null) && (!ret.isViewable()) && (!wikiContext.getUser().equals(adminUserName))) { - return new WikiPage(pageName, null, + return new WikiPage(realPageName, null, "I am sorry, but you are not allowed to see this page", 0, 0, new Date(), getMediaDataSource(), getAttachementDataSource(), false, false); @@ -176,14 +182,18 @@ public WikiPage getByName(String pageName, WikiContext wikiContext, int version) { + String realPageName = getWikiPageDictionary().getUid(pageName); + WikiPage ret = null; - if (pages.containsKey(pageName)) { - ret = pages.get(pageName); + if (pages.containsKey(realPageName)) { + ret = pages.get(realPageName); } else { - ret = mediaDataSource.getPage(pageName); + ret = mediaDataSource.getPage(realPageName); - pages.put(pageName, ret); + ret.setName(pageName); + + pages.put(realPageName, ret); } ret = ret.getPageAtVersion(true, version); @@ -217,6 +227,7 @@ public void init() { mediaDataSource = new FileDataSource(); attachementDataSource = new FileDataSource(); + wikiPageDictionary = new FileDataSource(); pages = new HashMap<String, WikiPage>(); wikiTypes = new HashMap<String, WikiType>(); @@ -545,4 +556,8 @@ return false; } } + + public WikiPageDictionary getWikiPageDictionary() { + return wikiPageDictionary; + } } Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPageDictionary.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPageDictionary.java 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPageDictionary.java 2005-09-28 17:49:15 UTC (rev 1229) @@ -0,0 +1,10 @@ +package org.jboss.wiki; + +public interface WikiPageDictionary { + + public String getRealName(String uid); + + public String getUid(String realName); + + public void rename(String uid, String newName); +} Deleted: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslator.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslator.java 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslator.java 2005-09-28 17:49:15 UTC (rev 1229) @@ -1,1013 +0,0 @@ -/************************************************** - * * - * JBoss Labs: Creating Professional Open Source * - * * - * Distributable under LGPL license. * - * See terms of license at gnu.org. * - * * - *************************************************/ - -/* - Copyright (C) 2005 Damon Sicore, - Rali Genova, - Tomasz Szymanski, - Adam Warski, - JBoss, Inc. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -*/ - -/** -* Portions of this work are based on the work -* of Janne Jalkanen of the JSPWiki project. -* -* Marked Portions are Copyright (C) 2001-2002 Janne Jalkanen (Jan...@ik...) -* -* Those portions are marked by the 'author' javadoc tag -* and list Janne Jalkanen as the author of that method. -* -* This class is based on the JSPWiki 2.0 version -* of the TranslatorReader.java class. The original -* version of that class can be found here: -* -* http://anonsvn.labs.jboss.com/branches/forge/archives/jspwiki/src/com/ecyrd/jspwiki/TranslatorReader.java -* -*/ -package org.jboss.wiki.plugins; - -/** - * @author <a href="mailto:ral...@jb...">Rali Genova </a> - * - * - */ -import java.io.*; -import java.util.regex.*; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.StringTokenizer; -import org.jboss.wiki.WikiEngine; -import org.jboss.wiki.WikiPage; -import org.jboss.wiki.WikiPlugin; -import org.jboss.wiki.WikiSession; - -public class HTMLTranslator extends WikiPlugin { - - /* URL components, later to be configurable */ - private String portalHome = ""; - - private String wikiHome = ""; - - // private String actionType = "&ctrl:type="; - - private String page = "&page="; - - private String mediaPatterns; - - private String imagePath; - - private String[] mediaFormats = { "*.png", "*.jpeg", "*.gif" }; - - /* formatting variables */ - - private boolean m_allowHTML = false; - - private boolean m_isbold = false; - - private boolean m_isitalic = false; - - private boolean m_isTypedText = false; - - private boolean m_istable = false; - - private boolean m_isPre = false; - - private boolean m_isdefinition = false; - - private int m_listlevel = 0; - - private int m_numlistlevel = 0; - - private boolean m_camelCaseLinks = true; // camelCase enabled - - /** Tag that gets closed at EOL. */ - private String m_closeTag = null; - - /** Allow this many characters to be pushed back in the stream. */ - private static final int PUSHBACK_BUFFER_SIZE = 8; - - /** - * These characters constitute word separators when trying to find CamelCase - * links. - */ - private static final String WORD_SEPARATORS = ",.|:;+=&"; - - private PushbackReader m_in; - - // stores the name of the wiki page we are currently processing - private String pageName = ""; - - public HTMLTranslator() { - - } - - /** - * Push back any character to the current input. Does not push back a read - * EOF, though. - * - * @author Janne Jalkanen - */ - private void pushBack(int c) throws IOException { - if (c != -1) { - m_in.unread(c); - } - } - - /** - * Wiki to HTML transformation method, plain URIs transformation not - * implemented - * - * @param page - * The String representation of a wiki page's content - * @return The final transformed into HTML string - * @author Janne Jalkanen - * @author Rali Genova - */ - public String parseLinks(String page) throws IOException { - m_in = new PushbackReader(new StringReader(page), PUSHBACK_BUFFER_SIZE); - StringBuffer buf = new StringBuffer(); - StringBuffer word = null; - int previousCh = -2; - int start = 0; - boolean quitReading = false; - boolean newLine = true; // FIXME: not true if reading starts in middle - // of buffer - - while (!quitReading) { - int ch = nextToken(); - String s = null; - - // begin of HTML transformation - if (m_isPre) { - if (ch == '}') { - buf.append(handleClosebrace()); - } else if (ch == '<') { - buf.append("<"); - } else if (ch == '>') { - buf.append(">"); - } else if (ch == -1) { - quitReading = true; - } else { - buf.append((char) ch); - } - - continue; - } - // - // CamelCase detection, a non-trivial endeavour. - // We keep track of all white-space separated entities, which we - // hereby refer to as "words". We then check for an existence - // of a CamelCase format text string inside the "word", and - // if one exists, we replace it with a proper link. - // - - if (m_camelCaseLinks) { - // Quick parse of start of a word boundary. - - if (word == null - && (Character.isWhitespace((char) previousCh) - || WORD_SEPARATORS.indexOf((char) previousCh) != -1 || newLine) - && !Character.isWhitespace((char) ch)) { - word = new StringBuffer(); - } - - // Are we currently tracking a word? - if (word != null) { - // - // Check for the end of the word. - // - - if (Character.isWhitespace((char) ch) || ch == -1 - || WORD_SEPARATORS.indexOf((char) ch) != -1) { - String potentialLink = word.toString(); - - String camelCase = parseCamelCase(potentialLink); - - if (camelCase != null) { - start = buf.toString().lastIndexOf(camelCase); - buf.replace(start, start + camelCase.length(), - handleHyperlinks(camelCase)); - } - - // We've ended a word boundary, so time to reset. - word = null; - } else { - // This should only be appending letters and digits. - word.append((char) ch); - } // if end of word - } // if word's not null - - // Always set the previous character to test for word starts. - previousCh = ch; - - } // if m_camelCaseLinks - // - // Check if any lists need closing down. - // - - if (newLine && ch != '*' && ch != ' ' && m_listlevel > 0) { - buf.append("</LI>\n"); - for (; m_listlevel > 0; m_listlevel--) { - buf.append("</UL>\n"); - } - } - - if (newLine && ch != '#' && ch != ' ' && m_numlistlevel > 0) { - buf.append("</LI>\n"); - for (; m_numlistlevel > 0; m_numlistlevel--) { - buf.append("</OL>\n"); - } - } - - if (newLine && ch != '|' && m_istable) { - buf.append("</TABLE>\n"); - m_istable = false; - m_closeTag = null; - } - - switch (ch) { - case '\r': - // DOS linefeeds we forget - s = null; - break; - - case '\n': - // - // Close things like headings, etc. - // - if (m_closeTag != null) { - buf.append(m_closeTag); - m_closeTag = null; - } - - m_isdefinition = false; - - if (newLine) { - // Paragraph change. - - buf.append("<P>\n"); - } else { - buf.append("\n"); - newLine = true; - } - /* - * wiki syntax handling, later to be refactored so multiple wiki - * syntax is supported - */ - - break; - case '\\': - s = handleBackslash(); - break; - - case '_': - s = handleUnderscore(); - break; - - case '\'': - s = handleApostrophe(); - break; - - case '{': - s = handleOpenbrace(); - break; - - case '}': - s = handleClosebrace(); - break; - - case '-': - s = handleDash(); - break; - - case '!': - if (newLine) { - s = handleHeading(); - } else { - s = "!"; - } - break; - - case ';': - if (newLine) { - s = handleDefinitionList(); - } else { - s = ";"; - } - break; - - case ':': - if (m_isdefinition) { - s = "</DT><DD>"; - m_isdefinition = false; - } else { - s = ":"; - } - break; - - case '[': - s = handleOpenbracket(); - break; - - case '*': - if (newLine) { - s = handleUnorderedList(); - } else { - s = "*"; - } - break; - - case '#': - if (newLine) { - s = handleOrderedList(); - } else { - s = "#"; - } - break; - - case '|': - s = handleBar(newLine); - break; - - case '<': - s = m_allowHTML ? "<" : "<"; - break; - - case '>': - s = m_allowHTML ? ">" : ">"; - break; - - case '\"': - s = m_allowHTML ? "\"" : """; - break; - - case '~': - s = handleTilde(); - break; - case -1: - quitReading = true; - break; - - default: - buf.append((char) ch); - newLine = false; - break; - } - if (s != null) { - buf.append(s); - - newLine = false; - } - - } - - return buf.toString(); - } - - /** - * @param link - - * potential camel case link to be tested - * @return the string itself if not a camel case, and a proper link - * otherwise - * @author Rali Genova - * @author Janne Jalkanen - */ - public String parseCamelCase(String link) { - String camelCasepattern = "^([^\\p{Alnum}]*|\\~)([\\p{Upper}]+[\\p{Lower}]+[\\p{Upper}]+[\\p{Alnum}]*)[^\\p{Alnum}]*$"; - Pattern camelCase = Pattern.compile(camelCasepattern); - Matcher camelMatch = camelCase.matcher(link); - if (camelMatch.matches()) { - String result = camelMatch.group(2); // get the camel case words - if (camelMatch.group(1) != null) { - if ((camelMatch.group(1).equals("~")) - || (camelMatch.group(1).indexOf('[') != -1)) { - return null; // this is camelCase escape or [...] link - } - } - return result; - - }// if match - return null; - } - - /* a collection of all media formats allowed on wiki */ - private Collection getImagePatterns() { - ArrayList patt = new ArrayList(); - String imagepattern = mediaPatterns; - String[] elem = imagepattern.split(","); - for (int i = 0; i < elem.length; i++) { - patt.add(elem[i].trim()); - } - - return patt; - } - - private boolean checkImageLink(String text) { - ArrayList ptrns = (ArrayList) getImagePatterns(); - for (int i = 0; i < ptrns.size(); i++) { - if (text.endsWith((String) ptrns.get(i))) { - return true; - } - } - - return false; - } - - /** - * Generic escape of next character or entity. - */ - private String handleTilde() throws IOException { - int ch = nextToken(); - - if (ch == '|') - return "|"; - - if (Character.isUpperCase((char) ch)) { - return String.valueOf((char) ch); - } - - // No escape. - pushBack(ch); - - return "~"; - } - - private String handleUnderscore() throws IOException { - int ch = nextToken(); - String res = "_"; - - if (ch == '_') { - res = m_isbold ? "</B>" : "<B>"; - m_isbold = !m_isbold; - } else { - pushBack(ch); - } - - return res; - } - - /** - * For example: italics. - */ - private String handleApostrophe() throws IOException { - int ch = nextToken(); - String res = "'"; - - if (ch == '\'') { - res = m_isitalic ? "</I>" : "<I>"; - m_isitalic = !m_isitalic; - } else { - m_in.unread(ch); - } - - return res; - } - - private String handleDash() throws IOException { - int ch = nextToken(); - - if (ch == '-') { - int ch2 = nextToken(); - - if (ch2 == '-') { - int ch3 = nextToken(); - - if (ch3 == '-') { - // Empty away all the rest of the dashes. - // Do not forget to return the first non-match back. - while ((ch = nextToken()) == '-') - ; - - pushBack(ch); - return "<HR />"; - } - - pushBack(ch3); - } - pushBack(ch2); - } - - pushBack(ch); - - return "-"; - } - - private String handleHeading() throws IOException { - StringBuffer buf = new StringBuffer(); - - int ch = nextToken(); - - if (ch == '!') { - int ch2 = nextToken(); - - if (ch2 == '!') { - buf.append("<H2>"); - m_closeTag = "</H2>"; - } else { - buf.append("<H3>"); - m_closeTag = "</H3>"; - pushBack(ch2); - } - } else { - buf.append("<H4>"); - m_closeTag = "</H4>"; - pushBack(ch); - } - - return buf.toString(); - } - - private String handleUnorderedList() throws IOException { - StringBuffer buf = new StringBuffer(); - - if (m_listlevel > 0) { - buf.append("</LI>\n"); - } - - int numBullets = countChars(m_in, '*') + 1; - - if (numBullets > m_listlevel) { - for (; m_listlevel < numBullets; m_listlevel++) - buf.append("<UL>\n"); - } else if (numBullets < m_listlevel) { - for (; m_listlevel > numBullets; m_listlevel--) - buf.append("</UL>\n"); - } - - buf.append("<LI>"); - - return buf.toString(); - } - - private String handleOrderedList() throws IOException { - StringBuffer buf = new StringBuffer(); - - if (m_numlistlevel > 0) { - buf.append("</LI>\n"); - } - - int numBullets = countChars(m_in, '#') + 1; - - if (numBullets > m_numlistlevel) { - for (; m_numlistlevel < numBullets; m_numlistlevel++) - buf.append("<OL>\n"); - } else if (numBullets < m_numlistlevel) { - for (; m_numlistlevel > numBullets; m_numlistlevel--) - buf.append("</OL>\n"); - } - - buf.append("<LI>"); - - return buf.toString(); - - } - - private int countChars(PushbackReader in, char c) throws IOException { - int count = 0; - int ch; - - while ((ch = in.read()) != -1) { - if ((char) ch == c) { - count++; - } else { - in.unread(ch); - break; - } - } - - return count; - } - - private String handleBar(boolean newLine) throws IOException { - StringBuffer sb = new StringBuffer(); - - if (!m_istable && !newLine) { - return "|"; - } - - if (newLine) { - if (!m_istable) { - sb.append("<TABLE CLASS=\"wikitable\" BORDER=\"1\">\n"); - m_istable = true; - } - - sb.append("<TR>"); - m_closeTag = "</TD></TR>"; - } - - int ch = nextToken(); - - if (ch == '|') { - if (!newLine) { - sb.append("</TH>"); - } - sb.append("<TH>"); - m_closeTag = "</TH></TR>"; - } else { - if (!newLine) { - sb.append("</TD>"); - } - sb.append("<TD>"); - pushBack(ch); - } - - return sb.toString(); - } - - private String handleDefinitionList() throws IOException { - if (!m_isdefinition) { - m_isdefinition = true; - - m_closeTag = "</DD>\n</DL>"; - - return "<DL>\n<DT>"; - } - - return ";"; - } - - private String handleBackslash() throws IOException { - int ch = nextToken(); - - if (ch == '\\') { - int ch2 = nextToken(); - - if (ch2 == '\\') { - return "<BR clear=\"all\" />"; - } - - pushBack(ch2); - - return "<BR />"; - } - - pushBack(ch); - - return "\\"; - } - - private String handleOpenbracket() throws IOException { - StringBuffer sb = new StringBuffer(); - int ch; - boolean isPlugin = false; - - while ((ch = nextToken()) == '[') { - sb.append((char) ch); - } - - if (sb.length() > 0) { - return sb.toString();// not a link - } - - // - // Find end of hyperlink - // - pushBack(ch); - ch = nextToken(); - - while (ch != -1) { - if (ch == ']')// && (!isPlugin || sb.charAt( sb.length()-1 ) == - // '}' - // ) ) - { - break; - } - - sb.append((char) ch); - - ch = nextToken(); - } - - if (ch == -1) { - - return sb.toString(); - } - - return handleHyperlinks(sb.toString()); - } - - private String handleOpenbrace() throws IOException { - int ch = nextToken(); - String res = "{"; - - if (ch == '{') { - int ch2 = nextToken(); - - if (ch2 == '{') { - res = "<PRE>"; - m_isPre = true; - } else { - pushBack(ch2); - - res = "<TT>"; - m_isTypedText = true; - } - } else { - pushBack(ch); - } - - return res; - } - - /** - * Handles both }} and }}} - */ - private String handleClosebrace() throws IOException { - String res = "}"; - - int ch2 = nextToken(); - - if (ch2 == '}') { - int ch3 = nextToken(); - - if (ch3 == '}') { - if (m_isPre) { - m_isPre = false; - res = "</PRE>"; - } else { - res = "}}}"; - } - } else { - pushBack(ch3); - - if (!m_isPre) { - res = "</TT>"; - m_isTypedText = false; - } else { - pushBack(ch2); - } - } - } else { - pushBack(ch2); - } - - return res; - } - - /** - * Returns true if the link is really command to insert a plugin. - * <P> - * Currently we just check if the link starts with "{INSERT", or just plain - * "{" but not "{$". - * - * @author Janne Jalkanen - * - * @param link - * Link text, i.e. the contents of text between []. - * @return True, if this link seems to be a command to insert a plugin here. - */ - public static boolean isPluginLink(String link) { - return link.startsWith("{INSERT") - || (link.startsWith("{") && !link.startsWith("{$")); - } - - /** - * method to create links for external pages of Wiki pages - * - * @param string - * @return the HTML link representation of the wiki page/external link - * @author Rali Genova - */ - private String handleHyperlinks(String link) { - String result = ""; - String text = ""; - String wikiPage = ""; - - if (isPluginLink(link)) { - return null; // we do not include plugin links for now - } - int border = link.indexOf('|'); - if (border != -1) // [text|link] case - { - text = link.substring(0, border); - link = link.substring(border + 1); - - } else // [link] case - { - text = link; - - } - - // external link - if (isExternalLink(link)) { - if (checkImageLink(link)) { - result = "<img src=\"" + link + "\"alt=\"" + text + "\">";// external - // image - } else - result = "<a href=\"" - + link - + "\"target=\"_blank\">" - + text - + "</a><img src=\"/file-access/default/members/jbosswiki/images/out.png\"/>"; - } - // internal link - else { - // check if a footnote - if (link.startsWith("#"))// footnote reference - { - // http://labs.jboss.com/JSPWiki/Wiki.jsp?page=TextFormattingRules#ref-TextFormattingRules-1 - result = "<a name=\"ref-" + pageName + "-" + link.substring(1) - + "\">[" + text + "]</A>"; - - } else if (isNumber(link))// defines footnote - { - result = "<a href=\"" + portalHome + wikiHome + page + pageName - + "#ref-" + pageName + "-" + link + "\">[" + text - + "]</A>"; - } - - // check if not an image link as well - else if (checkImageLink(link)) { - result = "<img src=\"" + imagePath + "/" + pageName + "/" - + link + "\" alt=\"" + text + "\">"; - - } - // check for attachments later on - else { - wikiPage = cleanLink(link); - if (wikiEngine.pageExists(wikiPage)) { - result = "<a href=\"" + portalHome + wikiHome + page - + wikiPage + "\">" + text + "</a>"; - } else - result = "<u>" + text + "</u>" + "<a href=\"" + portalHome - + wikiHome + page + wikiPage + "\">" + "?" + "</a>"; - } - } - - return result; - } - - /** - * Figures out if a link is an off-site link. This recognizes the most - * common protocols by checking how it starts. (clears all white space in - * case the link starts with '\n' or [space] - * - * @author Janne Jalkanen - */ - private boolean isExternalLink(String link) { - link = link.trim(); - return link.startsWith("http:") || link.startsWith("ftp:") - || link.startsWith("https:") || link.startsWith("mailto:") - || link.startsWith("news:") || link.startsWith("file:"); - } - - private int nextToken() throws IOException { - return m_in.read(); - } - - /** - * Push back any character to the current input. Does not push back a read - * EOF, though. - */ - - /** - * Cleans a Wiki name. - * <P>[ This is a link ] -> ThisIsALink - * - * @param link - * Link to be cleared. Null is safe, and causes this to return - * null. - * @return A cleaned link. - * - * @since 2.0 - * @author Janne Jalkanen - */ - public String cleanLink(String link) { - StringBuffer clean = new StringBuffer(); - - if (link == null) - return null; - - // - // Compress away all whitespace and capitalize - // all words in between. - // - - StringTokenizer st = new StringTokenizer(link, " -"); - - while (st.hasMoreTokens()) { - StringBuffer component = new StringBuffer(st.nextToken()); - - component.setCharAt(0, Character.toUpperCase(component.charAt(0))); - - // - // We must do this, because otherwise compiling on JDK 1.4 causes - // a downwards incompatibility to JDK 1.3. - // - clean.append(component.toString()); - } - - // - // Remove non-alphanumeric characters that should not - // be put inside WikiNames. Note that all valid - // Unicode letters are considered okay for WikiNames. - // It is the problem of the WikiPageProvider to take - // care of actually storing that information. - // - - for (int i = 0; i < clean.length(); i++) { - if (!(Character.isLetterOrDigit(clean.charAt(i)) - || clean.charAt(i) == '_' || clean.charAt(i) == '.')) { - clean.deleteCharAt(i); - --i; // We just shortened this buffer. - } - } - - return clean.toString(); - } - - /** - * Returns true, if the argument contains a number, otherwise false. In a - * quick test this is roughly the same speed as Integer.parseInt() if the - * argument is a number, and roughly ten times the speed, if the argument is - * NOT a number. - */ - - private boolean isNumber(String s) { - if (s == null) - return false; - - if (s.length() > 1 && s.charAt(0) == '-') - s = s.substring(1); - - for (int i = 0; i < s.length(); i++) { - if (!Character.isDigit(s.charAt(i))) - return false; - } - - return true; - } - - // not sure what it is supposed to do but neccessary to compile - public void next() { - } - - public WikiPage process(final WikiPage wikiPage, WikiSession wikiSession) { - WikiPage newPage = null; - m_allowHTML = false; - m_isbold = false; - m_isitalic = false; - m_isTypedText = false; - m_istable = false; - m_isPre = false; - m_isdefinition = false; - m_listlevel = 0; - m_numlistlevel = 0; - m_camelCaseLinks = true; // camelCase enabled - /** Tag that gets closed at EOL. */ - m_closeTag = null; - - portalHome = (String)wikiSession.getAttribute("hostURL")+(String)wikiSession.getAttribute("actionURL"); - wikiHome = ""; - imagePath = (String)wikiSession.getAttribute("hostURL") + "/wiki"; - - try { - newPage = (WikiPage) wikiPage.clone(); - } catch (CloneNotSupportedException cnse) { - System.out.println("cannot clone the page: " + cnse); - } - - try { - pageName = newPage.getName(); - String newContent = parseLinks(newPage.getContent()); - - newPage.setPageContent(newContent); - - return newPage; - } catch (IOException e) { - System.out.println(e); - newPage.setPageContent("error on page"); - } - return newPage; - } - - @Override - public void init() { - mediaPatterns = getProperty("imagePatterns"); - - } - -} Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/HTMLTranslatorParts.java 2005-09-28 17:49:15 UTC (rev 1229) @@ -855,7 +855,7 @@ } // check for attachments later on else { - wikiPage = cleanLink(link); + wikiPage = wikiEngine.getWikiPageDictionary().getRealName(cleanLink(link)); if (wikiEngine.pageExists(wikiPage)) { result = "<a href=\"" + portalHome + wikiHome + page + wikiPage + "\">" + text + "</a>"; Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java 2005-09-28 17:49:15 UTC (rev 1229) @@ -11,84 +11,85 @@ import org.jboss.wiki.WikiSession; public class RecentlyChangedPagesPlugin extends WikiPlugin { - - private int numOfDays = 30; + private int numOfDays = 30; // just initialization if sth goes wrong. Real + // number is taken from wikiPlugin.properties + @Override public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) { StringBuilder recentChanges = new StringBuilder(); - - recentChanges.append("<h3>Recent changes from last ").append(numOfDays).append(" days</h3>\n"); + + recentChanges.append("<h3>Recent changes from last ").append(numOfDays) + .append(" days</h3>\n"); recentChanges.append("<hr>\n"); recentChanges.append(HTMLTranslatorParts.pagePartRegexStart); - + int offset = recentChanges.length(); - + Set<String> pages = wikiEngine.getMediaDataSource().getAllPageNames(); TreeMap<String, TreeSet<String>> sortedByDate = new TreeMap<String, TreeSet<String>>(); - + // get now date Calendar now = Calendar.getInstance(); Calendar then = Calendar.getInstance(); now.setTime(new Date()); - + for (String name : pages) { WikiPage temp = wikiEngine.getByName(name, null); then.setTime(temp.getEditDate()); - + then.add(Calendar.DAY_OF_MONTH, numOfDays); - + if (then.after(now)) { - //this page has been edited in last numOfDays days + // this page has been edited in last numOfDays days Calendar cal = Calendar.getInstance(); String key; - + cal.setTime(temp.getEditDate()); - - String month = String.valueOf(cal.get(Calendar.MONTH)+1); + + String month = String.valueOf(cal.get(Calendar.MONTH) + 1); String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)); - + if (month.length() == 1) - month = "0"+month; - + month = "0" + month; + if (day.length() == 1) - day = "0"+day; - - //create key + day = "0" + day; + + // create key key = cal.get(Calendar.YEAR) + "/" + (month) + "/" + day; - + if (sortedByDate.get(key) == null) { TreeSet<String> set = new TreeSet<String>(); set.add(temp.getName()); sortedByDate.put(key, set); - } - else { + } else { sortedByDate.get(key).add(temp.getName()); } } } - + // add pages to recentChanges page - + Set<String> keySet = sortedByDate.keySet(); - + for (String date : keySet) { StringBuilder day = new StringBuilder(); - + day.append("!''").append(date).append("''\n"); for (String pageName : sortedByDate.get(date)) { day.append("[").append(pageName).append("]\\\\\n"); } - + recentChanges.insert(offset, day.toString()); } - + recentChanges.append(HTMLTranslatorParts.pagePartRegexEnd).append("\n"); - + wikiPage.setPageContent(recentChanges.toString()); - + return wikiPage; } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/HTMLTranslatorTest.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/HTMLTranslatorTest.java 2005-09-28 15:28:39 UTC (rev 1228) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/HTMLTranslatorTest.java 2005-09-28 17:49:15 UTC (rev 1229) @@ -6,7 +6,7 @@ import java.io.FilenameFilter; import java.io.IOException; -import org.jboss.wiki.plugins.HTMLTranslator; +import org.jboss.wiki.plugins.HTMLTranslatorParts; import junit.framework.Assert; import junit.framework.TestCase; @@ -27,7 +27,7 @@ public void testParseLinks() { FileReader fin = null; - HTMLTranslator tr = new HTMLTranslator(); + HTMLTranslatorParts tr = new HTMLTranslatorParts(); File dir = new File("../data"); // The list of files can also be retrieved as File objects |
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] |
From: <jbo...@li...> - 2005-09-27 21:57:42
|
Author: szimano Date: 2005-09-27 17:57:39 -0400 (Tue, 27 Sep 2005) New Revision: 1227 Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java Log: changed bug with showing same date couple times Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java 2005-09-27 20:31:45 UTC (rev 1226) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/RecentlyChangedPagesPlugin.java 2005-09-27 21:57:39 UTC (rev 1227) @@ -26,7 +26,7 @@ Set<String> pages = wikiEngine.getMediaDataSource().getAllPageNames(); - TreeMap<Calendar, TreeSet<String>> sortedByDate = new TreeMap<Calendar, TreeSet<String>>(); + TreeMap<String, TreeSet<String>> sortedByDate = new TreeMap<String, TreeSet<String>>(); // get now date Calendar now = Calendar.getInstance(); @@ -42,16 +42,23 @@ if (then.after(now)) { //this page has been edited in last numOfDays days - Calendar key = Calendar.getInstance(); + Calendar cal = Calendar.getInstance(); + String key; - key.setTime(temp.getEditDate()); + cal.setTime(temp.getEditDate()); - //make it 0:00:00 hour - key.set(Calendar.HOUR, 0); - key.set(Calendar.MINUTE, 0); - key.set(Calendar.SECOND, 0); - key.set(Calendar.MILLISECOND, 0); + String month = String.valueOf(cal.get(Calendar.MONTH)+1); + String day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)); + if (month.length() == 1) + month = "0"+month; + + if (day.length() == 1) + day = "0"+day; + + //create key + key = cal.get(Calendar.YEAR) + "/" + (month) + "/" + day; + if (sortedByDate.get(key) == null) { TreeSet<String> set = new TreeSet<String>(); set.add(temp.getName()); @@ -65,12 +72,12 @@ // add pages to recentChanges page - Set<Calendar> keySet = sortedByDate.keySet(); + Set<String> keySet = sortedByDate.keySet(); - for (Calendar date : keySet) { + for (String date : keySet) { StringBuilder day = new StringBuilder(); - day.append("!''").append(date.get(Calendar.DAY_OF_MONTH)).append("/").append(date.get(Calendar.MONTH)).append("/").append(date.get(Calendar.YEAR)).append("''\n"); + day.append("!''").append(date).append("''\n"); for (String pageName : sortedByDate.get(date)) { day.append("[").append(pageName).append("]\\\\\n"); } |
From: <jbo...@li...> - 2005-09-27 20:29:44
|
Author: adamw Date: 2005-09-27 16:29:26 -0400 (Tue, 27 Sep 2005) New Revision: 1225 Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/lib/ trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/lib/junitee.jar Removed: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java trunk/forge/portal-extensions/shotoku/shotoku-test/maven.xml trunk/forge/portal-extensions/shotoku/shotoku-test/project.properties trunk/forge/portal-extensions/shotoku/shotoku-test/project.xml trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/web.xml Log: JUnit setup for shotoku 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-09-27 16:14:21 UTC (rev 1224) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java 2005-09-27 20:29:26 UTC (rev 1225) @@ -13,7 +13,7 @@ /** * Puts an earlier acquiered exclusive write lock for a given path. * This should be called only in case of an internal node-implementation - * execption that occures while saving. + * exeception that occures while saving. * @param id Id of the repository. * @param path Path to release the lock for. */ Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/maven.xml =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/maven.xml 2005-09-27 16:14:21 UTC (rev 1224) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/maven.xml 2005-09-27 20:29:26 UTC (rev 1225) @@ -13,6 +13,9 @@ </goal> <goal name="build"> + <attainGoal name="jar" /> + <ant:copy file="target/shotoku-test-1.0.jar" + tofile="target/shotoku-test/WEB-INF/lib/shotoku-test.jar" /> <attainGoal name="war" /> </goal> Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/project.properties =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/project.properties 2005-09-27 16:14:21 UTC (rev 1224) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/project.properties 2005-09-27 20:29:26 UTC (rev 1225) @@ -1,3 +1,4 @@ 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.jar.includes=**/*Test* \ No newline at end of file Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/project.xml =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/project.xml 2005-09-27 16:14:21 UTC (rev 1224) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/project.xml 2005-09-27 20:29:26 UTC (rev 1225) @@ -41,5 +41,14 @@ <version>1.0</version> <jar>javax.servlet.jar</jar> </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <properties> + <war.bundle>true</war.bundle> + </properties> + </dependency> </dependencies> </project> Deleted: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java 2005-09-27 16:14:21 UTC (rev 1224) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java 2005-09-27 20:29:26 UTC (rev 1225) @@ -1,52 +0,0 @@ -package org.jboss.shotoku.test; - -import java.io.IOException; -import java.io.PrintWriter; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.jboss.shotoku.ContentManager; -import org.jboss.shotoku.Node; - -public class ShotokuTest extends HttpServlet { - - @Override - protected void service(HttpServletRequest request, - HttpServletResponse response) throws ServletException, IOException { - response.setContentType("text/html"); - PrintWriter pw = response.getWriter(); - - ContentManager cm = ContentManager.getContentManager(""); - - /*String filePath = "shotoku-test/test1.txt"; - - Node n = cm.getNode(filePath); - - pw.println("<b>File " + filePath + " content:</b><br />"); - pw.println(n.getContent()); - pw.println("<br />"); - pw.println("<br />"); - - n.setContent("1"); - - pw.println("Saving ... <br />"); - n.save("Shotoku test 1"); - pw.println("done<br />"); - - n.setContent("2"); - - pw.println("Saving ... <br />"); - n.save("Shotoku test 2"); - pw.println("done<br />");*/ - - Node n = cm.getNode("shotoku-test/test2.txt"); - pw.println(n.getProperty("z") + "<br />"); - n.setProperty("z", "y"); - pw.println(n.getProperty("z") + "<br />"); - n.save("test"); - } - -} Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java 2005-09-27 16:14:21 UTC (rev 1224) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java 2005-09-27 20:29:26 UTC (rev 1225) @@ -0,0 +1,52 @@ +package org.jboss.shotoku.test.servlet; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; + +public class ShotokuServlet extends HttpServlet { + + @Override + protected void service(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html"); + PrintWriter pw = response.getWriter(); + + ContentManager cm = ContentManager.getContentManager(""); + + /*String filePath = "shotoku-test/test1.txt"; + + Node n = cm.getNode(filePath); + + pw.println("<b>File " + filePath + " content:</b><br />"); + pw.println(n.getContent()); + pw.println("<br />"); + pw.println("<br />"); + + n.setContent("1"); + + pw.println("Saving ... <br />"); + n.save("Shotoku test 1"); + pw.println("done<br />"); + + n.setContent("2"); + + pw.println("Saving ... <br />"); + n.save("Shotoku test 2"); + pw.println("done<br />");*/ + + Node n = cm.getNode("shotoku-test/test2.txt"); + pw.println(n.getProperty("z") + "<br />"); + n.setProperty("z", "y"); + pw.println(n.getProperty("z") + "<br />"); + n.save("test"); + } + +} Added: trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/lib/junitee.jar =================================================================== (Binary files differ) Property changes on: trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/lib/junitee.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/web.xml =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/web.xml 2005-09-27 16:14:21 UTC (rev 1224) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/web.xml 2005-09-27 20:29:26 UTC (rev 1225) @@ -4,12 +4,27 @@ "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> - <servlet-name>shotokuTest</servlet-name> - <servlet-class>org.jboss.shotoku.test.ShotokuTest</servlet-class> + <servlet-name>shotokuServlet</servlet-name> + <servlet-class>org.jboss.shotoku.test.servlet.ShotokuServlet</servlet-class> </servlet> <servlet-mapping> - <servlet-name>shotokuTest</servlet-name> - <url-pattern>/*</url-pattern> + <servlet-name>shotokuServlet</servlet-name> + <url-pattern>/servlet/*</url-pattern> </servlet-mapping> -</web-app> \ No newline at end of file + + <servlet> + <servlet-name>JUnitEETestServlet</servlet-name> + <description>JUnitEE test runner</description> + <servlet-class>org.junitee.servlet.JUnitEEThreadedServlet</servlet-class> + <init-param> + <param-name>searchResources</param-name> + <param-value>shotoku-test.jar</param-value> + </init-param> + </servlet> + + <servlet-mapping> + <servlet-name>JUnitEETestServlet</servlet-name> + <url-pattern>/test/*</url-pattern> + </servlet-mapping> +</web-app> |
From: <jbo...@li...> - 2005-09-27 16:14:28
|
Author: dam...@jb... Date: 2005-09-27 12:14:21 -0400 (Tue, 27 Sep 2005) New Revision: 1224 Modified: qa/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java Log: MERGED: 1221:1223 trunk forge into qa forge for 1.0.4 release... this is a wiki bug fix. Modified: qa/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java =================================================================== --- qa/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-27 15:55:35 UTC (rev 1223) +++ qa/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-27 16:14:21 UTC (rev 1224) @@ -647,8 +647,10 @@ && (!pageFiles[i].getName().endsWith("-att"))) { // do not take dirs from OLD - if (!pageFiles[i].getAbsolutePath() - .equals(pathToMedia + "/OLD")) { + if ((!pageFiles[i].getAbsolutePath() + .equals(pathToMedia + "/OLD"))&&(!pageFiles[i].getAbsolutePath() + .equals(pathToMedia + "/" + MediaDataSource.mediaTrashName))&&(!pageFiles[i].getAbsolutePath() + .equals(pathToMedia + "/" + AttachmentDataSource.attTrashName))) { // get names for subpages getPageNamesFor(directory + "/" + pageFiles[i].getName(), attSet); |
From: <jbo...@li...> - 2005-09-27 15:55:45
|
Author: szimano Date: 2005-09-27 11:55:35 -0400 (Tue, 27 Sep 2005) New Revision: 1223 Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java Log: don't show pages from trash Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-27 14:55:35 UTC (rev 1222) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-09-27 15:55:35 UTC (rev 1223) @@ -647,8 +647,10 @@ && (!pageFiles[i].getName().endsWith("-att"))) { // do not take dirs from OLD - if (!pageFiles[i].getAbsolutePath() - .equals(pathToMedia + "/OLD")) { + if ((!pageFiles[i].getAbsolutePath() + .equals(pathToMedia + "/OLD"))&&(!pageFiles[i].getAbsolutePath() + .equals(pathToMedia + "/" + MediaDataSource.mediaTrashName))&&(!pageFiles[i].getAbsolutePath() + .equals(pathToMedia + "/" + AttachmentDataSource.attTrashName))) { // get names for subpages getPageNamesFor(directory + "/" + pageFiles[i].getName(), attSet); |
Author: dam...@jb... Date: 2005-09-27 10:55:35 -0400 (Tue, 27 Sep 2005) New Revision: 1222 Added: qa/forge/portal-extensions/forge-theme/jbossForgeLayout.war/portlet.css qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/NodeReadOnly.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceAlreadyExists.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceLocal.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceManagement.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/ qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/AddDelayedOperation.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/CommitDelayedOperation.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/DelayedOperation.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHistoricNode.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewDirectory.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewNode.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnOperationFailed.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/Tools.java qa/forge/portal-extensions/shotoku/shotoku-test/ qa/forge/portal-extensions/shotoku/shotoku-test/maven.xml qa/forge/portal-extensions/shotoku/shotoku-test/project.properties qa/forge/portal-extensions/shotoku/shotoku-test/project.xml qa/forge/portal-extensions/shotoku/shotoku-test/src/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java qa/forge/portal-extensions/shotoku/shotoku-test/src/web/ qa/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/ qa/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/web.xml Removed: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/NodeReadOnly.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceAlreadyExists.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/AddDelayedOperation.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/CommitDelayedOperation.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/operations/DelayedOperation.java qa/forge/portal-extensions/shotoku/shotoku-test/maven.xml qa/forge/portal-extensions/shotoku/shotoku-test/project.properties qa/forge/portal-extensions/shotoku/shotoku-test/project.xml qa/forge/portal-extensions/shotoku/shotoku-test/src/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ qa/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/ShotokuTest.java qa/forge/portal-extensions/shotoku/shotoku-test/src/web/ qa/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/ qa/forge/portal-extensions/shotoku/shotoku-test/src/web/WEB-INF/web.xml Modified: qa/forge/portal-extensions/forge-forums/scripts/all.sql qa/forge/portal-extensions/forge-forums/scripts/conv.sql qa/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/Entry.java qa/forge/portal-extensions/forge-theme/jbossForgeLayout.war/layouts/jbossForge.jsp qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/History.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceTimer.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java Log: MERGED: -r 1214:1221 trunk forge into qa forge for bug fix 1.0.4 release. Modified: qa/forge/portal-extensions/forge-forums/scripts/all.sql =================================================================== --- qa/forge/portal-extensions/forge-forums/scripts/all.sql 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/forge-forums/scripts/all.sql 2005-09-27 14:55:35 UTC (rev 1222) @@ -5,7 +5,3 @@ \. conv.sql \. portal-keys.sql \. fix.sql - --- TODO: --- - migrate topics watch --- - lost fields - what's with them? Modified: qa/forge/portal-extensions/forge-forums/scripts/conv.sql =================================================================== --- qa/forge/portal-extensions/forge-forums/scripts/conv.sql 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/forge-forums/scripts/conv.sql 2005-09-27 14:55:35 UTC (rev 1222) @@ -102,3 +102,65 @@ SELECT 1, p.jbp_uid FROM jbp_users p WHERE p.jbp_uname = "adamw"; INSERT INTO jbp_role_membership (jbp_rid, jbp_uid) SELECT 1, p.jbp_uid FROM jbp_users p WHERE p.jbp_uname = "admin"; + +-- Importing user properties. +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.aim", n.pn_user_aim + FROM nuke_users n + WHERE n.pn_user_aim IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.icq", n.pn_user_icq + FROM nuke_users n + WHERE n.pn_user_icq IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.msnm", n.pn_user_msnm + FROM nuke_users n + WHERE n.pn_user_msnm IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.interests", n.pn_user_intrest + FROM nuke_users n + WHERE n.pn_user_intrest IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.homepage", n.pn_url + FROM nuke_users n + WHERE n.pn_url IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.occupation", n.pn_user_occ + FROM nuke_users n + WHERE n.pn_user_occ IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.signature", n.pn_user_sig + FROM nuke_users n + WHERE n.pn_user_sig IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.yim", n.pn_user_yim + FROM nuke_users n + WHERE n.pn_user_yim IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.time-zone-offset", n.pn_timezone_offset + FROM nuke_users n + WHERE n.pn_timezone_offset IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.location", n.pn_user_from + FROM nuke_users n + WHERE n.pn_user_from IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.security.answer", n.pn_answer + FROM nuke_users n + WHERE n.pn_answer IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.security.question", n.pn_question + FROM nuke_users n + WHERE n.pn_question IS NOT NULL; + Modified: qa/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/Entry.java =================================================================== --- qa/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/Entry.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/Entry.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -73,8 +73,6 @@ private Set<String> allLinks; - - public Entry(String portalName, Node root) { permission = XmlTools.getAttributeValue(root, PERMISSION_ATTRIBUTE); Modified: qa/forge/portal-extensions/forge-theme/jbossForgeLayout.war/layouts/jbossForge.jsp =================================================================== --- qa/forge/portal-extensions/forge-theme/jbossForgeLayout.war/layouts/jbossForge.jsp 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/forge-theme/jbossForgeLayout.war/layouts/jbossForge.jsp 2005-09-27 14:55:35 UTC (rev 1222) @@ -19,6 +19,7 @@ <link rel="stylesheet" href="/jbossForge/common.css" type="text/css" media="all"> <link rel="stylesheet" href="/jbossForge/jboss-forge.css" type="text/css" media="all"> <link rel="stylesheet" href="/jbossForge/jboss-forge-forums.css" type="text/css" media="all"> +<link rel="stylesheet" href="/jbossForge/portlet.css" type="text/css" media="all"> <!-- insert the dynamically determined theme elements here, or use the 'simple-sample' theme by default --> <!-- <p:theme themeName='jboss-forge' /> --> Copied: qa/forge/portal-extensions/forge-theme/jbossForgeLayout.war/portlet.css (from rev 1221, trunk/forge/portal-extensions/forge-theme/jbossForgeLayout.war/portlet.css) Modified: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/AbstractResource.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,5 +1,7 @@ package org.jboss.shotoku; +import org.jboss.shotoku.exceptions.RepositoryException; + /** * @author adamw * Common parts of nodes and directories interface. @@ -9,8 +11,9 @@ * Gets the value of a given property. * @param propertyName Name of the property to get. * @return Value of the given property. + * @throws RepositoryException */ - public String getProperty(String propertyName); + public String getProperty(String propertyName) throws RepositoryException; /** * Sets the value of a given property. * @param propertyName Name of the property to set. @@ -22,19 +25,23 @@ * @return A directory to which this node/ directory belongs. Null * if this directory is already the root directory. */ - public Directory getParent(); + public Directory getParent() throws RepositoryException; /** * Saves modified properties and possibly content (in case of nodes). * @param logMessage Log message for saving this node/ directory. + * @throws RepositoryException */ - public void save(String logMessage); + public void save(String logMessage) throws RepositoryException; /** * Gets a log message with which this node/ directory was saved. * @return Log message with which this node/ directory was saved. + * @throws RepositoryException */ - public String getLogMessage(); + public String getLogMessage() throws RepositoryException; /** - * Deletes this node or directory. + * Deletes this node or directory. This node should not be used after + * performing this operation. + * @throws RepositoryException */ - public void delete(); + public void delete() throws RepositoryException; } Modified: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -6,144 +6,169 @@ import org.apache.log4j.Logger; import org.apache.xerces.parsers.DOMParser; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; +import org.jboss.shotoku.exceptions.RepositoryException; import org.jboss.shotoku.search.SearchParameters; import org.w3c.dom.Document; import org.xml.sax.InputSource; /** - * @author adamw - * A base class which provides access to nodes and directories. + * @author adamw A base class which provides access to nodes and directories. */ public abstract class ContentManager { /** * Gets a root directory that is represented by this content manager. - * @return A directory that is the root directory of this content - * manager. + * + * @return A directory that is the root directory of this content manager. + * @throws RepositoryException */ - public abstract Directory getRootDirectory(); + public abstract Directory getRootDirectory() throws RepositoryException; + /** - * Gets a node which can be found under the given path. - * @param Path for which to get the node. + * Gets a head version of a node which can be found under the given path. + * + * @param path + * for which to get the node. * @return A node corresponding to the gien path. + * @throws ResourceDoesNotExist + * @throws RepositoryException */ - public abstract Node getNode(String path); + public abstract Node getNode(String path) throws ResourceDoesNotExist, + RepositoryException; + /** * Gets a directory which can be found under the given path. - * @param Path for which to get the directory. + * + * @param path + * for which to get the directory. * @return A directory corresponding to the gien path. + * @throws ResourceDoesNotExist + * @throws RepositoryException */ - public abstract Directory getDirectory(String path); + public abstract Directory getDirectory(String path) + throws ResourceDoesNotExist, RepositoryException; + /** * Performs a search with the given parameters. - * @param parameters Parameters for the search. + * + * @param parameters + * Parameters for the search. * @return A list of found nodes. + * @throws RepositoryException */ - public abstract NodeList search(SearchParameters parameters); - + public abstract NodeList search(SearchParameters parameters) + throws RepositoryException; + protected ContentManager(String id, String prefix) { - + } - + /* * Content manager loading. */ - + private static final Logger log = Logger.getLogger(ContentManager.class); - + /** - * <code>defaultId</code> - id of the default content manager. May - * be overriden by a setting in the xml configuration file. + * <code>defaultId</code> - id of the default content manager. May be + * overriden by a setting in the xml configuration file. */ private static String defaultId = "default"; + /** - * <code>contentManagers</code> - map (content manager id -> - * content manager constructor). + * <code>contentManagers</code> - map (content manager id -> content + * manager constructor). */ private static Map<String, Constructor> contentManagers; - + static { contentManagers = new HashMap<String, Constructor>(); - + // Loading configuration file. try { DOMParser parser = new DOMParser(); - parser.parse(new InputSource( - ContentManager.class.getResourceAsStream("/shotoku.xml"))); + parser.parse(new InputSource(ContentManager.class + .getResourceAsStream("/shotoku.xml"))); Document doc = parser.getDocument(); - + org.w3c.dom.Node node = doc.getDocumentElement(); org.w3c.dom.NodeList nodes = node.getChildNodes(); org.w3c.dom.Node n; - + for (int i = 0; i < nodes.getLength(); i++) { n = nodes.item(i); - + if (n.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { if ("default-id".equals(n.getNodeName())) { // Overriding the default content manager id. defaultId = Tools.getAttributeValue(n, "id"); - + log.info("Set default id to: " + defaultId); } else if ("content-manager".equals(n.getNodeName())) { // Creating a new content manager (getting its // constructor). String id = Tools.getAttributeValue(n, "id"); - String implementation = - Tools.getAttributeValue(n, "implementation"); - - contentManagers.put(id, - Class.forName(implementation).getConstructor( - new Class[] { String.class, + String implementation = Tools.getAttributeValue(n, + "implementation"); + + contentManagers.put(id, Class.forName(implementation) + .getConstructor( + new Class[] { String.class, String.class })); - - log.info("Added content manager: " + id + ", " + - implementation); + + log.info("Added content manager: " + id + ", " + + implementation); } } - } + } } catch (Exception e) { - log.warn("Error while loading content manager configuration: " + - e); + log.warn("Error while loading content manager configuration: " + e); } } - + /** * Gets a content manager with a default id and an empty prefix. + * * @return A ""-prefixed, default content manager, or null, if a default - * content manager is not registered. + * content manager is not registered. */ public static ContentManager getContentManager() { return getContentManager(""); } - + /** * Gets a content manager with a default id and the given prefix. - * @param prefix Prefix for the new content manager (all paths will - * have this prepended). + * + * @param prefix + * Prefix for the new content manager (all paths will have this + * prepended). * @return A prefixed, default content manager, or null, if a default - * content manager is not registered. + * content manager is not registered. */ public static ContentManager getContentManager(String prefix) { return getContentManager(defaultId, prefix); } - + /** * Gets a content manager with the given id and prefix. - * @param id Id of the content manager. - * @param prefix Prefix for the new content manager (all paths will - * have this prepended). + * + * @param id + * Id of the content manager. + * @param prefix + * Prefix for the new content manager (all paths will have this + * prepended). * @return A prefixed content manager with the given id or null, if a - * content manager with the given id registers. + * content manager with the given id registers. */ public static ContentManager getContentManager(String id, String prefix) { Constructor constructor = contentManagers.get(id); - + if (constructor == null) return null; - + try { - return (ContentManager) - constructor.newInstance(new Object[] { id, prefix }); + return (ContentManager) constructor.newInstance(new Object[] { id, + prefix }); } catch (Exception e) { return null; } Modified: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -2,51 +2,78 @@ import java.util.List; +import org.jboss.shotoku.exceptions.RepositoryException; +import org.jboss.shotoku.exceptions.ResourceAlreadyExists; + /** - * @author adamw - * Interface that must be implemented by classes which represent - * directories, that is resources, which can contain other - * directories and nodes. + * @author adamw Interface that must be implemented by classes which represent + * directories, that is resources, which can contain other directories + * and nodes. */ public interface Directory extends AbstractResource { /** * Gets a list of nodes that are contained in this directory. + * * @return A list of nodes that are contained in this directory. + * @throws RepositoryException */ - public NodeList getNodes(); + public NodeList getNodes() throws RepositoryException; + /** * Gets a list of directories that are contained in this directory. + * * @return A list of directories that are contained in this directory. + * @throws RepositoryException */ - public List<Directory> getDirectories(); + public List<Directory> getDirectories() throws RepositoryException; + /** - * Creates and returns a new node in this directory. Only after saving, - * this node will be visible by other functions. - * @param name Name of the new node. + * Creates and returns a new node in this directory. Only after saving, this + * node will be visible by other functions. + * + * @param name + * Name of the new node. * @return A new node with the given name. + * @throws ResourceAlreadyExists + * @throws RepositoryException */ - public Node newNode(String name); + public Node newNode(String name) throws ResourceAlreadyExists, + RepositoryException; + /** * Creates a new directory in this directory. Only after saving this * directory, it will be visible by other functions. Also, new nodes/ * directories in it will be possible to create only after saving. - * @param name Name of the directory to create. + * + * @param name + * Name of the directory to create. * @return A new directory with the given name. + * @throws ResourceAlreadyExists + * @throws RepositoryException */ - public Directory newDirectory(String name); + public Directory newDirectory(String name) throws ResourceAlreadyExists, + RepositoryException; + /** * Checks if an index is created on the given property. - * @param propertyName Name of the property for which to check the - * index. + * + * @param propertyName + * Name of the property for which to check the index. * @return True iff an index is created for the given property. + * @throws RepositoryException */ - public boolean hasIndex(String propertyName); + public boolean hasIndex(String propertyName) throws RepositoryException; + /** * Creates or deletes an index on a property. - * @param propertyName Name of the property for which to create/ delete - * an index. - * @param index True if and index should be created, false in an index - * should be deleted. + * + * @param propertyName + * Name of the property for which to create/ delete an index. + * @param index + * True if and index should be created, false in an index should + * be deleted. + * @throws RepositoryException */ - public void setIndex(String propertyName, boolean index); + public void setIndex(String propertyName, boolean index) + throws RepositoryException; } Modified: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/History.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/History.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/History.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,25 +1,38 @@ package org.jboss.shotoku; +import org.jboss.shotoku.exceptions.RepositoryException; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; + /** - * @author adamw - * An interface that should be implemented by classes which represent - * a node's history. + * @author adamw An interface that should be implemented by classes which + * represent a node's history. */ public interface History { /** - * Gets the number of revisions for this node's history. - * @return + * Gets the number of revisions of this node's history. + * + * @return Number of revisions of this node's history. + * @throws RepositoryException */ - public int getRevisionsCount(); + public int getRevisionsCount() throws RepositoryException; + /** * Gets a node with a given revision. - * @param revision Revision number to get. + * + * @param revision + * Revision number to get. * @return A node at the given revision. + * @throws ResourceDoesNotExist + * @throws RepositoryException */ - public Node getNodeAtRevision(int revision); + public Node getNodeAtRevision(int revision) throws ResourceDoesNotExist, + RepositoryException; + /** * Gets a list of all nodes in this history. + * * @return A list of all nodes in this history. + * @throws RepositoryException */ - public NodeList getAllRevisions(); + public NodeList getAllRevisions() throws RepositoryException; } Modified: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -2,50 +2,76 @@ import java.io.InputStream; +import org.jboss.shotoku.exceptions.RepositoryException; + /** - * @author adamw - * An interface which should be implemented by classes representing a node, - * that is a resource, which is versionable and has some text content. + * @author adamw An interface which should be implemented by classes + * representing a node, that is a resource, which is versionable and has + * some text content. */ public interface Node extends AbstractResource { /** * Gets the content of this node. + * * @return Content of this node. + * @throws RepositoryException */ - public String getContent(); + public String getContent() throws RepositoryException; + /** * Sets the content of this node. - * @param content New content of this node. + * + * @param content + * New content of this node. */ public void setContent(String content); + /** * Gets a history of this node. + * * @return A history of this node. + * @throws RepositoryException */ - public History getHistory(); + public History getHistory() throws RepositoryException; + /** * Gets the revision number of this node. + * * @return Revision number of this node. + * @throws RepositoryException */ - public int getRevisionNumber(); + public int getRevisionNumber() throws RepositoryException; + /** * Copies this node's content to the given file. - * @param filename Name of the file to which to copy this node's content. + * + * @param filename + * Name of the file to which to copy this node's content. + * @throws RepositoryException */ - public void copyToFile(String filename); + public void copyToFile(String filename) throws RepositoryException; + /** * Gets the content of this node as an input stream. + * * @return Content of this node as an input stream. + * @throws RepositoryException */ - public InputStream getContentInputStream(); + public InputStream getContentInputStream() throws RepositoryException; + /** * Gets the length of this node's content. + * * @return Length of this node's content. + * @throws RepositoryException */ - public long getLength(); + public long getLength() throws RepositoryException; + /** * Gets the last modification time of this node. + * * @return Last modification time of this node. + * @throws RepositoryException */ - public long getLastModfication(); + public long getLastModfication() throws RepositoryException; } Modified: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -5,7 +5,8 @@ /** * @author adamw - * TODO + * A class representing a list of nodes and providing the possibility to + * manipulate these nodes. */ public class NodeList { private List<Node> nodeList; @@ -18,10 +19,18 @@ this.nodeList = nodeList; } + /** + * Adds the given node to the node list. + * @param node Node to add. + */ public void add(Node node) { nodeList.add(node); } + /** + * 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() { return nodeList; } Copied: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions) Deleted: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/NodeReadOnly.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/NodeReadOnly.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/NodeReadOnly.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,5 +0,0 @@ -package org.jboss.shotoku.exceptions; - -public class NodeReadOnly extends RuntimeException { - -} Copied: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/NodeReadOnly.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/NodeReadOnly.java) Deleted: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,7 +0,0 @@ -package org.jboss.shotoku.exceptions; - -public class RepositoryException extends RuntimeException { - public RepositoryException(Exception e) { - super(e); - } -} Copied: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/RepositoryException.java) Deleted: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceAlreadyExists.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceAlreadyExists.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceAlreadyExists.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,5 +0,0 @@ -package org.jboss.shotoku.exceptions; - -public class ResourceAlreadyExists extends RuntimeException { - -} Copied: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceAlreadyExists.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceAlreadyExists.java) Deleted: qa/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 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,5 +0,0 @@ -package org.jboss.shotoku.exceptions; - -public class ResourceDoesNotExist extends RuntimeException { - -} Copied: qa/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/exceptions/ResourceDoesNotExist.java) Modified: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/AbstractSvnResource.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -5,8 +5,13 @@ import java.util.Map; import org.jboss.shotoku.AbstractResource; +import org.jboss.shotoku.exceptions.RepositoryException; public abstract class AbstractSvnResource implements AbstractResource { + /** + * <code>modifiedProperties</code> - a map of properties that have been + * modified for this resource and have to be written upon save. + */ private Map<String, String> modifiedProperties; protected SvnService service; @@ -25,19 +30,45 @@ } public String getProperty(String name) { - return service.getProperty(id, fullPath, name); + // First trying to get the properties from the ones that have been + // already modified, only if it hasn't been written, getting it + // from svn. + if (modifiedProperties.containsKey(name)) + return modifiedProperties.get(name); + + try { + return service.getProperty(id, fullPath, name); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } } public void setProperty(String name, String value) { modifiedProperties.put(name, value); } - protected boolean save() { + /** + * Checks if there are any changes to properties in this resource. + * @return True if there are any changes in properties. + */ + protected boolean checkForChanges() { + return modifiedProperties.size() > 0; + } + + /** + * Saves modified properties, if any, and clears the modified + * properties map. + */ + protected void save() { for (String name : modifiedProperties.keySet()) { - service.setProperty(id, fullPath, name, - modifiedProperties.get(name)); + try { + service.setProperty(id, fullPath, name, + modifiedProperties.get(name)); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } } - return modifiedProperties.size() > 1; + modifiedProperties.clear(); } } Modified: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -6,12 +6,26 @@ import org.jboss.shotoku.Directory; import org.jboss.shotoku.Node; import org.jboss.shotoku.NodeList; -import org.jboss.shotoku.exceptions.NodeDoesNotExist; +import org.jboss.shotoku.exceptions.RepositoryException; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; import org.jboss.shotoku.search.SearchParameters; +/** + * @author adamw + * An implementation of the content manager based on subversion. + */ public class SvnContentManager extends ContentManager { + /** + * <code>prefix</code> - prefix of this content manager. + */ private String prefix; + /** + * <code>id</code> - id of a corresponding repository. + */ private String id; + /** + * <code>service</code> - service interface binding. + */ private SvnService service; public SvnContentManager(String id, String prefix) { @@ -23,13 +37,29 @@ service = Tools.getService(); } + /** + * Gets a full repository path for the given path - that is, adds a prefix + * this content manager's prefix. + * @param path Path to this resource. + * @return A prefixed path to the given resource. + */ private String getPrefixedPath(String path) { return prefix + '/' + path; } + /** + * Gets a <code>java.io.File</code> object that corresponds to a resource + * that, in the repository, can be found under the given path. + * @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) { - return new File( - service.getFileSystemPath(id, getPrefixedPath(path))); + try { + return new File( + service.getFileSystemPath(id, getPrefixedPath(path))); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } } @Override @@ -42,7 +72,7 @@ File file = getFileForPath(path); if (!file.isFile()) - throw new NodeDoesNotExist(); + throw new ResourceDoesNotExist(); return new SvnHeadNode(id, getPrefixedPath(path), file); } @@ -51,8 +81,8 @@ public Directory getDirectory(String path) { File file = getFileForPath(path); - if (!file.isFile()) - throw new NodeDoesNotExist(); + if (!file.isDirectory()) + throw new ResourceDoesNotExist(); return new SvnDirectory(id, getPrefixedPath(path), file); } Modified: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnDirectory.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,31 +1,102 @@ package org.jboss.shotoku.svn; import java.io.File; +import java.io.FilenameFilter; +import java.util.ArrayList; import java.util.List; import org.jboss.shotoku.Directory; import org.jboss.shotoku.Node; import org.jboss.shotoku.NodeList; +import org.jboss.shotoku.exceptions.RepositoryException; +import org.jboss.shotoku.exceptions.ResourceAlreadyExists; public class SvnDirectory extends AbstractSvnResource implements Directory { public SvnDirectory(String id, String fullPath, File file) { super(id, fullPath, file); } - + public NodeList getNodes() { - throw new RuntimeException("Operation not yet implemented"); + List<Node> ret = new ArrayList<Node>(); + + try { + // Filtering files from this directory and adding them. + for (String directory : new File(service.getFileSystemPath(id, + fullPath)).list(new FilenameFilter() { + public boolean accept(File dir, String name) { + if (new File(dir.getAbsolutePath() + File.separator + name) + .isDirectory()) + return false; + return true; + } + })) { + String childFullPath = fullPath + '/' + directory; + ret.add(new SvnHeadNode(id, childFullPath, new File(service + .getFileSystemPath(id, childFullPath)))); + } + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } + + return new NodeList(ret); } public List<Directory> getDirectories() { - throw new RuntimeException("Operation not yet implemented"); + List<Directory> ret = new ArrayList<Directory>(); + + try { + // Filtering directories from this directory and adding them. + for (String directory : new File(service.getFileSystemPath(id, + fullPath)).list(new FilenameFilter() { + public boolean accept(File dir, String name) { + if (name.equals(".svn")) + return false; + if (new File(dir.getAbsolutePath() + File.separator + name) + .isDirectory()) + return true; + return false; + } + })) { + String childFullPath = fullPath + '/' + directory; + ret.add(new SvnDirectory(id, childFullPath, new File(service + .getFileSystemPath(id, childFullPath)))); + } + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } + + return ret; } public Node newNode(String name) { - throw new RuntimeException("Operation not yet implemented"); + String childFullPath = fullPath + '/' + name; + + try { + File newFile = new File(service.getFileSystemPath(id, + childFullPath)); + + if (newFile.exists()) + throw new ResourceAlreadyExists(); + + return new SvnNewNode(id, childFullPath, newFile); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } } public Directory newDirectory(String name) { - throw new RuntimeException("Operation not yet implemented"); + String childFullPath = fullPath + '/' + name; + try { + File newDir = new File(service.getFileSystemPath(id, + childFullPath)); + + if (newDir.exists()) + throw new ResourceAlreadyExists(); + + return new SvnNewDirectory(id, childFullPath, newDir); + } catch (SvnOperationFailed e) { + throw new RepositoryException(e); + } } public boolean hasIndex(String propertyName) { Copied: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java) Copied: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHistoricNode.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHistoricNode.java) Copied: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewDirectory.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewDirectory.java) Copied: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewNode.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNewNode.java) Copied: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnOperationFailed.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnOperationFailed.java) Modified: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnService.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,17 +1,118 @@ package org.jboss.shotoku.svn; public abstract interface SvnService { - public abstract void commit(String id, String path, String logMessage); + /** + * Gets an exclusive write lock for a given path. The lock should be + * requiered before making any changes to the file. Later, the file + * must be added for a commit, unless an exception is thrown. After + * commiting the file, the lock is released. + * @param id Id of the repository. + * @param path Path to lock. + */ + public abstract void getWriteLock(String id, String path); + /** + * Puts an earlier acquiered exclusive write lock for a given path. + * This should be called only in case of an internal node-implementation + * execption that occures while saving. + * @param id Id of the repository. + * @param path Path to release the lock for. + */ + public abstract void putWriteLock(String id, String path); + /** + * Adds the given path to a commite quese of a repository with the + * given id. + * @param id Id of the repository. + * @param path Path to commit. + * @param logMessage Log message to commit with. + * @throws SvnOperationFailed + */ + public abstract void commit(String id, String path, String logMessage) + throws SvnOperationFailed; + /** + * Sets a property on the given path. + * @param id Id of the repository. + * @param path Path to set the property on. + * @param name Name of the property to set. + * @param value Value of the property to set. + * @throws SvnOperationFailed + */ public abstract void setProperty(String id, String path, String name, - String value); - public abstract String getProperty(String id, String path, String name); + String value) throws SvnOperationFailed; + /** + * Gets a property from the given path. + * @param id Id of the repository. + * @param path Path to get the property from. + * @param name Name of the property to get. + * @return Value of the property or null, if it is not set. + * @throws SvnOperationFailed + */ + public abstract String getProperty(String id, String path, String name) + throws SvnOperationFailed; + /** + * Gets content of a node at the specified revision. + * @param id Id of the repository. + * @param path Path to a file to get the revision of. + * @param revision Number of the revision to get (revisions are counted + * from 1 with step 1). + * @return String representation of this node's content at the given + * revision or null, if this node does not have the given revision. + * @throws SvnOperationFailed + */ public abstract String getNodeAtRevision(String id, String path, - int revision); - public abstract String getLogMessage(String id, String revision); - public abstract int getRevisionCount(String id, String path); - public abstract void delete(String id, String path); - public abstract void add(String id, String path); - public abstract String getFileSystemPath(String id, String path); + int revision) throws SvnOperationFailed; + /** + * Gets a log message with which the given revision was commited. + * @param id Id of the repository. + * @param revision Number of the revision (svn revision number). + * @return Log message with which the given reivison was commited + * or null, if no such revision exists. + * @throws SvnOperationFailed + */ + public abstract String getLogMessage(String id, String revision) + throws SvnOperationFailed; + /** + * Gets the number of revisions of a given path. + * @param id Id of the repository. + * @param path Path for which to determine the number of revisions + * (number of different versions). + * @return Number of revisions of a given path. + * @throws SvnOperationFailed + */ + public abstract int getRevisionCount(String id, String path) + throws SvnOperationFailed; + /** + * Deletes a given path (node/ directory) from the repository. The + * resource is automatically added to a commite queue. + * @param id Id of the repository. + * @param path Path to delete. + * @throws SvnOperationFailed + */ + public abstract void delete(String id, String path) + throws SvnOperationFailed; + /** + * Adds a given path (node/ directory) to a repository. The resource + * is automatically added to a commite queue. + * @param id Id of the repository. + * @param path Path to add. + * @throws SvnOperationFailed + */ + public abstract void add(String id, String path) + throws SvnOperationFailed; + /** + * Gets a full path on the file system to a resource with the given + * repository-path. + * @param id Id of the repository. + * @param path Path to the resource. + * @return A full path on the file system to the given resource (represented + * by a path). + * @throws SvnOperationFailed + */ + public abstract String getFileSystemPath(String id, String path) + throws SvnOperationFailed; + /** + * <code>SVN_SERVICE_NAME</code> - name under which the svn service + * is registered. + */ public final static String SVN_SERVICE_NAME = "shotoku:service=svn"; } Copied: qa/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/Tools.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/Tools.java) Modified: qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnRepository.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -1,20 +1,31 @@ package org.jboss.shotoku.svn.service; import java.io.File; +import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Semaphore; import org.apache.log4j.Logger; +import org.jboss.shotoku.svn.SvnOperationFailed; +import org.jboss.shotoku.svn.service.operations.DelayedOperation; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.wc.ISVNOptions; +import org.tmatesoft.svn.core.wc.ISVNPropertyHandler; import org.tmatesoft.svn.core.wc.SVNClientManager; -import org.tmatesoft.svn.core.wc.SVNCommitClient; +import org.tmatesoft.svn.core.wc.SVNPropertyData; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.SVNUpdateClient; import org.tmatesoft.svn.core.wc.SVNWCUtil; +/** + * @author adamw + * A class for performing operations on a single subversion repository and + * its local working copy. + */ public class SvnRepository { private static final Logger log = Logger.getLogger(SvnRepository.class); @@ -22,7 +33,8 @@ private String url; private String localpath; private File wc; - private Set<String[]> toCommit; + private List<DelayedOperation> delayedOperations; + private Map<String, Semaphore> semaphores; public SvnRepository(String username, String password, String url, String localpath) { @@ -34,9 +46,14 @@ this.localpath = localpath; wc = new File(localpath); - toCommit = Collections.synchronizedSet(new HashSet<String[]>()); + delayedOperations = Collections.synchronizedList(new ArrayList<DelayedOperation>()); + semaphores = new HashMap<String, Semaphore>(); } + /** + * Tries to perform a cleanup on the local working copy. Called in case + * of execptions that occure while performing other operations. + */ private void tryCleanup() { try { ourClientManager.getWCClient().doCleanup(wc); @@ -45,6 +62,9 @@ } } + /** + * Updates the local working copy. + */ public synchronized void update() { try { SVNURL repositoryURL = SVNURL.parseURIEncoded(url); @@ -64,32 +84,43 @@ SVNRevision.HEAD, SVNRevision.HEAD, true); } } catch (SVNException e) { + // TODO e.printStackTrace(); + tryCleanup(); } } - public void addToCommit(String path, String logMessage) { - toCommit.add(new String[] { path, logMessage }); + /** + * Adds a delayed operation to an execution queue. + * @param op Operation to add. + */ + public void addDelayedOperation(DelayedOperation op) { + delayedOperations.add(op); } - public void commit() { - String[][] allToCommit; + /** + * Performs all scheduled delayed operations. + */ + public void performDelayedOperations() { + DelayedOperation[] allOps; - synchronized (toCommit) { - allToCommit = toCommit.toArray(new String[0][0]); - toCommit.clear(); + synchronized (delayedOperations) { + allOps = delayedOperations.toArray(new DelayedOperation[0]); + delayedOperations.clear(); } - for (String[] oneToCommit : allToCommit) { - SVNCommitClient commitClient = ourClientManager.getCommitClient(); + for (DelayedOperation op : allOps) { try { - commitClient.doCommit( - new File[] { new File(getFileSystemPath(oneToCommit[0])) }, - false, oneToCommit[1], true, false); + log.info("Performing delayed op: " + op.getClass().getName()); + + op.performOperation(ourClientManager); } catch (SVNException e) { + // TODO Delete + e.printStackTrace(); + tryCleanup(); - log.warn("Commiting of " + oneToCommit[0] + " failed", e); + log.warn("Performing delayed op: " + op.getClass().getName() + " failed.", e); } } } @@ -98,8 +129,62 @@ return replaceSeparators(localpath + '/' + path); } + public void getWriteLock(String path) { + Semaphore s; + + synchronized (semaphores) { + s = semaphores.get(path); + if (s == null) { + s = new Semaphore(1); + semaphores.put(path, s); + } + } + + try { + s.acquire(); + } catch (InterruptedException e) { + // We never interrupt the threads. + } + } + + public void putWriteLock(String path) { + Semaphore s; + + synchronized (semaphores) { + s = semaphores.get(path); + } + + s.release(); + } + private String replaceSeparators(String path) { return '/' == File.separatorChar ? path : path.replace('/', File.separatorChar); } + + public String getProperty(String path, String name) + throws SvnOperationFailed { + try { + SVNPropertyData data = + ourClientManager.getWCClient().doGetProperty( + new File(getFileSystemPath(path)), name, + SVNRevision.WORKING, SVNRevision.WORKING, + false); + + return data == null ? null : data.getValue(); + } catch (SVNException e) { + throw new SvnOperationFailed(e); + } + } + + public void setProperty(String path, String name, String value) + throws SvnOperationFailed { + try { + ourClientManager.getWCClient().doSetProperty( + new File(getFileSystemPath(path)), name, + value, true, false, ISVNPropertyHandler.NULL); + } catch (SVNException e) { + throw new SvnOperationFailed(e); + } + } } Modified: qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -12,7 +12,10 @@ import org.jboss.annotation.ejb.Service; import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.Tools; +import org.jboss.shotoku.svn.SvnOperationFailed; import org.jboss.shotoku.svn.SvnService; +import org.jboss.shotoku.svn.service.operations.AddDelayedOperation; +import org.jboss.shotoku.svn.service.operations.CommitDelayedOperation; import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl; import org.w3c.dom.Document; @@ -27,7 +30,7 @@ * <code>DEFAULT_TIMER_INTERVAL</code> - default interval lenght of the * timer. */ - private final static long DEFAULT_TIMER_INTERVAL = 1000*60; // 1 minute + private final static long DEFAULT_TIMER_INTERVAL = 1000*5; // 5 seconds private long timerInterval; @EJB @@ -112,7 +115,7 @@ public void update() { for (SvnRepository repo : repositories.values()) { repo.update(); - repo.commit(); + repo.performDelayedOperations(); } } @@ -120,16 +123,29 @@ * SvnService implementation. */ - public void commit(String id, String path, String logMessage) { - repositories.get(id).addToCommit(path, logMessage); + public void getWriteLock(String id, String path) { + repositories.get(id).getWriteLock(path); } + + public void putWriteLock(String id, String path) { + repositories.get(id).putWriteLock(path); + } + + public void commit(String id, String path, String logMessage) + throws SvnOperationFailed { + SvnRepository repo = repositories.get(id); + repo.addDelayedOperation( new CommitDelayedOperation(repo, path, + logMessage)); + } - public void setProperty(String id, String path, String name, String value) { - + public void setProperty(String id, String path, String name, String value) + throws SvnOperationFailed{ + repositories.get(id).setProperty(path, name, value); } - public String getProperty(String id, String path, String name) { - return null; + public String getProperty(String id, String path, String name) + throws SvnOperationFailed{ + return repositories.get(id).getProperty(path, name); } public String getNodeAtRevision(String id, String path, int revision) { @@ -148,8 +164,9 @@ } - public void add(String id, String path) { - + public void add(String id, String path) throws SvnOperationFailed { + SvnRepository repo = repositories.get(id); + repo.addDelayedOperation(new AddDelayedOperation(repo, path)); } public String getFileSystemPath(String id, String path) { Copied: qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceLocal.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceLocal.java) Copied: qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceManagement.java (from rev 1221, trunk/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceManagement.java) Modified: qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceTimer.java =================================================================== --- qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceTimer.java 2005-09-27 14:24:12 UTC (rev 1221) +++ qa/forge/portal-extensions/shotoku/shotoku-svn-service/src/java/org/jboss/shotoku/svn/service/SvnServiceTimer.java 2005-09-27 14:55:35 UTC (rev 1222) @@ -10,7 +10,6 @@ import javax.ejb.Timer; import javax.management.MalformedObjectNameException; -import org.apache.log4j.Logger; import org.jboss.mx.util.MBeanProxyExt; import org.jboss.mx.util.MBeanServerLocator; import org.jboss.shotoku.svn.SvnService; @@ -18,7 +17,7 @@ @Stateless @Local(SvnServiceTimerLocal.class) public class SvnServiceTimer { - private static final Logger log = Logger.getLogger(SvnServiceTimer.class); + //private static final Logger log = Logger.getLogger(SvnServiceTimer.class); private @Resource SessionContext ctx; public void scheduleTimer(long interval) { @@ -35,9 +34,7 @@ SvnService.SVN_SERVICE_NAME, MBeanServerLocator.locate())); - log.info("Updating svn service ..."); ssi.up... [truncated message content] |
From: <jbo...@li...> - 2005-09-27 14:24:21
|
Author: adamw Date: 2005-09-27 10:24:12 -0400 (Tue, 27 Sep 2005) New Revision: 1221 Modified: trunk/forge/portal-extensions/forge-forums/scripts/all.sql trunk/forge/portal-extensions/forge-forums/scripts/conv.sql Log: User properties import Modified: trunk/forge/portal-extensions/forge-forums/scripts/all.sql =================================================================== --- trunk/forge/portal-extensions/forge-forums/scripts/all.sql 2005-09-27 13:23:35 UTC (rev 1220) +++ trunk/forge/portal-extensions/forge-forums/scripts/all.sql 2005-09-27 14:24:12 UTC (rev 1221) @@ -5,7 +5,3 @@ \. conv.sql \. portal-keys.sql \. fix.sql - --- TODO: --- - migrate topics watch --- - lost fields - what's with them? Modified: trunk/forge/portal-extensions/forge-forums/scripts/conv.sql =================================================================== --- trunk/forge/portal-extensions/forge-forums/scripts/conv.sql 2005-09-27 13:23:35 UTC (rev 1220) +++ trunk/forge/portal-extensions/forge-forums/scripts/conv.sql 2005-09-27 14:24:12 UTC (rev 1221) @@ -102,3 +102,65 @@ SELECT 1, p.jbp_uid FROM jbp_users p WHERE p.jbp_uname = "adamw"; INSERT INTO jbp_role_membership (jbp_rid, jbp_uid) SELECT 1, p.jbp_uid FROM jbp_users p WHERE p.jbp_uname = "admin"; + +-- Importing user properties. +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.aim", n.pn_user_aim + FROM nuke_users n + WHERE n.pn_user_aim IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.icq", n.pn_user_icq + FROM nuke_users n + WHERE n.pn_user_icq IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.msnm", n.pn_user_msnm + FROM nuke_users n + WHERE n.pn_user_msnm IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.interests", n.pn_user_intrest + FROM nuke_users n + WHERE n.pn_user_intrest IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.homepage", n.pn_url + FROM nuke_users n + WHERE n.pn_url IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.occupation", n.pn_user_occ + FROM nuke_users n + WHERE n.pn_user_occ IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.signature", n.pn_user_sig + FROM nuke_users n + WHERE n.pn_user_sig IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.im.yim", n.pn_user_yim + FROM nuke_users n + WHERE n.pn_user_yim IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.time-zone-offset", n.pn_timezone_offset + FROM nuke_users n + WHERE n.pn_timezone_offset IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.location", n.pn_user_from + FROM nuke_users n + WHERE n.pn_user_from IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.security.answer", n.pn_answer + FROM nuke_users n + WHERE n.pn_answer IS NOT NULL; + +INSERT INTO jbp_user_prop (jbp_uid, jbp_name, jbp_value) + SELECT n.pn_uid, "portal.user.security.question", n.pn_question + FROM nuke_users n + WHERE n.pn_question IS NOT NULL; + |