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
|
From: <jbo...@li...> - 2005-10-11 09:48:54
|
Author: aron.gombas Date: 2005-10-11 05:49:00 -0400 (Tue, 11 Oct 2005) New Revision: 1359 Modified: trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp Log: "Date" column removed from commit history Modified: trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp 2005-10-10 22:25:04 UTC (rev 1358) +++ trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp 2005-10-11 09:49:00 UTC (rev 1359) @@ -49,7 +49,6 @@ </c:choose> <td><c:out value="${commit.message}"/></td> <td><c:out value="${commit.author}"/></td> - <td><fmt:formatDate value="${commit.date}" pattern="dd/MMM/yy hh:mm"/></td> <td> <c:if test="${commit.ageInDays == 0}"><span class="portlet-msg-alert"></c:if> <kosmos:age time="${commit.age}"/> |
Author: adamw Date: 2005-10-10 15:39:49 -0400 (Mon, 10 Oct 2005) New Revision: 1356 Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java trunk/forge/portal-extensions/forge-root-redirect/src/java/org/jboss/forge/redirect/RootRedirectFilter.java Log: /news, /blog and /downloads redirects for projects 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-10-10 13:41:17 UTC (rev 1355) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2005-10-10 19:39:49 UTC (rev 1356) @@ -8,6 +8,10 @@ *****************************************/ package org.jboss.forge.common; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.Properties; import javax.mail.Message; @@ -419,4 +423,27 @@ || link.startsWith("https:") || link.startsWith("mailto:") || link.startsWith("news:") || link.startsWith("file:"); } + + /** + * Reads data from the given stream and returnes it as a string. + * @param stream Stream to read from. + * @return Content of the given stream in a from of a string. An empty + * string, in case of any errors. + */ + public static String getString(InputStream stream) { + BufferedReader in = new BufferedReader(new InputStreamReader(stream)); + StringBuffer sb = new StringBuffer(); + String line; + + try { + while ((line = in.readLine()) != null) { + sb.append(line); + sb.append("\n"); + } + } catch (IOException e) { + return ""; + } + + return sb.toString(); + } } 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-10-10 13:41:17 UTC (rev 1355) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-10-10 19:39:49 UTC (rev 1356) @@ -54,6 +54,7 @@ public void doView(JBossRenderRequest request, JBossRenderResponse response) throws IOException { String requestedPath = request.getParameter(PATH_PARAM); + if (requestedPath == null) { sendResponseNotFound(response); return; @@ -70,6 +71,13 @@ response.setContentType("text/html"); response.getWriter().write(requestedNode.getContent()); } + + private final static String[][] PROJECT_REDIRECTS = { + { "downloads", "downloads" }, + { "news", "blog" }, + { "blog", "blog" }, + { "", "" } + }; @Override protected void processAction(JBossActionRequest request, JBossActionResponse response) @@ -102,13 +110,39 @@ ProjectsHelper.getProjects(portalName).projectExists( new ActionRequestPermissionsChecker(request), tokens[1]); + // Checking for special links, making possible redirects. + if (isProjectLink) { + String projectId = tokens[1]; + String requestedPage = tokens.length > 2 ? tokens[2] : ""; + for (String[] projectRedirect : PROJECT_REDIRECTS) { + if (projectRedirect[0].equals(requestedPage)) { + String url; + + if ("".equals(projectRedirect[1])) { + url = ProjectsHelper.getProjects( + ForgeHelper.LABS_PORTAL).getProjectLink( + projectId); + } else { + url = ProjectsHelper.createPageLink( + ForgeHelper.LABS_PORTAL, projectId, + projectRedirect[1]); + } + + response.sendRedirect(url); + return; + } + } + } + // If the requested path references a project, getting the page from // the project's freezone dir. Otherwise, getting the page from the // default directory. String cmsPath = portalName + "/" + ProjectsHelper.MEMBERS_DIR + "/"; if (isProjectLink) { + String[] limitedTokens = reqPath.split("[/]", 3); + cmsPath += tokens[1] + "/" + ProjectsHelper.FREEZONE_DIR + "/" - + reqPath.split("[/]", 3)[2]; + + (limitedTokens.length > 2 ? limitedTokens[2] : ""); } else { cmsPath += DEFAULT_DIR + "/" + ProjectsHelper.FREEZONE_DIR + reqPath; 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-10-10 13:41:17 UTC (rev 1355) +++ trunk/forge/portal-extensions/forge-root-redirect/src/java/org/jboss/forge/redirect/RootRedirectFilter.java 2005-10-10 19:39:49 UTC (rev 1356) @@ -14,9 +14,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.jboss.forge.common.ForgeHelper; -import org.jboss.forge.common.projects.ProjectsHelper; - /** * @author adamw */ @@ -31,10 +28,6 @@ return "projects".equals(token) || "products".equals(token); } - private boolean checkUriMainPage(String uri) { - return "".equals(uri) || "/".equals(uri); - } - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException { if ((request instanceof HttpServletRequest) @@ -43,18 +36,14 @@ HttpServletResponse httpResponse = (HttpServletResponse) response; String requestURI = httpRequest.getRequestURI(); - String[] tokens = requestURI.split("[/]", 4); + String[] tokens = requestURI.split("[/]", 3); - String redirectTo; + String redirectTo = "/portal"; - if ((tokens.length > 2) && (!"".equals(tokens[2])) && (checkFirstToken(tokens[1]))) { - // Project redirect. - redirectTo = ProjectsHelper.getProjects(ForgeHelper.LABS_PORTAL).getProjectLink(tokens[2]); - } else if (checkUriMainPage(requestURI)) { - // Main page redirect. - redirectTo = ForgeHelper.createPageLink(ForgeHelper.LABS_PORTAL, "default"); + if ((tokens.length > 2) && (checkFirstToken(tokens[1]))) { + redirectTo += "/" + tokens[2]; } else { - redirectTo = "/portal"+requestURI; + redirectTo += requestURI; } httpResponse.sendRedirect(redirectTo); |
From: <jbo...@li...> - 2005-10-10 13:41:24
|
Author: szimano Date: 2005-10-10 09:41:17 -0400 (Mon, 10 Oct 2005) New Revision: 1355 Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml Removed: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.xml 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/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/WikiPageDictionary.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java Log: another changes for renaming Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 2005-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 2005-10-10 13:41:17 UTC (rev 1355) @@ -0,0 +1,120 @@ +<!-- + JBoss, the OpenSource J2EE webOS + Distributable under LGPL license. + See terms of license at gnu.org. + --> + +<wikiTypes> + <wikiType> + <name>html</name> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> + <plugin> + <name>trail</name> + <class>org.jboss.wiki.plugins.TrailPlugin</class> + </plugin> + <plugin> + <name>subPagesList</name> + <class>org.jboss.wiki.plugins.SubpagesListPlugin</class> + </plugin> + <plugin> + <name>attachmentList</name> + <class>org.jboss.wiki.plugins.AttachmentListPlugin</class> + </plugin> + <plugin> + <name>friendlyLinks</name> + <class>org.jboss.wiki.plugins.FriendlyLinkPlugin</class> + </plugin> + <plugin> + <name>adminConsole</name> + <class>org.jboss.wiki.plugins.AdminConsolePlugin</class> + </plugin> + <plugin> + <name>wikiToHtmlTranslator</name> + <class>org.jboss.wiki.plugins.HTMLTranslatorParts</class> + </plugin> + </wikiType> + <wikiType> + <name>diff</name> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> + <plugin> + <name>Diff</name> + <class>org.jboss.wiki.plugins.DiffPlugin</class> + </plugin> + </wikiType> + <wikiType> + <name>find</name> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> + <plugin> + <name>findResult</name> + <class>org.jboss.wiki.plugins.FindResultPlugin</class> + </plugin> + <plugin> + <name>trail</name> + <class>org.jboss.wiki.plugins.TrailPlugin</class> + </plugin> + <plugin> + <name>wikiToHtmlTranslator</name> + <class>org.jboss.wiki.plugins.HTMLTranslatorParts</class> + </plugin> + </wikiType> + <wikiType> + <name>rss</name> + <class>org.jboss.wiki.plugins.RSSWikiType</class> + <plugin> + <name>RSSPlugin</name> + <class>org.jboss.wiki.plugins.RSSPlugin</class> + </plugin> + </wikiType> + <wikiType> + <name>rdf</name> + <class>org.jboss.wiki.plugins.RSSWikiType</class> + <plugin> + <name>RSSPlugin</name> + <class>org.jboss.wiki.plugins.RDFPlugin</class> + </plugin> + </wikiType> + <wikiType> + <name>atom</name> + <class>org.jboss.wiki.plugins.ATOMWikiType</class> + <plugin> + <name>ATOMPlugin</name> + <class>org.jboss.wiki.plugins.ATOMPlugin</class> + </plugin> + </wikiType> + <wikiType> + <name>fileInfo</name> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> + <plugin> + <name>AttachementInfoPlugin</name> + <class>org.jboss.wiki.plugins.AttachementInfoPlugin</class> + </plugin> + </wikiType> + <wikiType> + <name>recentChanges</name> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> + <plugin> + <name>recentChanges</name> + <class>org.jboss.wiki.plugins.RecentlyChangedPagesPlugin</class> + </plugin> + <plugin> + <name>HTMLTranslatorParts</name> + <class>org.jboss.wiki.plugins.HTMLTranslatorParts</class> + </plugin> + </wikiType> + <wikiType> + <name>edit</name> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> + <plugin> + <name>translateUids</name> + <class>org.jboss.wiki.plugins.TranslateUids</class> + </plugin> + </wikiType> + <wikiType> + <name>postedit</name> + <class>org.jboss.wiki.plugins.DirectReferenceWikiType</class> + <plugin> + <name>reTranslateUids</name> + <class>org.jboss.wiki.plugins.ReTranslateUids</class> + </plugin> + </wikiType> +</wikiTypes> \ No newline at end of file Deleted: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.xml =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.xml 2005-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.xml 2005-10-10 13:41:17 UTC (rev 1355) @@ -1,112 +0,0 @@ -<!-- - JBoss, the OpenSource J2EE webOS - Distributable under LGPL license. - See terms of license at gnu.org. - --> - -<wikiTypes> - <wikiType> - <name>html</name> - <class>org.jboss.wiki.plugins.DefaultWikiType</class> - <plugin> - <name>trail</name> - <class>org.jboss.wiki.plugins.TrailPlugin</class> - </plugin> - <plugin> - <name>subPagesList</name> - <class>org.jboss.wiki.plugins.SubpagesListPlugin</class> - </plugin> - <plugin> - <name>attachmentList</name> - <class>org.jboss.wiki.plugins.AttachmentListPlugin</class> - </plugin> - <plugin> - <name>friendlyLinks</name> - <class>org.jboss.wiki.plugins.FriendlyLinkPlugin</class> - </plugin> - <plugin> - <name>adminConsole</name> - <class>org.jboss.wiki.plugins.AdminConsolePlugin</class> - </plugin> - <plugin> - <name>wikiToHtmlTranslator</name> - <class>org.jboss.wiki.plugins.HTMLTranslatorParts</class> - </plugin> - </wikiType> - <wikiType> - <name>diff</name> - <class>org.jboss.wiki.plugins.DefaultWikiType</class> - <plugin> - <name>Diff</name> - <class>org.jboss.wiki.plugins.DiffPlugin</class> - </plugin> - </wikiType> - <wikiType> - <name>find</name> - <class>org.jboss.wiki.plugins.DefaultWikiType</class> - <plugin> - <name>findResult</name> - <class>org.jboss.wiki.plugins.FindResultPlugin</class> - </plugin> - <plugin> - <name>trail</name> - <class>org.jboss.wiki.plugins.TrailPlugin</class> - </plugin> - <plugin> - <name>wikiToHtmlTranslator</name> - <class>org.jboss.wiki.plugins.HTMLTranslatorParts</class> - </plugin> - </wikiType> - <wikiType> - <name>rss</name> - <class>org.jboss.wiki.plugins.RSSWikiType</class> - <plugin> - <name>RSSPlugin</name> - <class>org.jboss.wiki.plugins.RSSPlugin</class> - </plugin> - </wikiType> - <wikiType> - <name>rdf</name> - <class>org.jboss.wiki.plugins.RSSWikiType</class> - <plugin> - <name>RSSPlugin</name> - <class>org.jboss.wiki.plugins.RDFPlugin</class> - </plugin> - </wikiType> - <wikiType> - <name>atom</name> - <class>org.jboss.wiki.plugins.ATOMWikiType</class> - <plugin> - <name>ATOMPlugin</name> - <class>org.jboss.wiki.plugins.ATOMPlugin</class> - </plugin> - </wikiType> - <wikiType> - <name>fileInfo</name> - <class>org.jboss.wiki.plugins.DefaultWikiType</class> - <plugin> - <name>AttachementInfoPlugin</name> - <class>org.jboss.wiki.plugins.AttachementInfoPlugin</class> - </plugin> - </wikiType> - <wikiType> - <name>recentChanges</name> - <class>org.jboss.wiki.plugins.DefaultWikiType</class> - <plugin> - <name>recentChanges</name> - <class>org.jboss.wiki.plugins.RecentlyChangedPagesPlugin</class> - </plugin> - <plugin> - <name>HTMLTranslatorParts</name> - <class>org.jboss.wiki.plugins.HTMLTranslatorParts</class> - </plugin> - </wikiType> - <wikiType> - <name>edit</name> - <class>org.jboss.wiki.plugins.DefaultWikiType</class> - <plugin> - <name>translateUids</name> - <class>org.jboss.wiki.plugins.TranslateUids</class> - </plugin> - </wikiType> -</wikiTypes> \ No newline at end of file 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-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -20,6 +20,7 @@ import java.util.TreeSet; import org.jboss.wiki.exceptions.PageAlreadyExistsException; +import org.jboss.wiki.exceptions.PageRenamingException; import org.jboss.wiki.exceptions.WikiException; /** @@ -51,7 +52,7 @@ private String pathToAttachments; private boolean lock = false; - + // private Properties fileDSProps; private final int BUF_SIZE = 32768; @@ -65,7 +66,7 @@ private File modFile; private File pageDictionaryFile; - + private WikiEngine wikiEngine; public void setWikiEngine(WikiEngine wikiEngine) { @@ -138,9 +139,8 @@ pageDictionary = new Properties(); pageRevDictionary = new Properties(); - - //TODO Do not load dictionary YET ! - + // TODO Do not load dictionary YET ! + pageDictionaryFile = new File(pathToMedia + "/dictionary.properties"); if (!pageDictionaryFile.exists()) { @@ -173,7 +173,6 @@ } - // create pageRevDictionary - to make it work faster Set<Object> keys = pageDictionary.keySet(); @@ -201,22 +200,22 @@ return true; } - public boolean savePage(WikiPage page, String languageCode) { + public boolean savePage(String uid, WikiPage page, String languageCode) { // TODO Languages boolean status = false; - if (pageExists(page.getName())) { // page exists on + if (pageExists(uid)) { // page exists on // harddisk - add new // version - Properties pageProps = getPageProps(page.getName()); + Properties pageProps = getPageProps(uid); pageProps.setProperty(page.getLastVersion() + ".author", page .getLastAuthor().getName()); try { pageProps.store(new FileOutputStream(new File(pathToMedia - + "/OLD/" + page.getName() + "/page.properties")), + + "/OLD/" + uid + "/page.properties")), "Saved by FileDataSource of JBoss Wiki"); } catch (Exception e) { System.err @@ -225,9 +224,9 @@ } System.out.println("Opening files"); - File pageFile = new File(pathToMedia + "/OLD/" + page.getName() + File pageFile = new File(pathToMedia + "/OLD/" + uid + "/" + (page.getLastVersion() - 1) + ".txt"); - File pageOldFile = new File(pathToMedia + "/" + page.getName() + File pageOldFile = new File(pathToMedia + "/" + uid + ".txt"); FileOutputStream pageFileWriter; @@ -273,11 +272,11 @@ // create needed dirs File newPageFile = new File(pathToMedia + "/OLD/" - + page.getName()); + + uid); newPageFile.mkdirs(); // write the page - newPageFile = new File(pathToMedia + "/OLD/" + page.getName() + newPageFile = new File(pathToMedia + "/OLD/" + uid + "/page.properties"); FileOutputStream pageWriter = new FileOutputStream(newPageFile); @@ -291,7 +290,7 @@ pageWriter.close(); String pageDirName = pathToMedia; - String[] pageNames = page.getName().split("/"); + String[] pageNames = uid.split("/"); for (int i = 0; i < pageNames.length - 1; i++) { pageDirName += "/" + pageNames[i]; @@ -302,7 +301,7 @@ pageDir.mkdirs(); pageWriter = new FileOutputStream(new File(pathToMedia + "/" - + page.getName() + ".txt")); + + uid + ".txt")); String pageContent = page.getContent(); @@ -1035,43 +1034,55 @@ } public String getRealName(String uid) { - while (lock); //wait till unlocked (dictionary is changing) - + 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) - + 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) throws PageAlreadyExistsException { + public synchronized void rename(String uid, String newName) + throws PageAlreadyExistsException { lock = true; - + if (wikiEngine.pageExists(newName)) { - throw new PageAlreadyExistsException("Page with the name you're trying to rename already exists."); + throw new PageAlreadyExistsException( + "Page with the name you're trying to rename already exists."); } - + pageDictionary.setProperty(uid, newName); pageRevDictionary.setProperty(newName, uid); - + // add also maping for future name // find apropriate uid - + int i = 2; - - while ((pageExists(uid+String.valueOf(i)))||(pageDictionary.containsKey(uid+String.valueOf(i)))) { + + while ((pageExists(uid + String.valueOf(i))) + || (pageDictionary.containsKey(uid + String.valueOf(i)))) { i++; } - + // add maping for new (to be done) with name translated to old uid - pageDictionary.setProperty(uid+String.valueOf(i), uid); - pageRevDictionary.setProperty(uid, uid+String.valueOf(i)); - + pageDictionary.setProperty(uid + String.valueOf(i), uid); + pageRevDictionary.setProperty(uid, uid + String.valueOf(i)); + + saveDictionary(); + + lock = false; + } + + private void saveDictionary() { + // synchronize dictionary with file on disk FileOutputStream fos; try { fos = new FileOutputStream(pageDictionaryFile); @@ -1091,8 +1102,6 @@ } catch (FileNotFoundException e) { e.printStackTrace(); } - - lock = false; } public boolean uidInDictionary(String uid) { @@ -1102,4 +1111,19 @@ public boolean realNameInDictionary(String realName) { return pageRevDictionary.contains(realName); } + + public void removeDictForPage(String uid) throws PageRenamingException { + if (!pageDictionary.contains(uid)) { + throw new PageRenamingException( + "There is no dictionary entry for uid: " + uid); + } + + String realName = pageDictionary.getProperty(uid); + + // remove all dict entries + pageDictionary.remove(uid); + pageRevDictionary.remove(realName); + + saveDictionary(); + } } 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-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -38,11 +38,12 @@ * * @param page * Page to save (with changed version number, author and content) + * @param uid Page's uid * @return true if page was succesfully saved * @param languageCode * langague code */ - public boolean savePage(WikiPage page, String languageCode); + public boolean savePage(String uid, WikiPage page, String languageCode); /** * This function is exeuted after saving page. 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-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -320,7 +320,7 @@ SAXParser sp = (SAXParserFactory.newInstance()).newSAXParser(); sp.parse( - WikiTypeHandler.class.getResourceAsStream("WikiTypes.xml"), + WikiTypeHandler.class.getResourceAsStream("/WikiTypes.xml"), new WikiTypeHandler(this)); } catch (Exception se) { System.err.println("Error while parsing WikiType configuration: " @@ -626,7 +626,7 @@ public String getRealName(String uid) { String[] pageTokens = uid.split("/"); - // System.out.println("Looking at page: (realName) "+uid); + System.out.println("Looking at page: (realName) "+uid); if (pageTokens.length > 1) { if (!wikiPageDictionary.getRealName(uid).equals(uid)) { @@ -634,9 +634,10 @@ // this page is in dictionary return wikiPageDictionary.getRealName(uid); } else { + System.out.println("checking parts"); // look if parts of this page are in dictionary - for (int i = pageTokens.length - 2; i > 0; i--) { + for (int i = pageTokens.length - 1; i > 0; i--) { String page = ""; String suffix = ""; for (int j = 0; j < i; j++) { @@ -680,7 +681,7 @@ } else { // look if parts of this page are in dictionary - for (int i = pageTokens.length - 2; i > 0; i--) { + for (int i = pageTokens.length - 1; i > 0; i--) { String page = ""; String suffix = ""; for (int j = 0; j < i; j++) { @@ -781,7 +782,18 @@ } public boolean savePage(WikiPage page, String languageCode) { - return mediaDataSource.savePage(page, languageCode); + WikiType postEditProcess = getWikiType("postedit"); + + if (postEditProcess != null) { + // there are some plugins for postediting a page + page = postEditProcess.process(page, null); + } + + // put processed page to pages map + pages.put(page.getName(), page); + + + return mediaDataSource.savePage(getUid(page.getName()), page, languageCode); } public boolean postSave() { 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-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -158,10 +158,7 @@ * */ public synchronized boolean save(Integer editActionId) throws EditSessionExpired{ - System.out.println(editActionId); - for (Integer i : expiredSessionIds) { - System.out.println("exp. session ids: "+i); - } + if (expiredSessionIds.contains(editActionId)) { throw new EditSessionExpired("Your edit session have expired. Please edit page once again !"); } Modified: 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-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPageDictionary.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -1,6 +1,7 @@ package org.jboss.wiki; import org.jboss.wiki.exceptions.PageAlreadyExistsException; +import org.jboss.wiki.exceptions.PageRenamingException; public interface WikiPageDictionary { @@ -13,4 +14,6 @@ public boolean uidInDictionary(String uid); public boolean realNameInDictionary(String realName); + + public void removeDictForPage(String uid) throws PageRenamingException; } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java 2005-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiType.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -91,7 +91,7 @@ System.err.println("cannot clone the page: " + cnse); } } - + // execute the plugins for (int i = 0; i < plugins.size(); i++) { // System.out.println("Executing plugin: @@ -102,10 +102,11 @@ // clear session attributes passed in uri int i = 1; - while (wikiSession.getAttribute("var" + i) != null) { - wikiSession.removeAttribute("var" + i); - i++; - } + if (wikiSession != null) + while (wikiSession.getAttribute("var" + i) != null) { + wikiSession.removeAttribute("var" + i); + i++; + } return newPage; } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java 2005-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -9,6 +9,10 @@ return true; } + public DirectReferenceWikiType( ) { + + } + } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java 2005-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -12,7 +12,13 @@ return wikiEngine.getUid(link); } + public ReTranslateUids() { + super(); + } + public ReTranslateUids (WikiEngine wikiEngine) { + super(); + this.wikiEngine = wikiEngine; } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java 2005-10-10 05:55:33 UTC (rev 1354) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java 2005-10-10 13:41:17 UTC (rev 1355) @@ -17,14 +17,14 @@ private Stack<String> replaces = new Stack<String>(); private String PRE_START = "{{{"; - + private String PRE_END = "}}}"; - + @Override public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) { - + wikiPage.setPageContent(getNewContent(wikiPage.getContent())); - + return wikiPage; } @@ -36,7 +36,7 @@ Integer partBegin = 0; // get all PRE starting {{{ - while ((lastCommStart = sBuf.indexOf(PRE_START, lastCommStart+3)) != -1) { + while ((lastCommStart = sBuf.indexOf(PRE_START, lastCommStart + 3)) != -1) { queue.offer(lastCommStart); } @@ -47,43 +47,42 @@ parsePart(sBuf, 0, sBuf.length()); } else { while (lastCommStart != null) { - + parsePart(sBuf, partBegin, lastCommStart); partBegin = sBuf.indexOf(PRE_END, lastCommStart); if (partBegin != -1) { partBegin += PRE_END.length(); - + while ((lastCommStart != null) && (lastCommStart < partBegin)) { lastCommStart = queue.poll(); } - + if (lastCommStart == null) { lastCommStart = sBuf.length(); } - } - else { + } else { lastCommStart = null; } } } while (begins.size() > 0) { - + int begin; sBuf.delete(begin = begins.pop(), ends.pop()); sBuf.insert(begin, replaces.pop()); } - + return sBuf.toString(); } - + protected void parsePart(StringBuffer sBuf, int start, int end) { - + boolean insideLink = false; Integer wordBegin = null; Integer wordEnd = null; @@ -101,7 +100,7 @@ wordBegin = null; wordEnd = null; } else { - wordBegin = i+1; + wordBegin = i + 1; } } else if (sBuf.charAt(i) == ']') { @@ -166,7 +165,8 @@ if (wordBegin != null) { // there was not closed link ([...) parse what stayed unparsed // (maybe some CamelCase links) - parsePart(sBuf, wordBegin, end); + if (wordBegin != start) + parsePart(sBuf, wordBegin, end); } } |
From: <jbo...@li...> - 2005-10-10 05:55:39
|
Author: aron.gombas Date: 2005-10-10 01:55:33 -0400 (Mon, 10 Oct 2005) New Revision: 1354 Modified: trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp trunk/labs/kosmos/web-portlet/pages/jira_monitoring.jsp Log: Bar borders added Modified: trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp 2005-10-10 05:44:54 UTC (rev 1353) +++ trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp 2005-10-10 05:55:33 UTC (rev 1354) @@ -44,7 +44,7 @@ </td> <td> - <table width="100px" valign="middle" align="center" cellspacing="0" cellpadding="0" border="0"> + <table style="border: 1px solid black;" width="100px" valign="middle" align="center" cellspacing="0" cellpadding="0"> <tr> <td style="background-color:#00FF00"><img src="<%= renderRequest.getContextPath() %>/pages/images/spacer.gif" width="<fmt:formatNumber value="${100*projectsIt.successRate}" maxFractionDigits="0"/>" height="10px" border="0"/></td> <td style="background-color:#FF0000"><img src="<%= renderRequest.getContextPath() %>/pages/images/spacer.gif" width="<fmt:formatNumber value="${(100*projectsIt.failures) / projectsIt.tests}" maxFractionDigits="0"/>" height="10px" border="0"/></td> Modified: trunk/labs/kosmos/web-portlet/pages/jira_monitoring.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/jira_monitoring.jsp 2005-10-10 05:44:54 UTC (rev 1353) +++ trunk/labs/kosmos/web-portlet/pages/jira_monitoring.jsp 2005-10-10 05:55:33 UTC (rev 1354) @@ -51,7 +51,7 @@ <table valign="center"> <tr> <td> - <table width="100px" valign="middle" align="center" cellspacing="0" cellpadding="0" border="0"> + <table style="border: 1px solid black;" width="100px" valign="middle" align="center" cellspacing="0" cellpadding="0"> <tr> <td style="background-color:#FF0000"><img src="<%= renderRequest.getContextPath() %>/pages/images/spacer.gif" width="<fmt:formatNumber value="${(100*projectsIt.openIssues) / projectsIt.totalIssues}" maxFractionDigits="0"/>" height="10px" border="0"/></td> <td style="background-color:#FFFF00"><img src="<%= renderRequest.getContextPath() %>/pages/images/spacer.gif" width="<fmt:formatNumber value="${(100*projectsIt.codingInProgressIssues) / projectsIt.totalIssues}" maxFractionDigits="0"/>" height="10px" border="0"/></td> |
From: <jbo...@li...> - 2005-10-10 05:44:55
|
Author: aron.gombas Date: 2005-10-10 01:44:54 -0400 (Mon, 10 Oct 2005) New Revision: 1353 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java Log: Non-transparent piechart Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java 2005-10-10 05:25:56 UTC (rev 1352) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java 2005-10-10 05:44:54 UTC (rev 1353) @@ -68,7 +68,6 @@ // fine-tune plotting PiePlot3D plot = (PiePlot3D)chart.getPlot(); - plot.setForegroundAlpha(0.85f); plot.setDepthFactor(0.1f); return chart; |
From: <jbo...@li...> - 2005-10-10 05:26:05
|
Author: aron.gombas Date: 2005-10-10 01:25:56 -0400 (Mon, 10 Oct 2005) New Revision: 1352 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/AbstractKosmosService.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java Log: Some refactoring Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/AbstractKosmosService.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/AbstractKosmosService.java 2005-10-10 05:24:29 UTC (rev 1351) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/AbstractKosmosService.java 2005-10-10 05:25:56 UTC (rev 1352) @@ -34,7 +34,7 @@ * @version $Id$ */ public abstract class AbstractKosmosService implements ApplicationContextAware { - private final Log log = LogFactory.getLog(AbstractKosmosService.class); + private final static Log log = LogFactory.getLog(AbstractKosmosService.class); /** Cache timeout in milliseconds: a new request over this period will receive the cached result. */ private static final int CACHE_TIMEOUT = 10*60*1000;// TODO should be externally configurable Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-10-10 05:24:29 UTC (rev 1351) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-10-10 05:25:56 UTC (rev 1352) @@ -43,7 +43,7 @@ * @version $Id$ */ public class CcServiceImpl extends AbstractKosmosService implements CcService { - private final Log log = LogFactory.getLog(CcServiceImpl.class); + private final static Log log = LogFactory.getLog(CcServiceImpl.class); /** Dateformat used with the builds. */ private final static DateFormat CC_BUILD_DATEFORMAT = new SimpleDateFormat("yyyyMMddhhmmss"); Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java 2005-10-10 05:24:29 UTC (rev 1351) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/jira/JiraServiceImpl.java 2005-10-10 05:25:56 UTC (rev 1352) @@ -37,7 +37,7 @@ * @version $Id$ */ public class JiraServiceImpl extends AbstractKosmosService implements JiraService { - private final Log log = LogFactory.getLog(JiraServiceImpl.class); + private final static Log log = LogFactory.getLog(JiraServiceImpl.class); /** Color codes for the issue statuses. */ private final static int OPEN_COLOR = 0xFF0000; Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java 2005-10-10 05:24:29 UTC (rev 1351) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/sf/SfServiceImpl.java 2005-10-10 05:25:56 UTC (rev 1352) @@ -34,7 +34,7 @@ * @version $Id$ */ public class SfServiceImpl extends AbstractKosmosService implements SfService { - private final Log log = LogFactory.getLog(SfServiceImpl.class); + private final static Log log = LogFactory.getLog(SfServiceImpl.class); /** Base URL for SF, used to generate full URLs from the local ones. */ private final static String SF_BASEURL = "http://www.sourceforge.net"; Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java 2005-10-10 05:24:29 UTC (rev 1351) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java 2005-10-10 05:25:56 UTC (rev 1352) @@ -51,7 +51,7 @@ * @version $Id$ */ public class SvnServiceImpl extends AbstractKosmosService implements SvnService { - private final Log log = LogFactory.getLog(SvnServiceImpl.class); + private final static Log log = LogFactory.getLog(SvnServiceImpl.class); /** Service-specific handler. */ private SvnDataHandler handler = new SvnDataHandler(); |
From: <jbo...@li...> - 2005-10-10 05:24:40
|
Author: aron.gombas Date: 2005-10-10 01:24:29 -0400 (Mon, 10 Oct 2005) New Revision: 1351 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/Identified.java trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/AbstractKosmosPortlet.java trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/cc/CcMonitoringPortlet.java trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/jira/JiraMonitoringPortlet.java trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/sf/SfMonitoringPortlet.java trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/svn/SvnMonitoringPortlet.java Log: More robust "detail" views Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/Identified.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/model/Identified.java 2005-10-09 14:44:15 UTC (rev 1350) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/model/Identified.java 2005-10-10 05:24:29 UTC (rev 1351) @@ -6,8 +6,6 @@ */ package hu.midori.kosmos.model; -import java.util.Collection; -import java.util.Iterator; /** * Each identifiable entity class should extend this. @@ -33,30 +31,4 @@ public int getId() { return id; } - - /** - * Returns the <code>Identified</code> object from a collection - * by using a simple linear search, or <code>null</code> if not found. - */ - public static Identified findInCollection(Collection<? extends Identified> items, int id) { - Iterator<? extends Identified> it = items.iterator(); - while(it.hasNext()) { - Identified item = it.next(); - if(item.getId() == id) - return item; - } - - return null; - } - - /** - * Returns the <code>Identified</code> object from a collection. - * It receives the ID as String, so can be passed from request - * params directly. - * - * @see #findInCollection(Collection, int) - */ - public static Identified findInCollection(Collection<? extends Identified> items, String id) { - return findInCollection(items, Integer.parseInt(id)); - } } Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java 2005-10-09 14:44:15 UTC (rev 1350) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/model/ModelUtils.java 2005-10-10 05:24:29 UTC (rev 1351) @@ -6,6 +6,12 @@ */ package hu.midori.kosmos.model; +import java.util.Collection; +import java.util.Iterator; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** * Utility methods for the domain model classes. * @@ -13,6 +19,8 @@ * @version $Id$ */ public class ModelUtils { + private static final Log log = LogFactory.getLog(ModelUtils.class); + /** This class should never be instantiated. */ protected ModelUtils() { } @@ -23,4 +31,38 @@ public final static long MILLIS_PER_WEEK = 7*MILLIS_PER_DAY; /** Millis in one month (31 days). */ public final static long MILLIS_PER_MONTH = 31*MILLIS_PER_DAY; + + /** + * Returns the <code>Identified</code> object from a collection + * by using a simple linear search, or <code>null</code> if not found. + */ + public static Identified findInCollection(Collection<? extends Identified> items, int id) { + Iterator<? extends Identified> it = items.iterator(); + while(it.hasNext()) { + Identified item = it.next(); + if(item.getId() == id) + return item; + } + + return null; + } + /** + * Returns the <code>Identified</code> object from a collection. + * It receives the ID as String, so can be passed from request + * params directly. + * + * @see #findInCollection(Collection, int) + */ + public static Identified findInCollection(Collection<? extends Identified> items, String id) { + int idInt = 0; + + try { + idInt = Integer.parseInt(id); + } catch(NumberFormatException ex) { + log.error(ex); + return null; + } + + return findInCollection(items, idInt); + } } Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/AbstractKosmosPortlet.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/AbstractKosmosPortlet.java 2005-10-09 14:44:15 UTC (rev 1350) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/AbstractKosmosPortlet.java 2005-10-10 05:24:29 UTC (rev 1351) @@ -23,7 +23,7 @@ * @version $Id$ */ public abstract class AbstractKosmosPortlet extends GenericPortlet { - private final Log log = LogFactory.getLog(AbstractKosmosPortlet.class); + private final static Log log = LogFactory.getLog(AbstractKosmosPortlet.class); protected String monitoredResource = null; protected String serviceUrl = null; Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/cc/CcMonitoringPortlet.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/cc/CcMonitoringPortlet.java 2005-10-09 14:44:15 UTC (rev 1350) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/cc/CcMonitoringPortlet.java 2005-10-10 05:24:29 UTC (rev 1351) @@ -7,7 +7,7 @@ package hu.midori.kosmos.portlet.cc; import hu.midori.kosmos.model.CcProject; -import hu.midori.kosmos.model.Identified; +import hu.midori.kosmos.model.ModelUtils; import hu.midori.kosmos.portlet.AbstractKosmosPortlet; import hu.midori.kosmos.portlet.util.PortletUtils; import hu.midori.kosmos.protocol.CcService; @@ -34,7 +34,7 @@ * @version $Id$ */ public class CcMonitoringPortlet extends AbstractKosmosPortlet { - private final Log log = LogFactory.getLog(CcMonitoringPortlet.class); + private final static Log log = LogFactory.getLog(CcMonitoringPortlet.class); private List<String> monitoredDirs = null; @@ -87,18 +87,23 @@ String id = request.getParameter("id"); if(id != null) { // show details - CcProject project = (CcProject)Identified.findInCollection(projects, id); - getPortletContext().setAttribute("project", project); - getPortletContext().removeAttribute("projects"); - - renderJsp(request, response, "/pages/cc_monitoring_test_details.jsp", String.format("%s [%s / %s]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, project.getName())); - } else { - // show the full list - getPortletContext().removeAttribute("project"); - getPortletContext().setAttribute("projects", projects); - - renderJsp(request, response, "/pages/cc_monitoring.jsp", String.format("%s [%s - %d]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, projects.size())); - } + CcProject project = (CcProject)ModelUtils.findInCollection(projects, id); + if(project != null) { + getPortletContext().setAttribute("project", project); + getPortletContext().removeAttribute("projects"); + + renderJsp(request, response, "/pages/cc_monitoring_test_details.jsp", String.format("%s [%s / %s]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, project.getName())); + return; + } else { + log.error(String.format("Project \"%s\" not found", id)); + } + } + + // show the full list + getPortletContext().removeAttribute("project"); + getPortletContext().setAttribute("projects", projects); + + renderJsp(request, response, "/pages/cc_monitoring.jsp", String.format("%s [%s - %d]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, projects.size())); } @Override Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/jira/JiraMonitoringPortlet.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/jira/JiraMonitoringPortlet.java 2005-10-09 14:44:15 UTC (rev 1350) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/jira/JiraMonitoringPortlet.java 2005-10-10 05:24:29 UTC (rev 1351) @@ -6,8 +6,8 @@ */ package hu.midori.kosmos.portlet.jira; -import hu.midori.kosmos.model.Identified; import hu.midori.kosmos.model.JiraProject; +import hu.midori.kosmos.model.ModelUtils; import hu.midori.kosmos.portlet.AbstractKosmosPortlet; import hu.midori.kosmos.portlet.util.PortletUtils; import hu.midori.kosmos.protocol.JiraService; @@ -34,7 +34,7 @@ * @version $Id$ */ public class JiraMonitoringPortlet extends AbstractKosmosPortlet { - private final Log log = LogFactory.getLog(JiraMonitoringPortlet.class); + private final static Log log = LogFactory.getLog(JiraMonitoringPortlet.class); private List<String> monitoredUrls = null; @@ -90,18 +90,23 @@ String action = request.getParameter("action"); String page = action.equals("viewProjectDetails") ? "/pages/jira_monitoring_project_details.jsp" : "/pages/jira_monitoring_issue_details.jsp"; - JiraProject project = (JiraProject)Identified.findInCollection(projects, id); - getPortletContext().setAttribute("project", project); - getPortletContext().removeAttribute("projects"); + JiraProject project = (JiraProject)ModelUtils.findInCollection(projects, id); + if(project != null) { + getPortletContext().setAttribute("project", project); + getPortletContext().removeAttribute("projects"); + + renderJsp(request, response, page, String.format("%s [%s / %s]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, project.getName())); + return; + } else { + log.error(String.format("Project \"%s\" not found", id)); + } + } - renderJsp(request, response, page, String.format("%s [%s / %s]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, project.getName())); - } else { - // show the full list - getPortletContext().removeAttribute("project"); - getPortletContext().setAttribute("projects", projects); - - renderJsp(request, response, "/pages/jira_monitoring.jsp", String.format("%s [%s - %d]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, projects.size())); - } + // show the full list + getPortletContext().removeAttribute("project"); + getPortletContext().setAttribute("projects", projects); + + renderJsp(request, response, "/pages/jira_monitoring.jsp", String.format("%s [%s - %d]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, projects.size())); } @Override Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/sf/SfMonitoringPortlet.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/sf/SfMonitoringPortlet.java 2005-10-09 14:44:15 UTC (rev 1350) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/sf/SfMonitoringPortlet.java 2005-10-10 05:24:29 UTC (rev 1351) @@ -33,7 +33,7 @@ * @version $Id$ */ public class SfMonitoringPortlet extends AbstractKosmosPortlet { - private final Log log = LogFactory.getLog(SfMonitoringPortlet.class); + private final static Log log = LogFactory.getLog(SfMonitoringPortlet.class); private List<String> monitoredUrls = null; Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/svn/SvnMonitoringPortlet.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/svn/SvnMonitoringPortlet.java 2005-10-09 14:44:15 UTC (rev 1350) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/portlet/svn/SvnMonitoringPortlet.java 2005-10-10 05:24:29 UTC (rev 1351) @@ -6,7 +6,7 @@ */ package hu.midori.kosmos.portlet.svn; -import hu.midori.kosmos.model.Identified; +import hu.midori.kosmos.model.ModelUtils; import hu.midori.kosmos.model.SvnRepository; import hu.midori.kosmos.portlet.AbstractKosmosPortlet; import hu.midori.kosmos.portlet.util.PortletUtils; @@ -34,7 +34,7 @@ * @version $Id$ */ public class SvnMonitoringPortlet extends AbstractKosmosPortlet { - private final Log log = LogFactory.getLog(SvnMonitoringPortlet.class); + private final static Log log = LogFactory.getLog(SvnMonitoringPortlet.class); private List<String> monitoredUrls = null; @@ -90,18 +90,23 @@ String action = request.getParameter("action"); String page = action.equals("viewRepositoryDetails") ? "/pages/svn_monitoring_repository_details.jsp" : (action.equals("viewRevisionDetails") ? "/pages/svn_monitoring_revision_details.jsp" : "/pages/svn_monitoring_activity_details.jsp"); - SvnRepository repository = (SvnRepository)Identified.findInCollection(repositories, id); - getPortletContext().setAttribute("repository", repository); - getPortletContext().removeAttribute("repositories"); + SvnRepository repository = (SvnRepository)ModelUtils.findInCollection(repositories, id); + if(repository != null) { + getPortletContext().setAttribute("repository", repository); + getPortletContext().removeAttribute("repositories"); + + renderJsp(request, response, page, String.format("%s [%s / %s]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, repository.getLocation())); + return; + } else { + log.error(String.format("Repository \"%s\" not found", id)); + } + } - renderJsp(request, response, page, String.format("%s [%s / %s]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, repository.getLocation())); - } else { - // show the full list - getPortletContext().removeAttribute("repository"); - getPortletContext().setAttribute("repositories", repositories); - - renderJsp(request, response, "/pages/svn_monitoring.jsp", String.format("%s [%s - %d]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, repositories.size())); - } + // show the full list + getPortletContext().removeAttribute("repository"); + getPortletContext().setAttribute("repositories", repositories); + + renderJsp(request, response, "/pages/svn_monitoring.jsp", String.format("%s [%s - %d]", getResourceBundle(Locale.getDefault()).getString("portlet.title"), monitoredResource, repositories.size())); } @Override |
Author: adamw Date: 2005-10-09 10:44:15 -0400 (Sun, 09 Oct 2005) New Revision: 1350 Added: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/etc/ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/etc/mime-types.txt Removed: trunk/forge/portal-extensions/forge-file-access/src/etc/ 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/projects/Projects.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java trunk/forge/portal-extensions/forge-file-access/project.xml 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-freezone/src/web/WEB-INF/portlet.xml trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationTools.java trunk/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/AttributesFilter.java 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/default-portal.xml trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java trunk/forge/portal-extensions/shotoku/shotoku-svn/project.xml 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/SvnNode.java Log: JBLAB-397: Friendly URLs for freezone w/ redirects and some shotoku enhancements (mime types) 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -18,6 +18,7 @@ import javax.mail.internet.MimeMessage; import javax.management.MalformedObjectNameException; import javax.portlet.PortalContext; +import javax.portlet.PortletRequest; import org.jboss.forge.common.blog.BlogUpdater; import org.jboss.forge.common.service.ForgeManagement; @@ -73,11 +74,14 @@ */ public final static String FORGE_SERVICE_NAME = "forge:service=cacheAndUpdate"; /** - * <code>FREEZONE_SEPARATOR</code> - separator used in requests insted of - * file-name components separator /. + * <code>FREEZONE_PREPEND</code> - string to prepend to all freezone links. */ - public final static String FREEZONE_SEPARATOR = "+"; - + public final static String FREEZONE_PREPEND = "/portal/"; + /** + * <code>LABS_PORTAL</code> - name of the portal where the labs page is. + */ + public final static String LABS_PORTAL = "default"; + private static ForgeProperties props; static { @@ -244,7 +248,7 @@ * Corresponding request. * @return Name of the current portal. */ - public static String getPortalName(JBossRenderRequest request) { + public static String getPortalName(PortletRequest request) { PortalContext portalCtx = request.getPortalContext(); String portalName = portalCtx .getProperty("org.jboss.portal.property.name"); @@ -332,12 +336,7 @@ * @return A link to the given page. */ public static String createFreezonePageLink(String portalName, String page) { - String pageLink = replace(page, "/", FREEZONE_SEPARATOR); - if (pageLink.charAt(0) == '+') - pageLink = pageLink.substring(1); - - return "/portal/index.html?ctrl:id=page." + portalName - + ".freezone&page=" + pageLink; + return FREEZONE_PREPEND + page; } /** 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -142,6 +142,26 @@ } /** + * Checks if a project with the given id exists. + * @param projectId Id of the project to check. + * @return True iff a project with the given id exists. + */ + public boolean projectExists(String projectId) { + return getProjectsDescriptor().getProjectDescriptor(projectId) != null; + } + + /** + * Checks if a project with the given id exists and is accessible with the + * given permissions. + * @param pc Permissions checker to use. + * @param projectId Id of the project to check. + * @return True iff a project with the given id exists. + */ + public boolean projectExists(PermissionsChecker pc, String projectId) { + return getProjectsDescriptor().getProjectContext(pc, projectId) != null; + } + + /** * Searches for the given string in project's names and descriptions. * * @param pc Permissions checker to use. Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -170,13 +170,7 @@ */ public static String createFreezonePageLink(String portalName, String projectId, String page) { - String pageLink = ForgeHelper.replace(page, "/", ForgeHelper.FREEZONE_SEPARATOR); - if (pageLink.charAt(0) == '+') - pageLink = pageLink.substring(1); - - return "/portal/index.html?ctrl:id=page." + portalName - + ".freezone&project=" + projectId + "&page=" - + pageLink; + return ForgeHelper.FREEZONE_PREPEND + projectId + "/" + page; } /** Modified: trunk/forge/portal-extensions/forge-file-access/project.xml =================================================================== --- trunk/forge/portal-extensions/forge-file-access/project.xml 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-file-access/project.xml 2005-10-09 14:44:15 UTC (rev 1350) @@ -43,21 +43,5 @@ <version>1.0</version> <jar>javax.servlet.jar</jar> </dependency> - - <dependency> - <groupId>jboss</groupId> - <artifactId>activation</artifactId> - <version>1.0</version> - <jar>activation.jar</jar> - </dependency> </dependencies> - - <build> - <resources> - <resource> - <directory>src/etc/</directory> - <include>**/*</include> - </resource> - </resources> - </build> </project> 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-file-access/src/java/org/jboss/forge/fileaccess/FileAccessFilter.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -13,7 +13,6 @@ import java.io.OutputStream; import java.net.URLDecoder; -import javax.activation.MimetypesFileTypeMap; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -61,11 +60,9 @@ @Inject private ContentManager contentManager; - private MimetypesFileTypeMap mimeTypes; public void init(FilterConfig conf) { - mimeTypes = new MimetypesFileTypeMap( - FileAccessFilter.class.getResourceAsStream("/mime-types.txt")); + } private void checkResource(String resource) throws Exception { @@ -107,23 +104,17 @@ requestedRes = URLDecoder.decode(requestedRes, "utf-8"); } - // The last token is the filename. - String[] tokens = requestURI.split("[/]"); - try { // Checking if we can allow access to this resource. checkResource(requestedRes); - // Computing the mime type of the resource. - String mimeType = mimeTypes - .getContentType(tokens[tokens.length - 1]); - Node requestedNode = contentManager.getNode(requestedRes); + String mimeType = requestedNode.getMimeType(); // Getting the input stream for the requested resource. InputStream is = requestedNode.getContentInputStream(); - // Setting response paramters + // Setting response parameters response.setContentType(mimeType); response.setContentLength((int) requestedNode.getLength()); 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -9,16 +9,23 @@ package org.jboss.forge.projects.freezone; import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import javax.portlet.PortletException; +import javax.portlet.PortletSecurityException; + import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.projects.ProjectsHelper; +import org.jboss.forge.common.projects.permissions.ActionRequestPermissionsChecker; +import org.jboss.portal.core.CoreConstants; +import org.jboss.portlet.JBossActionRequest; +import org.jboss.portlet.JBossActionResponse; import org.jboss.portlet.JBossPortlet; import org.jboss.portlet.JBossRenderRequest; import org.jboss.portlet.JBossRenderResponse; import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; import org.jboss.shotoku.aop.Inject; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; /** * A portlet for a project freezone. @@ -31,268 +38,106 @@ * page is selected. */ private final static String DEFAULT_PAGE = "index.html"; + + private final static String DEFAULT_DIR = "default"; + + private final static String PATH_PARAM = "path"; - private final static String ANCHOR_PATTERN = "<a[^<]*href[^>]*>"; - - private final static String IMG_PATTERN = "<img[^<]*src[^>]*>"; - - private final static String ATTRIBUTE_PATTERN = - " *= *[\"']? ?[^ \"'>]* ?[\"']?"; - - private final static String HREF_PATTERN = "href" + ATTRIBUTE_PATTERN; - - private final static String SRC_PATTERN = "src" + ATTRIBUTE_PATTERN; - @Inject private ContentManager cm; - /** - * Figures out if a link shouldn't be changed: this is the case when either - * it is an off-site link, or it starts with '/'. 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 - * @author adamw - */ - private boolean isOutsideLink(String link) { - link = link.trim(); - return link.startsWith("/") || ForgeHelper.isOutsideLink(link); + private void sendResponseNotFound(JBossRenderResponse response) throws IOException { + response.setContentType("text/html"); + response.getWriter().println("404 - Not found."); } - - // modifies path to page/resource so folder structure can be supported - private String modifyPath(String path, String element) { - int start, end; - String mainPath = ""; - if (element.startsWith("#")) { - return path + element; - - } else if (element.startsWith("./")) { - element = element.substring(2); - }// ignore ./ only clutters the code - - int pre = path.lastIndexOf('/'); - if (pre == -1)// we are in root dir - { - return element; - } else { - mainPath = path.substring(0, pre); - }// main path to page - - if (element.startsWith("/")) - return element.substring(1); // base path, start with WEB-root - - if (element.indexOf('/') != -1) { - if (element.indexOf("../") != -1)// need to go up a few levels - { - while (element.indexOf("../") != -1) // do we need to go more - { - if (mainPath.equals("")) - return DEFAULT_PAGE; // trying to go too far up - else { - start = element.lastIndexOf("../");// go one level up - end = mainPath.lastIndexOf("/");// find last level - if (end == -1) { - end = 0; - } // we have reached last level - element = element.substring(0, start) - + element.substring(start + 3, - element.length()); - mainPath = mainPath.substring(0, end); - - }// else - - }// while - - }// if ../ - + + public void doView(JBossRenderRequest request, JBossRenderResponse response) + throws IOException { + String requestedPath = request.getParameter(PATH_PARAM); + if (requestedPath == null) { + sendResponseNotFound(response); + return; } - - return mainPath + '/' + element; + + Node requestedNode; + try { + requestedNode = cm.getNode(requestedPath); + } catch (ResourceDoesNotExist e) { + sendResponseNotFound(response); + return; + } + + response.setContentType("text/html"); + response.getWriter().write(requestedNode.getContent()); } - /** - * Prepares a link for transforming - cuts off unnecessary spaces and - * removes any ' or " around it. - * - * @param link - * Link to prepare. - * @return A trimmed link with ' and " cut off from the beginning/end. - */ - private String prepareLink(String link) { - link = link.trim(); - - // Cutting off the ' or " from the beginning and end of - // the link. - if (('\'' == link.charAt(0)) || ('\"' == link.charAt(0))) - link = link.substring(1); - - int linkLength = link.length(); - if ((linkLength >= 1) - && (('\'' == link.charAt(linkLength - 1)) || ('\"' == link - .charAt(linkLength - 1)))) - link = link.substring(0, linkLength - 1); - - link = link.trim(); - - return link; - } - - public void doView(JBossRenderRequest request, JBossRenderResponse response) - throws IOException { - response.setContentType("text/html"); - + @Override + protected void processAction(JBossActionRequest request, JBossActionResponse response) + throws PortletException, PortletSecurityException, IOException { + String portalName = ForgeHelper.getPortalName(request); + + // Getting the requested path. + String reqPath = request.getParameter(CoreConstants.REQ_ACTION_PARAM_PATH); + + // No path/ invalid path - nothing to display. + if ((reqPath == null) || (reqPath.contains(".."))) + return; + + // For "root" requests, redirecting to a default page. + if (("".equals(reqPath)) || ("/".equals(reqPath))) { + response.sendRedirect(ForgeHelper.createPageLink(ForgeHelper.LABS_PORTAL, "default")); + return; + } + + // Ignoring any possible parameters. + int qmIndex = reqPath.indexOf('?'); + if (qmIndex != -1) + reqPath = reqPath.substring(0, qmIndex); + + // Checking if the first part of the path is a project name. + String[] tokens = reqPath.split("[/]"); + boolean isProjectLink = false; + if (tokens.length > 1) + isProjectLink = + ProjectsHelper.getProjects(portalName).projectExists( + new ActionRequestPermissionsChecker(request), tokens[1]); + + // If the requested path references a project, getting the page from + // the project's freezone dir. Otherwise, getting the page from the + // default directory. + String cmsPath = portalName + "/" + ProjectsHelper.MEMBERS_DIR + "/"; + if (isProjectLink) { + cmsPath += tokens[1] + "/" + ProjectsHelper.FREEZONE_DIR + "/" + + reqPath.split("[/]", 3)[2]; + } else { + cmsPath += DEFAULT_DIR + "/" + ProjectsHelper.FREEZONE_DIR + + reqPath; + } + + // Checking if we don't have to add a default page to the constructed + // path. + if (!cmsPath.contains(".")) { + if (!cmsPath.endsWith("/")) + cmsPath += "/"; + + cmsPath += DEFAULT_PAGE; + } + + // Getting the node and its content type. If it the same as the + // content type of the response, passing it for rendering. Otherwise, + // sending bytes. + Node requestedNode; try { - String portalName = ForgeHelper.getPortalName(request); - - // Getting the selected project - String projectId = ProjectsHelper.getSelectedProjectId(request, - true); - - // Getting the name of the requested page - String pagePath = ForgeHelper.getRequestParameter(request, "page"); - if (pagePath == null) - pagePath = DEFAULT_PAGE; - else - pagePath = ForgeHelper.replace(pagePath, - ForgeHelper.FREEZONE_SEPARATOR, "/"); - - // If the user tried to break into other files, denying access to - // him. - if (pagePath.indexOf("..") != -1) - throw new Exception(); - - // Reading the file. - String pageContent = cm.getNode(portalName + "/" - + ProjectsHelper.MEMBERS_DIR + "/" + projectId + "/" - + ProjectsHelper.FREEZONE_DIR + "/" - + pagePath).getContent(); - if (pageContent == null) - throw new Exception(); - - int patternFlags = Pattern.CASE_INSENSITIVE | Pattern.DOTALL - | Pattern.MULTILINE; - - Pattern anchor = Pattern.compile(ANCHOR_PATTERN, patternFlags); - Pattern href = Pattern.compile(HREF_PATTERN, patternFlags); - Pattern img = Pattern.compile(IMG_PATTERN, patternFlags); - Pattern src = Pattern.compile(SRC_PATTERN, patternFlags); - - // This should be prepended to all links that want to read - // from file-access. - String fileAccessPrepend = "/file-access/" + portalName + "/" - + ProjectsHelper.MEMBERS_DIR + "/" + projectId + "/" - + ProjectsHelper.FREEZONE_DIR + "/"; - - // REPLACING ANCHORS - Matcher anchorMatcher = anchor.matcher(pageContent); - - // Here we will build the freezone-parsed page content. - StringBuffer replacedPageContent = new StringBuffer(); - - // First we iterate over all anchors. (<a ...>) - while (anchorMatcher.find()) { - String nextAnchor = pageContent.substring( - anchorMatcher.start(), anchorMatcher.end()); - - StringBuffer nextAnchorReplacement; - - // Parsing the anchor to get the href element. - Matcher hrefMatcher = href.matcher(nextAnchor); - if (hrefMatcher.find()) { - // Now we have the href attribute. We must get the - // link from it, and if it is not an outside or / - // link, then transform it to a freezone one. - String nextHref = nextAnchor.substring(hrefMatcher.start(), - hrefMatcher.end()); - - // Getting the proper link from the href. - String link = - nextHref.substring(nextHref.indexOf('=') + 1); - - link = prepareLink(link); - - // Prepending necessary things to the link. - if (!isOutsideLink(link)) { - link = modifyPath(pagePath, link); - if (link.endsWith(".css")) { - link = fileAccessPrepend + link; - } else if (!((link.contains(".html")) || (link - .contains(".htm")))) { - // Must be an image or other media. - link = fileAccessPrepend + link - + "\" target=\"_blank"; - } else - // Must be a html page. - link = ProjectsHelper.createFreezonePageLink( - portalName, projectId, link); - } - - // Replacing the old link with a new one. - nextAnchorReplacement = new StringBuffer(); - hrefMatcher.appendReplacement(nextAnchorReplacement, - "href=\"" + link + "\""); - hrefMatcher.appendTail(nextAnchorReplacement); - } else { - nextAnchorReplacement = new StringBuffer(nextAnchor); - } - - anchorMatcher.appendReplacement(replacedPageContent, - nextAnchorReplacement.toString()); - } - - anchorMatcher.appendTail(replacedPageContent); - - // REPLACING IMAGES - pageContent = replacedPageContent.toString(); - Matcher imgMatcher = img.matcher(pageContent); - - replacedPageContent = new StringBuffer(); - - // Iterating over all image references (<img ...>). - while (imgMatcher.find()) { - String nextImg = pageContent.substring(imgMatcher.start(), - imgMatcher.end()); - - StringBuffer nextImgReplacement; - - // Parsing the image to get the src element. - Matcher srcMatcher = src.matcher(nextImg); - if (srcMatcher.find()) { - String nextSrc = nextImg.substring(srcMatcher.start(), - srcMatcher.end()); - - // Getting the proper link from the src. - String link = nextSrc.substring(nextSrc.indexOf('=') + 1); - - link = prepareLink(link); - - // Modifying the link. - if (!isOutsideLink(link)) { - link = modifyPath(pagePath, link); - link = fileAccessPrepend + link; - } - - // Replacing the old link with a new one. - nextImgReplacement = new StringBuffer(); - srcMatcher.appendReplacement(nextImgReplacement, "src=\"" - + link + "\""); - srcMatcher.appendTail(nextImgReplacement); - } else { - nextImgReplacement = new StringBuffer(nextImg); - } - - imgMatcher.appendReplacement(replacedPageContent, - nextImgReplacement.toString()); - } - - imgMatcher.appendTail(replacedPageContent); - - response.getWriter().write(replacedPageContent.toString()); - } catch (Exception e) { - e.printStackTrace(); - response.getWriter().write( - "The page you requested cannot be accessed"); + requestedNode = cm.getNode(cmsPath); + } catch (ResourceDoesNotExist e) { + return; } + + String mimeType = requestedNode.getMimeType(); + if (request.getResponseContentType().equalsIgnoreCase(mimeType)) { + response.setRenderParameter(PATH_PARAM, cmsPath); + } else { + response.sendRedirect("/" + ForgeHelper.FILE_ACCESS_DIR + "/" + cmsPath); + } } } Modified: trunk/forge/portal-extensions/forge-freezone/src/web/WEB-INF/portlet.xml =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/web/WEB-INF/portlet.xml 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-freezone/src/web/WEB-INF/portlet.xml 2005-10-09 14:44:15 UTC (rev 1350) @@ -1,18 +1,18 @@ -<?xml version="1.0" encoding="UTF-8"?> -<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" - version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> - <portlet> - <description>Forge project freezone portlet</description> - <portlet-name>PrjFreezonePortlet</portlet-name> - <display-name>Project freezone</display-name> - <portlet-class>org.jboss.forge.projects.freezone.Freezone</portlet-class> - <supports> - <mime-type>text/html</mime-type> - <portlet-mode>VIEW</portlet-mode> - </supports> - <portlet-info> - <title>Project freezone</title> - </portlet-info> - </portlet> - </portlet-app> +<?xml version="1.0" encoding="UTF-8"?> +<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" + version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> + <portlet> + <description>Forge project freezone portlet</description> + <portlet-name>PrjFreezonePortlet</portlet-name> + <display-name>Project freezone</display-name> + <portlet-class>org.jboss.forge.projects.freezone.Freezone</portlet-class> + <supports> + <mime-type>text/html</mime-type> + <portlet-mode>VIEW</portlet-mode> + </supports> + <portlet-info> + <title>Project freezone</title> + </portlet-info> + </portlet> + </portlet-app> 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-navigation/src/java/org/jboss/forge/navigation/NavigationTools.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -42,7 +42,7 @@ return desc; } - private static String NO_PROJECT_PARAM = "&noproject=true"; + private static String NO_PROJECT_PARAM = "noproject=true"; static String prepareLinkForDisplay(String link) { if (link == null) @@ -51,8 +51,13 @@ // 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; + (!ForgeHelper.isOutsideLink(link))) { + // Checking if this is a first parameter. + if (link.contains("?")) + return link + "&" + NO_PROJECT_PARAM; + else + return link + "?" + NO_PROJECT_PARAM; + } return link; } @@ -66,16 +71,12 @@ 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); + // There are three possibilites: it is the first parameter and there are no more + // parameters, there are more parameters, or it is a not-first parameter. + link = link.replace("?" + NO_PROJECT_PARAM + "&", "?"); + link = link.replace("?" + NO_PROJECT_PARAM, ""); + link = link.replace("&" + NO_PROJECT_PARAM, ""); - // 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; } } Modified: trunk/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/AttributesFilter.java =================================================================== --- trunk/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/AttributesFilter.java 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/AttributesFilter.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -10,11 +10,14 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; +import org.jboss.forge.common.ForgeHelper; +import org.jboss.forge.common.projects.ProjectsHelper; + public class AttributesFilter implements Filter { public void init(FilterConfig config) throws ServletException { } - + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { @@ -24,6 +27,16 @@ // Getting the request parameters. String project = request.getParameter("project"); String noproject = request.getParameter("noproject"); + + // The project doesn't have to be passed as a parameter. It can be + // passed in the requestURI, when accessing freezone pages. This + // only applies to the default portal. + String requestURI = httpRequest.getRequestURI(); + String[] tokens = requestURI.split("[/]"); + if ((tokens.length > 2) && + (ProjectsHelper.getProjects( + ForgeHelper.LABS_PORTAL).projectExists(tokens[2]))) + project = tokens[2]; if ("true".equals(noproject)) { // Removing project from session info. @@ -44,7 +57,7 @@ } // Putting the full requested url into session for navigation. - String fullUrl = httpRequest.getRequestURI(); + String fullUrl = requestURI; if (httpRequest.getQueryString() != null) fullUrl += "?" + httpRequest.getQueryString(); 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/forge-root-redirect/src/java/org/jboss/forge/redirect/RootRedirectFilter.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -14,16 +14,13 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.projects.ProjectsHelper; /** * @author adamw */ public class RootRedirectFilter implements Filter { - /** - * <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) { @@ -34,6 +31,10 @@ return "projects".equals(token) || "products".equals(token); } + private boolean checkUriMainPage(String uri) { + return "".equals(uri) || "/".equals(uri); + } + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException { if ((request instanceof HttpServletRequest) @@ -46,20 +47,12 @@ 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; + if ((tokens.length > 2) && (!"".equals(tokens[2])) && (checkFirstToken(tokens[1]))) { + // Project redirect. + redirectTo = ProjectsHelper.getProjects(ForgeHelper.LABS_PORTAL).getProjectLink(tokens[2]); + } else if (checkUriMainPage(requestURI)) { + // Main page redirect. + redirectTo = ForgeHelper.createPageLink(ForgeHelper.LABS_PORTAL, "default"); } else { redirectTo = "/portal"+requestURI; } Modified: trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/default-portal.xml =================================================================== --- trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/default-portal.xml 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/portal-default/src/web/WEB-INF/default-portal.xml 2005-10-09 14:44:15 UTC (rev 1350) @@ -17,7 +17,6 @@ <window-state>maximized</window-state> </supported-window-states> <properties> - <!-- Set the default window for request of the type /a/b/c --> <property> <name>org.jboss.portal.property.layout</name> <value>JBossForge</value> @@ -26,6 +25,11 @@ <name>org.jboss.portal.property.renderSet</name> <value>jbfRenderer</value> </property> + <!-- Set the default window for request of the type /a/b/c --> + <property> + <name>org.jboss.portal.property.action</name> + <value>FreezonePortletWindowDefaultFreezone</value> + </property> <!-- set the default strategy name (used by the strategy interceptor) --> <!-- see also portal-strategies.xml --> <property> 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Node.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -60,7 +60,7 @@ * @throws RepositoryException */ public InputStream getContentInputStream() throws RepositoryException; - + /** * Gets the length of this node's content. * @@ -76,4 +76,11 @@ * @throws RepositoryException */ public long getLastModfication() throws RepositoryException; + + /** + * Gets the mime type of this node. + * + * @return Mime type of this node. + */ + public String getMimeType(); } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/project.xml =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/project.xml 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/project.xml 2005-10-09 14:44:15 UTC (rev 1350) @@ -28,15 +28,22 @@ <artifactId>jboss-jmx</artifactId> <version>1.0</version> <jar>jboss-jmx.jar</jar> - </dependency> + </dependency> + + <dependency> + <groupId>jboss</groupId> + <artifactId>activation</artifactId> + <version>1.0</version> + <jar>activation.jar</jar> + </dependency> </dependencies> <build> <sourceDirectory>src/java</sourceDirectory> <resources> <resource> - <directory>src/etc/</directory> - <include>**/*.xml</include> + <directory>src/etc</directory> + <include>**/*</include> </resource> </resources> </build> Added: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/etc/mime-types.txt =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/etc/mime-types.txt 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/etc/mime-types.txt 2005-10-09 14:44:15 UTC (rev 1350) @@ -0,0 +1,714 @@ +############################################################################### +# +# MIME-TYPES and the extensions that represent them +# +# This file is part of the "mime-support" package. Please send email (not a +# bug report) to mim...@pa... if you would like new types +# and/or extensions to be added. +# +# Users can add their own types if they wish by creating a ".mime.types" +# file in their home directory. Definitions included there will take +# precedence over those listed here. +# +# Note: Compression schemes like "gzip", "bzip", and "compress" are not +# actually "mime-types". They are "encodings" and hence must _not_ have +# entries in this file to map their extensions. The "mime-type" of an +# encoded file refers to the type of data that has been encoded, not the +# type of the encoding. +# +############################################################################### + + +application/activemessage +application/andrew-inset ez +application/applefile +application/atomicmail +application/batch-SMTP +application/beep+xml +application/cals-1840 +application/commonground +application/cu-seeme cu +application/cybercash +application/dca-rft +application/dec-dx +application/docbook+xml +application/dsptype tsp +application/dvcs +application/edi-consent +application/edi-x12 +application/edifact +application/eshop +application/font-tdpfr +application/futuresplash spl +application/ghostview +application/hta hta +application/http +application/hyperstudio +application/iges +application/index +application/index.cmd +application/index.obj +application/index.response +application/index.vnd +application/iotp +application/ipp +application/isup +application/mac-binhex40 hqx +application/mac-compactpro cpt +application/macwriteii +application/marc +application/mathematica nb +application/mathematica-old +application/msaccess mdb +application/msword doc dot +application/news-message-id +application/news-transmission +application/ocsp-request +application/ocsp-response +application/octet-stream bin +application/oda oda +application/ogg ogg +application/parityfec +application/pdf pdf +application/pgp-encrypted +application/pgp-keys key +application/pgp-signature pgp +application/pics-rules prf +application/pkcs10 +application/pkcs7-mime +application/pkcs7-signature +application/pkix-cert +application/pkix-crl +application/pkixcmp +application/postscript ps ai eps +application/prs.alvestrand.titrax-sheet +application/prs.cww +application/prs.nprend +application/qsig +application/rar rar +application/rdf+xml rdf +application/remote-printing +application/riscos +application/rss+xml rss +application/rtf +application/sdp +application/set-payment +application/set-payment-initiation +application/set-registration +application/set-registration-initiation +application/sgml +application/sgml-open-catalog +application/sieve +application/slate +application/smil smi smil +application/timestamp-query +application/timestamp-reply +application/vemmi +application/whoispp-query +application/whoispp-response +application/wita +application/wordperfect5.1 wp5 +application/x400-bp +application/xhtml+xml xhtml xht +application/xml xml xsl +application/xml-dtd +application/xml-external-parsed-entity +application/zip zip +application/vnd.3M.Post-it-Notes +application/vnd.accpac.simply.aso +application/vnd.accpac.simply.imp +application/vnd.acucobol +application/vnd.aether.imp +application/vnd.anser-web-certificate-issue-initiation +application/vnd.anser-web-funds-transfer-initiation +application/vnd.audiograph +application/vnd.bmi +application/vnd.businessobjects +application/vnd.canon-cpdl +application/vnd.canon-lips +application/vnd.cinderella cdy +application/vnd.claymore +application/vnd.commerce-battelle +application/vnd.commonspace +application/vnd.comsocaller +application/vnd.contact.cmsg +application/vnd.cosmocaller +application/vnd.ctc-posml +application/vnd.cups-postscript +application/vnd.cups-raster +application/vnd.cups-raw +application/vnd.cybank +application/vnd.dna +application/vnd.dpgraph +application/vnd.dxr +application/vnd.ecdis-update +application/vnd.ecowin.chart +application/vnd.ecowin.filerequest +application/vnd.ecowin.fileupdate +application/vnd.ecowin.series +application/vnd.ecowin.seriesrequest +application/vnd.ecowin.seriesupdate +application/vnd.enliven +application/vnd.epson.esf +application/vnd.epson.msf +application/vnd.epson.quickanime +application/vnd.epson.salt +application/vnd.epson.ssf +application/vnd.ericsson.quickcall +application/vnd.eudora.data +application/vnd.fdf +application/vnd.ffsns +application/vnd.flographit +application/vnd.framemaker +application/vnd.fsc.weblaunch +application/vnd.fujitsu.oasys +application/vnd.fujitsu.oasys2 +application/vnd.fujitsu.oasys3 +application/vnd.fujitsu.oasysgp +application/vnd.fujitsu.oasysprs +application/vnd.fujixerox.ddd +application/vnd.fujixerox.docuworks +application/vnd.fujixerox.docuworks.binder +application/vnd.fut-misnet +application/vnd.grafeq +application/vnd.groove-account +application/vnd.groove-identity-message +application/vnd.groove-injector +application/vnd.groove-tool-message +application/vnd.groove-tool-template +application/vnd.groove-vcard +application/vnd.hhe.lesson-player +application/vnd.hp-HPGL +application/vnd.hp-PCL +application/vnd.hp-PCLXL +application/vnd.hp-hpid +application/vnd.hp-hps +application/vnd.httphone +application/vnd.hzn-3d-crossword +application/vnd.ibm.MiniPay +application/vnd.ibm.afplinedata +application/vnd.ibm.modcap +application/vnd.informix-visionary +application/vnd.intercon.formnet +application/vnd.intertrust.digibox +application/vnd.intertrust.nncp +application/vnd.intu.qbo +application/vnd.intu.qfx +application/vnd.irepository.package+xml +application/vnd.is-xpr +application/vnd.japannet-directory-service +application/vnd.japannet-jpnstore-wakeup +application/vnd.japannet-payment-wakeup +application/vnd.japannet-registration +application/vnd.japannet-registration-wakeup +application/vnd.japannet-setstore-wakeup +application/vnd.japannet-verification +application/vnd.japannet-verification-wakeup +application/vnd.koan +application/vnd.lotus-1-2-3 +application/vnd.lotus-approach +application/vnd.lotus-freelance +application/vnd.lotus-notes +application/vnd.lotus-organizer +application/vnd.lotus-screencam +application/vnd.lotus-wordpro +application/vnd.mcd +application/vnd.mediastation.cdkey +application/vnd.meridian-slingshot +application/vnd.mif +application/vnd.minisoft-hp3000-save +application/vnd.mitsubishi.misty-guard.trustweb +application/vnd.mobius.daf +application/vnd.mobius.dis +application/vnd.mobius.msl +application/vnd.mobius.plc +application/vnd.mobius.txf +application/vnd.motorola.flexsuite +application/vnd.motorola.flexsuite.adsi +application/vnd.motorola.flexsuite.fis +application/vnd.motorola.flexsuite.gotap +application/vnd.motorola.flexsuite.kmr +application/vnd.motorola.flexsuite.ttc +application/vnd.motorola.flexsuite.wem +application/vnd.mozilla.xul+xml xul +application/vnd.ms-artgalry +application/vnd.ms-asf +application/vnd.ms-excel xls xlb xlt +application/vnd.ms-lrm +application/vnd.ms-pki.seccat cat +application/vnd.ms-pki.stl stl +application/vnd.ms-powerpoint ppt pps +application/vnd.ms-project +application/vnd.ms-tnef +application/vnd.ms-works +application/vnd.mseq +application/vnd.msign +application/vnd.music-niff +application/vnd.musician +application/vnd.netfpx +application/vnd.noblenet-directory +application/vnd.noblenet-sealer +application/vnd.noblenet-web +application/vnd.novadigm.EDM +application/vnd.novadigm.EDX +application/vnd.novadigm.EXT +application/vnd.oasis.opendocument.chart odc +application/vnd.oasis.opendocument.database odb +application/vnd.oasis.opendocument.formula odf +application/vnd.oasis.opendocument.graphics odg +application/vnd.oasis.opendocument.graphics-template otg +application/vnd.oasis.opendocument.image odi +application/vnd.oasis.opendocument.presentation odp +application/vnd.oasis.opendocument.presentation-template otp +application/vnd.oasis.opendocument.spreadsheet ods +application/vnd.oasis.opendocument.spreadsheet-template ots +application/vnd.oasis.opendocument.text odt +application/vnd.oasis.opendocument.text-master odm +application/vnd.oasis.opendocument.text-template ott +application/vnd.oasis.opendocument.text-web oth +application/vnd.osa.netdeploy +application/vnd.palm +application/vnd.pg.format +application/vnd.pg.osasli +application/vnd.powerbuilder6 +application/vnd.powerbuilder6-s +application/vnd.powerbuilder7 +application/vnd.powerbuilder7-s +application/vnd.powerbuilder75 +application/vnd.powerbuilder75-s +application/vnd.previewsystems.box +application/vnd.publishare-delta-tree +application/vnd.pvi.ptid1 +application/vnd.pwg-xhtml-print+xml +application/vnd.rapid +application/vnd.rim.cod cod +application/vnd.s3sms +application/vnd.seemail +application/vnd.shana.informed.formdata +application/vnd.shana.informed.formtemplate +application/vnd.shana.informed.interchange +application/vnd.shana.informed.package +application/vnd.smaf mmf +application/vnd.sss-cod +application/vnd.sss-dtf +application/vnd.sss-ntf +application/vnd.stardivision.calc sdc +application/vnd.stardivision.draw sda +application/vnd.stardivision.impress sdd sdp +application/vnd.stardivision.math smf +application/vnd.stardivision.writer sdw vor +application/vnd.stardivision.writer-global sgl +application/vnd.street-stream +application/vnd.sun.xml.calc sxc +application/vnd.sun.xml.calc.template stc +application/vnd.sun.xml.draw sxd +application/vnd.sun.xml.draw.template std +application/vnd.sun.xml.impress sxi +application/vnd.sun.xml.impress.template sti +application/vnd.sun.xml.math sxm +application/vnd.sun.xml.writer sxw +application/vnd.sun.xml.writer.global sxg +application/vnd.sun.xml.writer.template stw +application/vnd.svd +application/vnd.swiftview-ics +application/vnd.symbian.install sis +application/vnd.triscape.mxs +application/vnd.trueapp +application/vnd.truedoc +application/vnd.tve-trigger +application/vnd.ufdl +application/vnd.uplanet.alert +application/vnd.uplanet.alert-wbxml +application/vnd.uplanet.bearer-choice +application/vnd.uplanet.bearer-choice-wbxml +application/vnd.uplanet.cacheop +application/vnd.uplanet.cacheop-wbxml +application/vnd.uplanet.channel +application/vnd.uplanet.channel-wbxml +application/vnd.uplanet.list +application/vnd.uplanet.list-wbxml +application/vnd.uplanet.listcmd +application/vnd.uplanet.listcmd-wbxml +application/vnd.uplanet.signal +application/vnd.vcx +application/vnd.vectorworks +application/vnd.vidsoft.vidconference +application/vnd.visio vsd +application/vnd.vividence.scriptfile +application/vnd.wap.sic +application/vnd.wap.slc +application/vnd.wap.wbxml wbxml +application/vnd.wap.wmlc wmlc +application/vnd.wap.wmlscriptc wmlsc +application/vnd.webturbo +application/vnd.wrq-hp3000-labelled +application/vnd.wt.stf +application/vnd.xara +application/vnd.xfdl +application/vnd.yellowriver-custom-menu +application/x-123 wk +application/x-apple-diskimage dmg +application/x-bcpio bcpio +application/x-bittorrent torrent +application/x-cdf cdf +application/x-cdlink vcd +application/x-chess-pgn pgn +application/x-core +application/x-cpio cpio +application/x-csh csh +application/x-debian-package deb +application/x-director dcr dir dxr +application/x-dms dms +application/x-doom wad +application/x-dvi dvi +application/x-executable +application/x-flac flac +application/x-font pfa pfb gsf pcf pcf.Z +application/x-futuresplash spl +application/x-gnumeric gnumeric +application/x-go-sgf sgf +application/x-graphing-calculator gcf +application/x-gtar gtar tgz taz +application/x-hdf hdf +application/x-httpd-php phtml pht php +application/x-httpd-php-source phps +application/x-httpd-php3 php3 +application/x-httpd-php3-preprocessed php3p +application/x-httpd-php4 php4 +application/x-ica ica +application/x-internet-signup ins isp +application/x-iphone iii +application/x-iso9660-image iso +application/x-java-applet +application/x-java-archive jar +application/x-java-bean +application/x-java-jnlp-file jnlp +application/x-java-serialized-object ser +application/x-java-vm class +application/x-javascript js +application/x-jmol jmz +application/x-kchart chrt +application/x-kdelnk +application/x-killustrator kil +application/x-koan skp skd skt skm +application/x-kpresenter kpr kpt +application/x-kspread ksp +application/x-kword kwd kwt +application/x-latex latex +application/x-lha lha +application/x-lzh lzh +application/x-lzx lzx +application/x-maker frm maker frame fm fb book fbdoc +application/x-mif mif +application/x-ms-wmd wmd +application/x-ms-wmz wmz +application/x-msdos-program com exe bat dll +application/x-msi msi +application/x-netcdf nc +application/x-ns-proxy-autoconfig pac +application/x-nwc nwc +application/x-object o +application/x-oz-application oza +application/x-pkcs7-certreqresp p7r +application/x-pkcs7-crl crl +application/x-python-code pyc pyo +application/x-quicktimeplayer qtl +application/x-redhat-package-manager rpm +application/x-rx +application/x-sh sh +application/x-shar shar +application/x-shellscript +application/x-shockwave-flash swf swfl +application/x-stuffit sit +application/x-sv4cpio sv4cpio +application/x-sv4crc sv4crc +application/x-tar tar +application/x-tcl tcl +application/x-tex-gf gf +application/x-tex-pk pk +application/x-texinfo texinfo texi +application/x-trash ~ % bak old sik +application/x-troff t tr roff +application/x-troff-man man +application/x-troff-me me +application/x-troff-ms ms +application/x-ustar ustar +application/x-videolan +application/x-wais-source src +application/x-wingz wz +application/x-x509-ca-cert crt +application/x-xcf xcf +application/x-xfig fig + +audio/32kadpcm +audio/basic au snd +audio/g.722.1 +audio/l16 +audio/midi mid midi kar +audio/mp4a-latm +audio/mpa-robust +audio/mpeg mpga mpega mp2 mp3 m4a +audio/mpegurl m3u +audio/parityfec +audio/prs.sid sid +audio/telephone-event +audio/tone +audio/vnd.cisco.nse +audio/vnd.cns.anp1 +audio/vnd.cns.inf1 +audio/vnd.digital-winds +audio/vnd.everad.plj +audio/vnd.lucent.voice +audio/vnd.nortel.vbk +audio/vnd.nuera.ecelp4800 +audio/vnd.nuera.ecelp7470 +audio/vnd.nuera.ecelp9600 +audio/vnd.octel.sbc +audio/vnd.qcelp +audio/vnd.rhetorex.32kadpcm +audio/vnd.vmx.cvsd +audio/x-aiff aif aiff aifc +audio/x-gsm gsm +audio/x-mpegurl m3u +audio/x-ms-wma wma +audio/x-ms-wax wax +audio/x-pn-realaudio-plugin +audio/x-pn-realaudio ra rm ram +audio/x-realaudio ra +audio/x-scpls pls +audio/x-sd2 sd2 +audio/x-wav wav + +chemical/x-alchemy alc +chemical/x-cache cac cache +chemical/x-cache-csf csf +chemical/x-cactvs-binary cbin cascii ctab +chemical/x-cdx cdx +chemical/x-cerius cer +chemical/x-chem3d c3d +chemical/x-chemdraw chm +chemical/x-cif cif +chemical/x-cmdf cmdf +chemical/x-cml cml +chemical/x-compass cpa +chemical/x-crossfire bsd +chemical/x-csml csml csm +chemical/x-ctx ctx +chemical/x-cxf cxf cef +#chemical/x-daylight-smiles smi +chemical/x-embl-dl-nucleotide emb embl +chemical/x-galactic-spc spc +chemical/x-gamess-input inp gam gamin +chemical/x-gaussian-checkpoint fch fchk +chemical/x-gaussian-cube cub +chemical/x-gaussian-input gau gjc gjf +chemical/x-gaussian-log gal +chemical/x-gcg8-sequence gcg +chemical/x-genbank gen +chemical/x-hin hin +chemical/x-isostar istr ist +chemical/x-jcamp-dx jdx dx +chemical/x-kinemage kin +chemical/x-macmolecule mcm +chemical/x-macromodel-input mmd mmod +chemical/x-mdl-molfile mol +chemical/x-mdl-rdfile rd +chemical/x-mdl-rxnfile rxn +chemical/x-mdl-sdfile sd sdf +chemical/x-mdl-tgf tgf +#chemical/x-mif mif +chemical/x-mmcif mcif +chemical/x-mol2 mol2 +chemical/x-molconn-Z b +chemical/x-mopac-graph gpt +chemical/x-mopac-input mop mopcrt mpc dat zmt +chemical/x-mopac-out moo +chemical/x-mopac-vib mvb +chemical/x-ncbi-asn1 asn +chemical/x-ncbi-asn1-ascii prt ent +chemical/x-ncbi-asn1-binary val aso +chemical/x-ncbi-asn1-spec asn +chemical/x-pdb pdb ent +chemical/x-rosdal ros +chemical/x-swissprot sw +chemical/x-vamas-iso14976 vms +chemical/x-vmd vmd +chemical/x-xtel xtel +chemical/x-xyz xyz + +image/cgm +image/g3fax +image/gif gif +image/ief ief +image/jpeg jpeg jpg jpe +image/naplps +image/pcx pcx +image/png png +image/prs.btif +image/prs.pti +image/svg+xml svg svgz +image/tiff tiff tif +image/vnd.cns.inf2 +image/vnd.djvu djvu djv +image/vnd.dwg +image/vnd.dxf +image/vnd.fastbidsheet +image/vnd.fpx +image/vnd.fst +image/vnd.fujixerox.edmics-mmr +image/vnd.fujixerox.edmics-rlc +image/vnd.mix +image/vnd.net-fpx +image/vnd.svf +image/vnd.wap.wbmp wbmp +image/vnd.xiff +image/x-cmu-raster ras +image/x-coreldraw cdr +image/x-coreldrawpattern pat +image/x-coreldrawtemplate cdt +image/x-corelphotopaint cpt +image/x-icon ico +image/x-jg art +image/x-jng jng +image/x-ms-bmp bmp +image/x-photoshop psd +image/x-portable-anymap pnm +image/x-portable-bitmap pbm +image/x-portable-graymap pgm +image/x-portable-pixmap ppm +image/x-rgb rgb +image/x-xbitmap xbm +image/x-xpixmap xpm +image/x-xwindowdump xwd + +inode/chardevice +inode/blockdevice +inode/directory-locked +inode/directory +inode/fifo +inode/socket + +message/delivery-status +message/disposition-notification +message/external-body +message/http +message/s-http +message/news +message/partial +message/rfc822 + +model/iges igs iges +model/mesh msh mesh silo +model/vnd.dwf +model/vnd.flatland.3dml +model/vnd.gdl +model/vnd.gs-gdl +model/vnd.gtw +model/vnd.mts +model/vnd.vtu +model/vrml wrl vrml + +multipart/alternative +multipart/appledouble +multipart/byteranges +multipart/digest +multipart/encrypted +multipart/form-data +multipart/header-set +multipart/mixed +multipart/parallel +multipart/related +multipart/report +multipart/signed +multipart/voice-message + +text/calendar ics icz +text/comma-separated-values csv +text/css css +text/directory +text/english +text/enriched +text/h323 323 +text/html html htm shtml +text/iuls uls +text/mathml mml +text/parityfec +text/plain asc txt text diff pot +text/prs.lines.tag +text/rfc822-headers +text/richtext rtx +text/rtf rtf +text/scriptlet sct wsc +text/t140 +text/texmacs tm ts +text/tab-separated-values tsv +text/uri-list +text/vnd.abc +text/vnd.curl +text/vnd.DMClientScript +text/vnd.flatland.3dml +text/vnd.fly +text/vnd.fmi.flexstor +text/vnd.in3d.3dml +text/vnd.in3d.spot +text/vnd.IPTC.NewsML +text/vnd.IPTC.NITF +text/vnd.latex-z +text/vnd.motorola.reflex +text/vnd.ms-mediapackage +text/vnd.sun.j2me.app-descriptor jad +text/vnd.wap.si +text/vnd.wap.sl +text/vnd.wap.wml wml +text/vnd.wap.wmlscript wmls +text/x-c++hdr h++ hpp hxx hh +text/x-c++src c++ cpp cxx cc +text/x-chdr h +text/x-crontab +text/x-csh csh +text/x-csrc c +text/x-java java +text/x-makefile +text/x-moc moc +text/x-pascal p pas +text/x-pcs-gcd gcd +text/x-perl pl pm +text/x-python py +text/x-server-parsed-html +text/x-setext etx +text/x-sh sh +text/x-tcl tcl tk +text/x-tex tex ltx sty cls +text/x-vcalendar vcs +text/x-vcard vcf + +video/dl dl +video/fli fli +video/gl gl +video/mpeg mpeg mpg mpe +video/mp4 mp4 +video/quicktime qt mov +video/mp4v-es +video/parityfec +video/pointer +video/vnd.fvt +video/vnd.motorola.video +video/vnd.motorola.videop +video/vnd.mpegurl mxu +video/vnd.mts +video/vnd.nokia.interleaved-multimedia +video/vnd.vivo +video/x-dv dif dv +video/x-la-asf lsf lsx +video/x-mng mng +video/x-ms-asf asf asx +video/x-ms-wm wm +video/x-ms-wmv wmv +video/x-ms-wmx wmx +video/x-ms-wvx wvx +video/x-msvideo avi +video/x-sgi-movie movie + +x-conference/x-cooltalk ice + +x-world/x-vrml vrm vrml wrl 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-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHeadNode.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -31,11 +31,9 @@ fc.read(buff); buff.flip(); - String ret = Charset.forName( + return 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-svn/src/java/org/jboss/shotoku/svn/SvnHistoricNode.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHistoricNode.java 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnHistoricNode.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -6,7 +6,6 @@ import java.util.Date; import java.util.Map; -import org.jboss.shotoku.Directory; import org.jboss.shotoku.exceptions.NodeReadOnly; import org.jboss.shotoku.exceptions.RepositoryException; @@ -71,11 +70,7 @@ return properties.get(name); } - - public Directory getParent() { - throw new RuntimeException("Operation not yet implemented"); - } - + public String getLogMessage() { return logMessage; } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNode.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNode.java 2005-10-09 10:37:33 UTC (rev 1349) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnNode.java 2005-10-09 14:44:15 UTC (rev 1350) @@ -4,15 +4,22 @@ import java.util.ArrayList; import java.util.List; +import javax.activation.MimetypesFileTypeMap; + import org.jboss.shotoku.History; import org.jboss.shotoku.Node; import org.jboss.shotoku.NodeList; import org.jboss.shotoku.exceptions.RepositoryException; public abstract class SvnNode extends AbstractSvnResource implements Node { + private MimetypesFileTypeMap mimeTypes; + public SvnNode(String id, String fullPath, File file, String name, SvnContentManager svnCm) { super(id, fullPath, file, name, svnCm); + + mimeTypes = new MimetypesFileTypeMap( + SvnNode.class.getResourceAsStream("/mime-types.txt")); } public History getHistory() { @@ -34,4 +41,8 @@ return new SvnHistory(new NodeList(nodes)); } + + public String getMimeType() { + return mimeTypes.getContentType(getName()); + } } |
From: <jbo...@li...> - 2005-10-09 10:38:06
|
Author: aron.gombas Date: 2005-10-09 06:37:33 -0400 (Sun, 09 Oct 2005) New Revision: 1349 Added: trunk/labs/kosmos/web-portlet/WEB-INF/lib/servletapi-2.3.jar Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet.properties trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet_hu.properties trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet.properties trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet_hu.properties trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld Log: <age> tag implemented Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet.properties 2005-10-08 19:04:35 UTC (rev 1348) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet.properties 2005-10-09 10:37:33 UTC (rev 1349) @@ -7,7 +7,6 @@ sfRelease.version=Version sfRelease.date=Date sfRelease.age=Age -sfRelease.age.days=days legend.title=Legend legend.new=New release. Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet_hu.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet_hu.properties 2005-10-08 19:04:35 UTC (rev 1348) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sfmonitoringportlet_hu.properties 2005-10-09 10:37:33 UTC (rev 1349) @@ -7,7 +7,6 @@ sfRelease.version=VerzifRelease.date=Dm sfRelease.age=Kor -sfRelease.age.days=nap legend.title=Jelmagyart legend.new= verziModified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet.properties 2005-10-08 19:04:35 UTC (rev 1348) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet.properties 2005-10-09 10:37:33 UTC (rev 1349) @@ -11,7 +11,6 @@ svnrepository.activityDetails=Activity Details svnrepository.latestTouchDate=Latest Touch svnrepository.latestTouchAge=Latest Touch Age -svnrepository.latestTouchAge.days=days svnrepository.dirs=Folders svnrepository.files=Files Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet_hu.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet_hu.properties 2005-10-08 19:04:35 UTC (rev 1348) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svnmonitoringportlet_hu.properties 2005-10-09 10:37:33 UTC (rev 1349) @@ -11,7 +11,6 @@ svnrepository.activityDetails=Aktivs Rletesen svnrepository.latestTouchDate=Utolsdoss svnrepository.latestTouchAge=Kor -svnrepository.latestTouchAge.days=nap svnrepository.dirs=Ktk svnrepository.files=Fok Added: trunk/labs/kosmos/web-portlet/WEB-INF/lib/servletapi-2.3.jar =================================================================== (Binary files differ) Property changes on: trunk/labs/kosmos/web-portlet/WEB-INF/lib/servletapi-2.3.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld 2005-10-08 19:04:35 UTC (rev 1348) +++ trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld 2005-10-09 10:37:33 UTC (rev 1349) @@ -8,22 +8,22 @@ <uri>http://labs.jboss.com/projects/kosmos</uri> <display-name>Kosmos Tag Library</display-name> <description> - TODO + JSP tags for Kosmos Portlets view-tier. </description> <tag> <name>age</name> <tag-class>hu.midori.kosmos.portlet.taglib.AgeTag</tag-class> - <body-content>JSP</body-content> + <body-content>empty</body-content> <display-name>age</display-name> <description> - TODO + Display "age" information, see its javadocs. </description> <attribute> <name>time</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description> - TODO + See its javadocs. </description> </attribute> <example> |
From: <jbo...@li...> - 2005-10-08 19:04:43
|
Author: aron.gombas Date: 2005-10-08 15:04:35 -0400 (Sat, 08 Oct 2005) New Revision: 1348 Added: trunk/labs/kosmos/web-portlet/pages/images/kosmos_logo.png Modified: trunk/labs/kosmos/web-portlet/pages/includes/about.jsp Log: Logo added to HELP mode Added: trunk/labs/kosmos/web-portlet/pages/images/kosmos_logo.png =================================================================== (Binary files differ) Property changes on: trunk/labs/kosmos/web-portlet/pages/images/kosmos_logo.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/labs/kosmos/web-portlet/pages/includes/about.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/includes/about.jsp 2005-10-08 18:58:20 UTC (rev 1347) +++ trunk/labs/kosmos/web-portlet/pages/includes/about.jsp 2005-10-08 19:04:35 UTC (rev 1348) @@ -1,3 +1,4 @@ <p class="portlet-section-footer"> + <a href="http://labs.jboss.com/projects/kosmos"><img src="<%= renderRequest.getContextPath() %>/pages/images/kosmos_logo.png" border="0"/></a><br/> <a href="http://labs.jboss.com/projects/kosmos">@project.name@</a> @project.version@ (@build.date@) </p> \ No newline at end of file |
From: <jbo...@li...> - 2005-10-08 18:58:31
|
Author: aron.gombas Date: 2005-10-08 14:58:20 -0400 (Sat, 08 Oct 2005) New Revision: 1347 Modified: trunk/labs/kosmos/conf-portlet/jboss-portal/kosmos-pages.xml Log: Layout reorganized to a narrower 2-column style Modified: trunk/labs/kosmos/conf-portlet/jboss-portal/kosmos-pages.xml =================================================================== --- trunk/labs/kosmos/conf-portlet/jboss-portal/kosmos-pages.xml 2005-10-08 18:53:19 UTC (rev 1346) +++ trunk/labs/kosmos/conf-portlet/jboss-portal/kosmos-pages.xml 2005-10-08 18:58:20 UTC (rev 1347) @@ -63,16 +63,16 @@ <window-name>ApacheSvnMonitoringPortlet</window-name> <instance-ref>kosmos-portal.ApacheSvnMonitoringPortlet.ApacheSvnMonitoringPortletInstance</instance-ref> <default>false</default> - <region>right</region> - <height>0</height> + <region>left</region> + <height>3</height> </window> <window> <window-name>JBossSvnMonitoringPortlet</window-name> <instance-ref>kosmos-portal.JBossSvnMonitoringPortlet.JBossSvnMonitoringPortletInstance</instance-ref> <default>false</default> - <region>right</region> - <height>1</height> + <region>left</region> + <height>4</height> </window> </page> </pages> |
From: <jbo...@li...> - 2005-10-08 18:53:30
|
Author: aron.gombas Date: 2005-10-08 14:53:19 -0400 (Sat, 08 Oct 2005) New Revision: 1346 Modified: trunk/labs/kosmos/web-portlet/pages/sf_monitoring.jsp trunk/labs/kosmos/web-portlet/pages/svn_monitoring.jsp trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp Log: <age> tag introduced Modified: trunk/labs/kosmos/web-portlet/pages/sf_monitoring.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/sf_monitoring.jsp 2005-10-08 18:52:43 UTC (rev 1345) +++ trunk/labs/kosmos/web-portlet/pages/sf_monitoring.jsp 2005-10-08 18:53:19 UTC (rev 1346) @@ -29,7 +29,7 @@ <display:column titleKey="sfRelease.age" style="white-space:nowrap" sortProperty="age" sortable="true"> <c:if test="${releasesIt.ageInDays < 7}"><span class="portlet-msg-alert"></c:if> <c:if test="${releasesIt.ageInDays > 365}"><span class="portlet-msg-error"></c:if> - <fmt:formatNumber value="${releasesIt.ageInDays}"/> <fmt:message key="sfRelease.age.days"/> + <kosmos:age time="${releasesIt.age}"/> <c:if test="${(releasesIt.ageInDays > 365) || (releasesIt.ageInDays < 7)}"></span></c:if> </display:column> <display:footer> Modified: trunk/labs/kosmos/web-portlet/pages/svn_monitoring.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/svn_monitoring.jsp 2005-10-08 18:52:43 UTC (rev 1345) +++ trunk/labs/kosmos/web-portlet/pages/svn_monitoring.jsp 2005-10-08 18:53:19 UTC (rev 1346) @@ -40,7 +40,7 @@ </display:column> <display:column titleKey="svnrepository.latestTouchAge" style="white-space:nowrap" sortProperty="latestTouchAge" sortable="true"> <c:if test="${repositoriesIt.latestTouchAgeInDays > 7}"><span class="portlet-msg-error"></c:if> - <c:out value="${repositoriesIt.latestTouchAgeInDays}"/> <fmt:message key="svnrepository.latestTouchAge.days"/> + <kosmos:age time="${repositoriesIt.latestTouchAge}"/> <c:if test="${repositoriesIt.latestTouchAgeInDays > 7}"></span></c:if> </display:column> <display:footer> Modified: trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp 2005-10-08 18:52:43 UTC (rev 1345) +++ trunk/labs/kosmos/web-portlet/pages/svn_monitoring_activity_details.jsp 2005-10-08 18:53:19 UTC (rev 1346) @@ -52,7 +52,7 @@ <td><fmt:formatDate value="${commit.date}" pattern="dd/MMM/yy hh:mm"/></td> <td> <c:if test="${commit.ageInDays == 0}"><span class="portlet-msg-alert"></c:if> - <c:out value="${commit.ageInDays}"/> <fmt:message key="svnrepository.latestTouchAge.days"/> + <kosmos:age time="${commit.age}"/> <c:if test="${commit.ageInDays == 0}"></span></c:if> </td> </tr> |
From: <jbo...@li...> - 2005-10-08 18:52:59
|
Author: aron.gombas Date: 2005-10-08 14:52:43 -0400 (Sat, 08 Oct 2005) New Revision: 1345 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp Log: CC: lastBuildAge property added Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java 2005-10-08 18:51:54 UTC (rev 1344) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/model/CcProject.java 2005-10-08 18:52:43 UTC (rev 1345) @@ -86,7 +86,7 @@ public Date getTimestamp() { return timestamp; - } + } public int getModifications() { return modifications; @@ -128,6 +128,11 @@ return ((double)getTestsSucceded())/tests; } + /** Returns its age in milliseconds. */ + public long getLastBuildAge() { + return new Date().getTime() - timestamp.getTime(); + } + @Override public String toString() { return String.format("%s, %s, %s, %s, %d, %s, %d/%d/%d, %s", name, buildLabel, status, timestamp, modifications, buildTime, tests, failures, errors, testsPerCategoryChartUrl); Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties 2005-10-08 18:51:54 UTC (rev 1344) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet.properties 2005-10-08 18:52:43 UTC (rev 1345) @@ -4,12 +4,13 @@ portlet.help=This portlet monitors the continuous integration builds managed by <a href="http://cruisecontrol.sourceforge.net">CruiseControl</a>.<br/>Please see the manual for details about the features and configuration. ccproject.name=Project -ccproject.buildLabel=Build Label +ccproject.lastBuildLabel=Build Label ccproject.modifications=modifications ccproject.status=Status ccproject.successRate=Test Success Rate ccproject.testDetails=Test Details ccproject.timestamp=Timestamp +ccproject.lastBuildAge=Last Build Age ccproject.buildTime=Build Time ccproject.testsSucceded=Tests Succeded Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties 2005-10-08 18:51:54 UTC (rev 1344) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/ccmonitoringportlet_hu.properties 2005-10-08 18:52:43 UTC (rev 1345) @@ -4,12 +4,13 @@ portlet.help=Ez a portlet ki a <a href="http://cruisecontrol.sourceforge.net">CruiseControl</a> al menedzselt <i>continuous integration build</i>-eket.<br/>Olvasd el a kket, ha rletekre vagy kncsi a funkcil vagy a besokkal kapcsolatban. ccproject.name=Projekt -ccproject.buildLabel=Build Ce +ccproject.lastBuildLabel=Build Ce ccproject.modifications=voztat ccproject.status=Stsz ccproject.successRate=Unit Teszt Sikerar ccproject.testDetails=Unit Tesztek Rletesen ccproject.timestamp=Idcproject.lastBuildAge=Build Kora ccproject.buildTime=Build Idtam ccproject.testsSucceded=Sikeres Unit Tesztek Modified: trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp 2005-10-08 18:51:54 UTC (rev 1344) +++ trunk/labs/kosmos/web-portlet/pages/cc_monitoring.jsp 2005-10-08 18:52:43 UTC (rev 1345) @@ -19,7 +19,7 @@ </c:choose> </display:column> <display:column titleKey="ccproject.name" property="name" sortable="true"/> - <display:column titleKey="ccproject.buildLabel" sortProperty="buildLabel" sortable="true"> + <display:column titleKey="ccproject.lastBuildLabel" sortProperty="buildLabel" sortable="true"> <c:out value="${projectsIt.buildLabel}"/> (<c:out value="${projectsIt.modifications}"/> <fmt:message key="ccproject.modifications"/>) </display:column> @@ -65,6 +65,9 @@ <display:column titleKey="ccproject.timestamp" style="white-space:nowrap" sortProperty="timestamp" sortable="true"> <fmt:formatDate value="${projectsIt.timestamp}" pattern="dd/MMM/yy hh:mm"/> </display:column> + <display:column titleKey="ccproject.lastBuildAge" style="white-space:nowrap" sortProperty="lastBuildAge" sortable="true"> + <kosmos:age time="${projectsIt.lastBuildAge}"/> + </display:column> <display:footer> <%@include file="includes/table_footer.jsp"%> </display:footer> |
Author: aron.gombas Date: 2005-10-08 14:51:54 -0400 (Sat, 08 Oct 2005) New Revision: 1344 Added: trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib.properties trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib_hu.properties trunk/labs/kosmos/web-portlet/WEB-INF/lib/jsp-api.jar trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld Modified: trunk/labs/kosmos/build/build.xml trunk/labs/kosmos/web-portlet/WEB-INF/web.xml trunk/labs/kosmos/web-portlet/pages/includes/taglibs.jsp Log: New Kosmos taglib added Modified: trunk/labs/kosmos/build/build.xml =================================================================== --- trunk/labs/kosmos/build/build.xml 2005-10-08 18:41:53 UTC (rev 1343) +++ trunk/labs/kosmos/build/build.xml 2005-10-08 18:51:54 UTC (rev 1344) @@ -79,6 +79,7 @@ <!-- copy other binary files --> <copy todir="${dist-bin.bin.dir}"> <fileset dir="${web.dir}" excludes="**/*.jsp"> + <exclude name="**/jsp-api*.jar"/> <exclude name="**/portlet-api*.jar"/> <exclude name="**/servletapi*.jar"/> <exclude name="**/portlet/**/*.properties"/> Added: trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib.properties 2005-10-08 18:41:53 UTC (rev 1343) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib.properties 2005-10-08 18:51:54 UTC (rev 1344) @@ -0,0 +1,8 @@ +# $Id$ + +age.minutes=minutes +age.hours=hours +age.days=days +age.weeks=weeks +age.months=months +age.years=years Added: trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib_hu.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib_hu.properties 2005-10-08 18:41:53 UTC (rev 1343) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/kosmos-taglib_hu.properties 2005-10-08 18:51:54 UTC (rev 1344) @@ -0,0 +1,8 @@ +# $Id$ + +age.minutes=perc +age.hours=+age.days=nap +age.weeks=h+age.months=h +age.years= Added: trunk/labs/kosmos/web-portlet/WEB-INF/lib/jsp-api.jar =================================================================== (Binary files differ) Property changes on: trunk/labs/kosmos/web-portlet/WEB-INF/lib/jsp-api.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld 2005-10-08 18:41:53 UTC (rev 1343) +++ trunk/labs/kosmos/web-portlet/WEB-INF/tld/kosmos-taglib.tld 2005-10-08 18:51:54 UTC (rev 1344) @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" + "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> +<taglib> + <tlib-version>1.0</tlib-version> + <jsp-version>0.1.1</jsp-version> + <short-name>kosmos-taglib</short-name> + <uri>http://labs.jboss.com/projects/kosmos</uri> + <display-name>Kosmos Tag Library</display-name> + <description> + TODO + </description> + <tag> + <name>age</name> + <tag-class>hu.midori.kosmos.portlet.taglib.AgeTag</tag-class> + <body-content>JSP</body-content> + <display-name>age</display-name> + <description> + TODO + </description> + <attribute> + <name>time</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + <description> + TODO + </description> + </attribute> + <example> + <![CDATA[ +<kosmos:age time="1234"> +]]> + </example> + </tag> +</taglib> Modified: trunk/labs/kosmos/web-portlet/WEB-INF/web.xml =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/web.xml 2005-10-08 18:41:53 UTC (rev 1343) +++ trunk/labs/kosmos/web-portlet/WEB-INF/web.xml 2005-10-08 18:51:54 UTC (rev 1344) @@ -12,6 +12,10 @@ </context-param> <!-- JSP configuration --> + <taglib> + <taglib-uri>http://labs.jboss.com/projects/kosmos</taglib-uri> + <taglib-location>/WEB-INF/tld/kosmos-taglib.tld</taglib-location> + </taglib> <taglib> <taglib-uri>http://displaytag.sf.net/el</taglib-uri> <taglib-location>/WEB-INF/tld/displaytag-el-12.tld</taglib-location> Modified: trunk/labs/kosmos/web-portlet/pages/includes/taglibs.jsp =================================================================== --- trunk/labs/kosmos/web-portlet/pages/includes/taglibs.jsp 2005-10-08 18:41:53 UTC (rev 1343) +++ trunk/labs/kosmos/web-portlet/pages/includes/taglibs.jsp 2005-10-08 18:51:54 UTC (rev 1344) @@ -4,4 +4,5 @@ <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> +<%@ taglib uri="http://labs.jboss.com/projects/kosmos" prefix="kosmos" %> <%@ taglib uri="http://displaytag.sf.net" prefix="display" %> |
From: <jbo...@li...> - 2005-10-08 18:42:02
|
Author: aron.gombas Date: 2005-10-08 14:41:53 -0400 (Sat, 08 Oct 2005) New Revision: 1343 Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/displaytag.properties Log: $Id$ cleared Modified: trunk/labs/kosmos/web-portlet/WEB-INF/classes/displaytag.properties =================================================================== --- trunk/labs/kosmos/web-portlet/WEB-INF/classes/displaytag.properties 2005-10-08 17:22:05 UTC (rev 1342) +++ trunk/labs/kosmos/web-portlet/WEB-INF/classes/displaytag.properties 2005-10-08 18:41:53 UTC (rev 1343) @@ -1,4 +1,4 @@ -# $Id: displaytag.properties 211 2005-02-17 18:35:33Z gombasa $ +# $Id$ css.table= |
From: <jbo...@li...> - 2005-10-08 17:22:13
|
Author: aron.gombas Date: 2005-10-08 13:22:05 -0400 (Sat, 08 Oct 2005) New Revision: 1342 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java Log: Unused import removed Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-10-08 17:21:24 UTC (rev 1341) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/cc/CcServiceImpl.java 2005-10-08 17:22:05 UTC (rev 1342) @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; |
From: <jbo...@li...> - 2005-10-08 17:21:37
|
Author: aron.gombas Date: 2005-10-08 13:21:24 -0400 (Sat, 08 Oct 2005) New Revision: 1341 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java Log: Unused exception removed Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java 2005-10-08 17:20:55 UTC (rev 1340) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/svn/SvnServiceImpl.java 2005-10-08 17:21:24 UTC (rev 1341) @@ -183,7 +183,7 @@ } /** Analyzes the log of the repo and returns its stats. */ - protected SvnRepositoryLogStats analyzeLog(SVNRepository repository) throws SVNException, IOException { + protected SvnRepositoryLogStats analyzeLog(SVNRepository repository) throws SVNException { SvnRepositoryLogStats stats = new SvnRepositoryLogStats(); log.info(String.format("Analyzing log of \"%s\" repository...", repository.getLocation().toString())); |
From: <jbo...@li...> - 2005-10-08 17:21:00
|
Author: aron.gombas Date: 2005-10-08 13:20:55 -0400 (Sat, 08 Oct 2005) New Revision: 1340 Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java Log: Piecharts are 3D Modified: trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java =================================================================== --- trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java 2005-10-08 17:20:33 UTC (rev 1339) +++ trunk/labs/kosmos/src/java/hu/midori/kosmos/server/util/ChartUtils.java 2005-10-08 17:20:55 UTC (rev 1340) @@ -23,6 +23,7 @@ import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.PieSectionLabelGenerator; import org.jfree.chart.plot.PiePlot; +import org.jfree.chart.plot.PiePlot3D; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.PieDataset; @@ -62,8 +63,13 @@ /** Returns the pie-chart generated from the passed data. */ public static JFreeChart generatePieChart(PieDataset dataset) { // generate chart - JFreeChart chart = ChartFactory.createPieChart(null, dataset, false, false, false); + JFreeChart chart = ChartFactory.createPieChart3D(null, dataset, false, false, false); chart.setBackgroundPaint(TRANSPARENT_COLOR); + + // fine-tune plotting + PiePlot3D plot = (PiePlot3D)chart.getPlot(); + plot.setForegroundAlpha(0.85f); + plot.setDepthFactor(0.1f); return chart; } |
From: <jbo...@li...> - 2005-10-08 17:20:54
|
Author: aron.gombas Date: 2005-10-08 13:20:33 -0400 (Sat, 08 Oct 2005) New Revision: 1339 Modified: trunk/labs/kosmos/build/kosmos-project.properties Log: Version no increased Modified: trunk/labs/kosmos/build/kosmos-project.properties =================================================================== --- trunk/labs/kosmos/build/kosmos-project.properties 2005-10-07 23:16:12 UTC (rev 1338) +++ trunk/labs/kosmos/build/kosmos-project.properties 2005-10-08 17:20:33 UTC (rev 1339) @@ -1,3 +1,3 @@ project.name=Kosmos project.name.short=kosmos -project.version=0.1.0 +project.version=0.1.1 |
From: <jbo...@li...> - 2005-10-07 22:09:20
|
Author: szimano Date: 2005-10-07 18:09:06 -0400 (Fri, 07 Oct 2005) New Revision: 1335 Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/EditSessionWatcher.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/EditSessionExpired.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageAlreadyExistsException.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageNotEditedException.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageRenamingException.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/DictionaryTest.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/GetSavePageTest.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.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/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/WikiPageDictionary.java Log: http://jira.jboss.com/jira/browse/JBWIKI-31 renaming functions, watchers for edited pages plus some junits 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-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -15,12 +15,13 @@ import java.util.Map; import javax.portlet.*; + +import org.jboss.wiki.exceptions.EditSessionExpired; import org.jboss.wiki.management.WikiServiceMenagement; import org.apache.commons.fileupload.PortletDiskFileUpload; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.FileItem; - /** * The WikiPortlet. * <p> @@ -50,7 +51,7 @@ public void processAction(ActionRequest rReq, ActionResponse rResp) { Credentials credentials = new JBossPortalCredentials(rReq); - + // wikiContext is null - to get refernece to actual page WikiContext wikiContext = null; @@ -103,7 +104,8 @@ WikiPage pageWithAtt = wikiEngine.getByName(rReq .getParameter("page"), null); - pageWithAtt.addAttachement(serverFile, fileName, credentials.getName()); + pageWithAtt.addAttachement(serverFile, fileName, + credentials.getName()); // at the end delete the temp file serverFile.delete(); @@ -122,22 +124,24 @@ if (rReq.getParameter("page") != null) { StringBuffer sBuf = new StringBuffer(rReq.getParameter("page")); - + if (Character.isLowerCase(sBuf.charAt(0))) { // change first letter to upper if it isn't sBuf.setCharAt(0, Character.toUpperCase(sBuf.charAt(0))); } - + // // Capitalise words in subpages // - + for (int i = 0; i < sBuf.length() - 1; i++) { - if ((sBuf.charAt(i) == '/')&&(Character.isLowerCase(sBuf.charAt(i+1)))) { - sBuf.setCharAt(i+1, Character.toUpperCase(sBuf.charAt(i+1))); + if ((sBuf.charAt(i) == '/') + && (Character.isLowerCase(sBuf.charAt(i + 1)))) { + sBuf.setCharAt(i + 1, Character.toUpperCase(sBuf + .charAt(i + 1))); } } - + rResp.setRenderParameter("page", sBuf.toString()); } @@ -184,18 +188,19 @@ if (edPage != null) { // it may be null if the page isn't saved // yet - edPage.unlock(credentials); + edPage.unlock(credentials, Integer.valueOf((String)rReq.getParameter("editSessionId"))); } // saving, previewing or canceling if (rReq.getParameter("editAction").equals("Save")) { - + // save the page if (edPage == null) { edPage = new WikiPage(rReq.getParameter("editedPage"), - credentials, "", 0, 0, new Date(), wikiEngine, true, true); + credentials, "", 0, 0, new Date(), wikiEngine, + true, true); } // set new content @@ -211,7 +216,15 @@ edPage.setEditDate(new Date()); // save the page - edPage.save(); + try { + edPage.save(Integer.valueOf((String) rReq + .getParameter("editSessionId"))); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (EditSessionExpired e) { + rReq.setAttribute("errorMsg", e.getMessage()); + e.printStackTrace(); + } // and finally remove old page object from memory to force // reloading it @@ -223,9 +236,10 @@ public void doView(RenderRequest rReq, RenderResponse rRes) throws PortletException, java.io.IOException { + + WikiSession wikiSession = new PortletWikiSession(rReq + .getPortletSession()); - WikiSession wikiSession = new PortletWikiSession(rReq.getPortletSession()); - Credentials credentials = new JBossPortalCredentials(rReq); PortletURL wikiURL = rRes.createActionURL(); @@ -248,11 +262,12 @@ rReq.getPortletSession().setAttribute("isSecure", new Boolean(rReq.isSecure())); - /*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);*/ + /* + * 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); + */ String page = "Wiki.jsp"; @@ -276,9 +291,11 @@ && (credentials.isLogedIn())) { page = "Edit.jsp"; showPage = false; - - WikiContext editWikiContext = new WikiContext(credentials.getName(), wikiEngine.getWikiType("edit"), wikiSession); + WikiContext editWikiContext = new WikiContext( + credentials.getName(), wikiEngine.getWikiType("edit"), + wikiSession); + pageToShow = wikiEngine.getByName(wikiPage, editWikiContext); if ((pageToShow != null) && (!pageToShow.isEditable())) { @@ -294,8 +311,9 @@ if ((pageToShow.getLastVersion() > Integer.valueOf(rReq .getParameter("version")))) { - pageToShow = wikiEngine.getByName(wikiPage, editWikiContext, - Integer.valueOf(rReq.getParameter("version"))); + pageToShow = wikiEngine.getByName(wikiPage, + editWikiContext, Integer.valueOf(rReq + .getParameter("version"))); } if (pageToShow.getLastVersion() != pageToShow.getVersion()) { @@ -303,20 +321,26 @@ .getParameter("version"))); } } else { - pageToShow = wikiEngine.getByName(wikiPage, editWikiContext); + pageToShow = wikiEngine + .getByName(wikiPage, editWikiContext); } if (pageToShow == null) { // start editing new page // wikiPage = defaultPage; - pageToShow = new WikiPage(wikiPage,credentials, "", 0, 0, + pageToShow = new WikiPage(wikiPage, credentials, "", 0, 0, new Date(), wikiEngine, true, true); // wikiEngine.getByName(wikiPage, wikiContext); } - Date dateLock = pageToShow.lock(credentials); + int editSessionId = wikiEngine.getEditSessionId(); + Date dateLock = wikiEngine.getByName(wikiPage, null).lock(credentials, editSessionId); + + rReq.setAttribute("editSessionId", String + .valueOf(editSessionId)); + if (dateLock != null) { rReq .setAttribute( @@ -335,20 +359,16 @@ pageToShow = wikiEngine.getByName(wikiPage, null); - /*if (pageToShow == null) { // if somebody entered a link to info - // non-existing page - page = "Wiki.jsp"; - try { - pageToShow = (WikiPage) noSuchPage.clone(); - } catch (CloneNotSupportedException cnse) { - System.out.println(cnse); - } + /* + * if (pageToShow == null) { // if somebody entered a link to info // + * non-existing page page = "Wiki.jsp"; try { pageToShow = + * (WikiPage) noSuchPage.clone(); } catch + * (CloneNotSupportedException cnse) { System.out.println(cnse); } + * + * pageToShow.setName(wikiPage); } else { + */ + rReq.setAttribute("pageAtTop", pageToShow); - pageToShow.setName(wikiPage); - } else {*/ - rReq.setAttribute("pageAtTop", pageToShow); - - } if (showPage) { @@ -361,9 +381,9 @@ // System.out.println("Getting type: " + type); } - wikiContext = new WikiContext(credentials.getName(), - wikiEngine.getWikiType(type), new PortletWikiSession(rReq - .getPortletSession())); + wikiContext = new WikiContext(credentials.getName(), wikiEngine + .getWikiType(type), new PortletWikiSession(rReq + .getPortletSession())); if (rReq.getParameter("version") != null) { // show previous version of page @@ -380,17 +400,15 @@ pageToShow = wikiEngine.getByName(wikiPage, wikiContext); } - /*if (pageToShow == null) { + /* + * if (pageToShow == null) { + * + * try { pageToShow = (WikiPage) noSuchPage.clone(); } catch + * (CloneNotSupportedException cnse) { System.out.println(cnse); } + * + * pageToShow.setName(wikiPage); } + */ - try { - pageToShow = (WikiPage) noSuchPage.clone(); - } catch (CloneNotSupportedException cnse) { - System.out.println(cnse); - } - - pageToShow.setName(wikiPage); - }*/ - } rReq @@ -421,23 +439,8 @@ rReq.setAttribute("isViewable", pageToShow.isViewable()); - rReq - .setAttribute("isAdmin", credentials.isAdmin()); + rReq.setAttribute("isAdmin", credentials.isAdmin()); - // FIXME make this more elegant (ie. plugin) - // pass friendly link - /* - * Properties props = new Properties(); props.load(WikiPlugin.class - * .getResourceAsStream("wikiPlugins.properties")); String href = - * props.getProperty("htmlTranslatorURL") + "wiki/" + - * pageToShow.getName(); String[] replaces = - * props.getProperty("sslRedirectReplaces").split(","); - * - * if (rReq.isSecure() && (replaces.length % 2 == 0)) { // chage normal - * url to secure for (int i = 0; i < replaces.length; i += 2) href = - * href.replaceAll(replaces[i], replaces[i + 1]); } - */ - rReq.setAttribute("friendlyLink", hostURL + "/wiki/" + pageToShow.getName()); rReq.setAttribute("rssLink", hostURL + "/wiki/rss/" Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2005-10-07 22:09:06 UTC (rev 1335) @@ -14,6 +14,7 @@ String lockMsg = (String)request.getAttribute("lockMsg"); String defaultPage = (String)request.getAttribute("defaultPage"); String wikiImagesUrl = (String)request.getAttribute("wikiImagesUrl"); + String editSessionId = (String)request.getAttribute("editSessionId"); if (lockMsg == null) lockMsg = ""; @@ -31,6 +32,7 @@ <textarea name="wikiContent" rows="40" cols="80" style="width:100%;"><%=wikiContent%></textarea> <input type="hidden" name="editedPage" value="<%=wikiPage%>" /> <input type="hidden" name="page" value="<%=wikiPage%>" /> +<input type="hidden" name="editSessionId" value="<%=editSessionId%>" /> <input type="submit" value="Save" name="editAction" /> <!--<input type="submit" value="Preview" name="editAction" />--> <input type="submit" value="Cancel" name="editAction" /> 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-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-10-07 22:09:06 UTC (rev 1335) @@ -115,8 +115,19 @@ } %> +<% + String errorMsg = (String)request.getAttribute("errorMsg"); + + if (errorMsg != null) { + out.println("<table style='border-style: dashed; text-align: center; margin-left: auto; margin-right:auto; border-color: red'>"); + out.println("<tr><td>"+errorMsg+"</td></tr>"); + out.println("</table>"); + } +%> + <table style="width: 100%; margin: 0px; padding: 0px;"> <tr style="width: 100%; margin: 0px; padding: 0px;"> + <td style="width: 100%; margin: 0px; padding: 0px;"><%=wikiContent%><td> </tr> <tr> Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,9 @@ +#JBoss Wiki properties file +# +#(C) 2005 by JBoss Labs Team + +#sessionIdExpireTime (in minutes) - time after edit session expires +sessionIdExpireTime=120 + +#defaultPage - name of the default page +defaultPage=Main Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.xml =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.xml 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/WikiTypes.xml 2005-10-07 22:09:06 UTC (rev 1335) @@ -103,7 +103,7 @@ </wikiType> <wikiType> <name>edit</name> - <class>org.jboss.wiki.plugins.DirectReferenceWikiType</class> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> <plugin> <name>translateUids</name> <class>org.jboss.wiki.plugins.TranslateUids</class> Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/EditSessionWatcher.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/EditSessionWatcher.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/EditSessionWatcher.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,61 @@ +package org.jboss.wiki; + +import java.util.Calendar; +import java.util.Date; + +import org.jboss.wiki.exceptions.PageNotEditedException; + +public class EditSessionWatcher extends Thread { + private Integer editSessionId; + + private Date endTime; + + private WikiPage watchedPage; + + private boolean runs = true; + + public EditSessionWatcher(Integer editSessionId, int sessionIdExpireTime, + WikiPage watchedPage) { + this.editSessionId = editSessionId; + this.watchedPage = watchedPage; + Calendar cal = Calendar.getInstance(); + + cal.setTime(new Date()); + cal.add(Calendar.MINUTE, sessionIdExpireTime); + cal.add(Calendar.SECOND, -1); //so it doesn't wait one minute longer + + endTime = cal.getTime(); + } + + @Override + public void run() { + while (runs) { + System.out.println("Checking watcher for page "+watchedPage.getName()+" with sessionid: "+editSessionId); + Date now = new Date(); + + if (now.after(endTime)) { + System.out.println("Session time exceeded"); + + try { + watchedPage.addExpiredSessionId(editSessionId); + } catch (PageNotEditedException e) { + e.printStackTrace(); + } + stopWatcher(); + } + else { + try { + sleep(60000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + public void stopWatcher() { + System.out.println("Stopping watcher for page: "+watchedPage.getName()+" with sessionid: "+editSessionId); + runs = false; + } + +} 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-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -19,6 +19,9 @@ import java.util.Set; import java.util.TreeSet; +import org.jboss.wiki.exceptions.PageAlreadyExistsException; +import org.jboss.wiki.exceptions.WikiException; + /** * <p> * </p> @@ -138,7 +141,7 @@ //TODO Do not load dictionary YET ! - /*pageDictionaryFile = new File(pathToMedia + "/dictionary.properties"); + pageDictionaryFile = new File(pathToMedia + "/dictionary.properties"); if (!pageDictionaryFile.exists()) { try { @@ -168,7 +171,7 @@ e.printStackTrace(); } - }*/ + } // create pageRevDictionary - to make it work faster @@ -1046,12 +1049,29 @@ : realName; } - public synchronized void rename(String uid, String newName) { + public synchronized void rename(String uid, String newName) throws PageAlreadyExistsException { lock = true; + if (wikiEngine.pageExists(newName)) { + throw new PageAlreadyExistsException("Page with the name you're trying to rename already exists."); + } + pageDictionary.setProperty(uid, newName); pageRevDictionary.setProperty(newName, uid); - + + // add also maping for future name + // find apropriate uid + + int i = 2; + + while ((pageExists(uid+String.valueOf(i)))||(pageDictionary.containsKey(uid+String.valueOf(i)))) { + i++; + } + + // add maping for new (to be done) with name translated to old uid + pageDictionary.setProperty(uid+String.valueOf(i), uid); + pageRevDictionary.setProperty(uid, uid+String.valueOf(i)); + FileOutputStream fos; try { fos = new FileOutputStream(pageDictionaryFile); @@ -1074,4 +1094,12 @@ lock = false; } + + public boolean uidInDictionary(String uid) { + return pageDictionary.contains(uid); + } + + public boolean realNameInDictionary(String realName) { + return pageRevDictionary.contains(realName); + } } Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,75 @@ +package org.jboss.wiki; + +import java.util.Vector; + +import org.jboss.wiki.exceptions.PageAlreadyExistsException; +import org.jboss.wiki.exceptions.PageRenamingException; + +public class RenamePageWatcher extends Thread { + private WikiEngine wikiEngine; + private boolean runs = false; + private Vector<String> uids; + private Vector<String> realNames; + private WikiPageDictionary wikiPageDictionary; + + public RenamePageWatcher (WikiEngine wikiEngine, WikiPageDictionary wikiPageDictionary) { + this.wikiEngine = wikiEngine; + this.wikiPageDictionary = wikiPageDictionary; + uids = new Vector<String>(); + realNames = new Vector<String>(); + } + + public void run () { + runs = true; + + while (runs) { + if (wikiEngine.arePagesEdited()) { + try { + sleep(60000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + else { + try { + wikiEngine.getS().acquire(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + for (int i = 0; i < uids.size(); i++) { + try { + wikiPageDictionary.rename(uids.get(i), realNames.get(i)); + } catch (PageAlreadyExistsException e) { + e.printStackTrace(); + } + } + + wikiEngine.getS().release(); + + runs = false; + } + } + } + + public boolean isRuning() { + return runs; + } + + public void rename(String uid, String realName) throws PageRenamingException{ + if (uids.contains(uid)) { + throw new PageRenamingException("This page is set to be renamed."); + } + else if (realNames.contains(realName)){ + throw new PageRenamingException("Other page is going to be renamed to the same name."); + } + + uids.add(uid); + realNames.add(realName); + } + + public void stopWatcher() { + runs = 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-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -8,6 +8,8 @@ *************************************************/ package org.jboss.wiki; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; import java.util.Comparator; @@ -20,13 +22,18 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.Vector; import java.util.Map.Entry; +import java.util.concurrent.Semaphore; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.jboss.wiki.exceptions.PageNotEditedException; +import org.jboss.wiki.exceptions.WikiException; + import java.io.File; /** @@ -50,6 +57,8 @@ */ public static String defaultPage = "Main"; + public final String propertiesFileName = "JBossWiki.properties"; + private HashMap<String, WikiPage> pages; private HashMap<String, WikiInsidePlugin> insidePlugins; @@ -66,6 +75,16 @@ WikiPage noSuchPage; + private Integer sessionIdExpireTime = 120; + + private int editSessionId = 0; + + private Set<Integer> editedPages; + + private Semaphore s = new Semaphore(1); + + private RenamePageWatcher renamePageWatcher; + /** * <p> * Does ... @@ -126,14 +145,21 @@ * @return * @param wikiContext */ - public WikiPage getByName(String pageName, WikiContext wikiContext) { + public synchronized WikiPage getByName(String pageName, WikiContext wikiContext) { + try { + s.acquire(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + String realPageName = getUid(pageName); WikiPage ret = null; if (!mediaDataSource.preGet()) { System.err.println("Couldn't get page"); + s.release(); return null; } @@ -151,6 +177,7 @@ if ((wikiContext != null) && (ret != null) && (!ret.isViewable()) && (!wikiContext.getUser().equals(adminUserName))) { + s.release(); return new WikiPage(realPageName, null, "I am sorry, but you are not allowed to see this page", 0, 0, new Date(), this, false, false); @@ -162,8 +189,10 @@ if (ret != null) { if (wikiContext != null) { + s.release(); return wikiContext.process(ret); } else { + s.release(); return ret; } } else { @@ -175,16 +204,23 @@ } if (wikiContext != null) { + s.release(); return wikiContext.process(ret); } else { + s.release(); return ret; } } } - public WikiPage getByName(String pageName, WikiContext wikiContext, + public synchronized WikiPage getByName(String pageName, WikiContext wikiContext, int version) { - + try { + s.acquire(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + String realPageName = getUid(pageName); WikiPage ret = null; @@ -203,8 +239,10 @@ if (ret != null) { if (wikiContext != null) { + s.release(); return wikiContext.process(ret); } else { + s.release(); return ret; } } else { @@ -215,6 +253,7 @@ * (wikiContext != null) { return wikiContext.process(ret); } else { * return ret; } */ + s.release(); return null; } } @@ -231,7 +270,8 @@ mediaDataSource = new FileDataSource(); attachementDataSource = new FileDataSource(); wikiPageDictionary = new FileDataSource(); - + editedPages = new HashSet<Integer>(); + mediaDataSource.setWikiEngine(this); pages = new HashMap<String, WikiPage>(); @@ -243,6 +283,27 @@ loadWikiTypes(); loadInsidePlugins(); + + Properties jbosswikiprops = new Properties(); + + try { + jbosswikiprops.load(WikiEngine.class.getResourceAsStream("/" + + propertiesFileName)); + } catch (IOException e) { + e.printStackTrace(); + } + + // load all properties + if (jbosswikiprops.getProperty("defaultPage") != null) { + defaultPage = jbosswikiprops.getProperty("defaultPage"); + } + + if (jbosswikiprops.getProperty("sessionIdExpireTime") != null) { + sessionIdExpireTime = Integer.valueOf(jbosswikiprops + .getProperty("sessionIdExpireTime")); + } + + renamePageWatcher = new RenamePageWatcher(this, wikiPageDictionary); } /** @@ -465,11 +526,11 @@ public Set<String> getPagesFor(String pageName) { Set<String> set = mediaDataSource.getPagesFor(pageName); Set<String> ret = new HashSet<String>(); - + for (String page : set) { ret.add(getRealName(page)); } - + return ret; } @@ -565,11 +626,11 @@ public String getRealName(String uid) { String[] pageTokens = uid.split("/"); - //System.out.println("Looking at page: (realName) "+uid); - + // System.out.println("Looking at page: (realName) "+uid); + if (pageTokens.length > 1) { if (!wikiPageDictionary.getRealName(uid).equals(uid)) { - + // this page is in dictionary return wikiPageDictionary.getRealName(uid); } else { @@ -590,8 +651,8 @@ page = page.substring(1); - //System.out.println("Looking at page: (realName) "+page); - + // System.out.println("Looking at page: (realName) "+page); + if (!wikiPageDictionary.getRealName(page).equals(page)) // this // page // is @@ -610,8 +671,8 @@ public String getUid(String realName) { String[] pageTokens = realName.split("/"); - //System.out.println("Looking at page: (uid) "+realName); - + // System.out.println("Looking at page: (uid) "+realName); + if (pageTokens.length > 1) { if (!wikiPageDictionary.getUid(realName).equals(realName)) { // this page is in dictionary @@ -634,8 +695,8 @@ page = page.substring(1); - //System.out.println("Looking at page: (uid) "+page); - + // System.out.println("Looking at page: (uid) "+page); + if (!wikiPageDictionary.getUid(page).equals(page)) // this // page // is @@ -650,10 +711,28 @@ return wikiPageDictionary.getUid(realName); } - public void rename(String uid, String newName) { - //wikiPageDictionary.rename(uid, newName); + public synchronized void rename(String uid, String newName) throws WikiException { + if (!arePagesEdited()) { + wikiPageDictionary.rename(uid, newName); + } + else { + // some pages are edited now - execute watcher + renamePageWatcher.rename(uid, newName); + + if (!renamePageWatcher.isRuning()) { + renamePageWatcher.start(); + } + } } + + public boolean uidInDictionary(String uid) { + return wikiPageDictionary.uidInDictionary(uid); + } + public boolean realNameInDictionary(String realName) { + return wikiPageDictionary.realNameInDictionary(realName); + } + public boolean deleteAttachment(String pageName, String attName) { return attachementDataSource.deleteAttachment(pageName, attName); } @@ -751,4 +830,32 @@ return attachementDataSource.getAttachmentSize(pageName, attachmentName, version); } + + public synchronized int getEditSessionId() { + return editSessionId++; + } + + public Integer getSessionIdExpireTime() { + return sessionIdExpireTime; + } + + public boolean arePagesEdited() { + return (editedPages.size() > 0); + } + + public void endEditing(Integer editSessionId) throws PageNotEditedException { + if (!editedPages.contains(editSessionId)) { + throw new PageNotEditedException("Page with sessionid "+editSessionId+" is not beeing edited."); + } + + editedPages.remove(editSessionId); + } + + public void addEditing(Integer editSessionId) { + editedPages.add(editSessionId); + } + + public Semaphore getS() { + return s; + } } 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-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -13,8 +13,13 @@ import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Set; +import java.util.Vector; +import org.jboss.wiki.exceptions.EditSessionExpired; +import org.jboss.wiki.exceptions.PageNotEditedException; + /** * <p> * </p> @@ -41,6 +46,10 @@ private String lockUser; private long length = 0; + + private Set<Integer> expiredSessionIds; + + private HashMap<Integer, EditSessionWatcher> editSessionWatchers; /** * <p> @@ -125,6 +134,8 @@ this.wikiEngine = wikiEngine; this.viewable = viewable; this.editable = editable; + expiredSessionIds = new HashSet<Integer>(); + editSessionWatchers = new HashMap<Integer, EditSessionWatcher>(); } /** @@ -146,7 +157,20 @@ * </p> * */ - public synchronized boolean save() { + public synchronized boolean save(Integer editActionId) throws EditSessionExpired{ + System.out.println(editActionId); + for (Integer i : expiredSessionIds) { + System.out.println("exp. session ids: "+i); + } + if (expiredSessionIds.contains(editActionId)) { + throw new EditSessionExpired("Your edit session have expired. Please edit page once again !"); + } + + if (editSessionWatchers.get(editActionId) != null) { + editSessionWatchers.get(editActionId).stopWatcher(); + editSessionWatchers.remove(editActionId); + } + if (!wikiEngine.preSave()) { System.err.println("Couldn't save page"); return false; @@ -315,9 +339,22 @@ return clonedPage; } - public void unlock(Credentials user) { + public void unlock(Credentials user, Integer editSessionId) { System.out.println("UNLOCK: " + user.getName() + " save user: " + lockUser); + + if (editSessionWatchers.get(editSessionId) != null) { + editSessionWatchers.get(editSessionId).stopWatcher(); + editSessionWatchers.remove(editSessionId); + } + + try { + wikiEngine.endEditing(editSessionId); + } catch (PageNotEditedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if ((user.getName()).equals(lockUser)) { System.out.println("Unlocking page"); lockTime = null; @@ -325,7 +362,7 @@ } } - public Date lock(Credentials user) { + public Date lock(Credentials user, Integer editSessionId) { Date now = new Date(); Date expDate = null; Date retDate = lockTime; @@ -354,6 +391,13 @@ System.out.println("LOCK: " + lockUser); retDate = null; } + + // Add EditSessionWatcher + wikiEngine.addEditing(editSessionId); + EditSessionWatcher eSW = new EditSessionWatcher(editSessionId, wikiEngine.getSessionIdExpireTime(), this); + eSW.start(); + + editSessionWatchers.put(editSessionId, eSW); return retDate; } @@ -409,4 +453,9 @@ wikiEngine.setPageMod(getName(), ((isViewable()) ? MediaDataSource.VIEWABLE : 0) + ((isEditable()) ? MediaDataSource.EDITABLE : 0)); } + + public void addExpiredSessionId(Integer id) throws PageNotEditedException { + expiredSessionIds.add(id); + wikiEngine.endEditing(id); + } } Modified: 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-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPageDictionary.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -1,10 +1,16 @@ package org.jboss.wiki; +import org.jboss.wiki.exceptions.PageAlreadyExistsException; + public interface WikiPageDictionary { public String getRealName(String uid); public String getUid(String realName); - public void rename(String uid, String newName); + public void rename(String uid, String newName) throws PageAlreadyExistsException; + + public boolean uidInDictionary(String uid); + + public boolean realNameInDictionary(String realName); } Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/EditSessionExpired.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/EditSessionExpired.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/EditSessionExpired.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,12 @@ +package org.jboss.wiki.exceptions; + +public class EditSessionExpired extends WikiException { + /** + * + */ + private static final long serialVersionUID = 1L; + + public EditSessionExpired(String msg) { + super(msg); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageAlreadyExistsException.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageAlreadyExistsException.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageAlreadyExistsException.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,12 @@ +package org.jboss.wiki.exceptions; + +public class PageAlreadyExistsException extends WikiException { + /** + * + */ + private static final long serialVersionUID = 1L; + + public PageAlreadyExistsException (String msg) { + super(msg); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageNotEditedException.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageNotEditedException.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageNotEditedException.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,12 @@ +package org.jboss.wiki.exceptions; + +public class PageNotEditedException extends WikiException { + /** + * + */ + private static final long serialVersionUID = -110717611960806757L; + + public PageNotEditedException(String msg) { + super(msg); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageRenamingException.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageRenamingException.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/PageRenamingException.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,12 @@ +package org.jboss.wiki.exceptions; + +public class PageRenamingException extends WikiException { + /** + * + */ + private static final long serialVersionUID = 1L; + + public PageRenamingException(String msg) { + super(msg); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,12 @@ +package org.jboss.wiki.exceptions; + +public class WikiException extends Exception { + /** + * + */ + private static final long serialVersionUID = 1L; + + public WikiException (String msg) { + super(msg); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/DirectReferenceWikiType.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,14 @@ +package org.jboss.wiki.plugins; + +import org.jboss.wiki.WikiType; + +public class DirectReferenceWikiType extends WikiType { + + @Override + protected boolean getReference() { + return true; + } + + + +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/ReTranslateUids.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,19 @@ +package org.jboss.wiki.plugins; + +import org.jboss.wiki.WikiEngine; + +import sun.security.krb5.internal.crypto.w; + +public class ReTranslateUids extends TranslateUids { + + //this class only inherties this one method to retranslate all the urls + @Override + protected String changeName(String link) { + return wikiEngine.getUid(link); + } + + public ReTranslateUids (WikiEngine wikiEngine) { + this.wikiEngine = wikiEngine; + } + +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TranslateUids.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,185 @@ +package org.jboss.wiki.plugins; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.Stack; + +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiPlugin; +import org.jboss.wiki.WikiSession; + +public class TranslateUids extends WikiPlugin { + + private Stack<Integer> begins = new Stack<Integer>(); + + private Stack<Integer> ends = new Stack<Integer>(); + + private Stack<String> replaces = new Stack<String>(); + + private String PRE_START = "{{{"; + + private String PRE_END = "}}}"; + + @Override + public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) { + + wikiPage.setPageContent(getNewContent(wikiPage.getContent())); + + return wikiPage; + } + + public String getNewContent(String content) { + StringBuffer sBuf = new StringBuffer(content); + Queue<Integer> queue = new LinkedList<Integer>(); + + Integer lastCommStart = -3; + Integer partBegin = 0; + + // get all PRE starting {{{ + while ((lastCommStart = sBuf.indexOf(PRE_START, lastCommStart+3)) != -1) { + queue.offer(lastCommStart); + } + + lastCommStart = queue.poll(); + + if (lastCommStart == null) { + // there are no comments + parsePart(sBuf, 0, sBuf.length()); + } else { + while (lastCommStart != null) { + + parsePart(sBuf, partBegin, lastCommStart); + + partBegin = sBuf.indexOf(PRE_END, lastCommStart); + + if (partBegin != -1) { + partBegin += PRE_END.length(); + + while ((lastCommStart != null) + && (lastCommStart < partBegin)) { + lastCommStart = queue.poll(); + } + + if (lastCommStart == null) { + lastCommStart = sBuf.length(); + } + } + else { + lastCommStart = null; + } + } + } + + while (begins.size() > 0) { + + int begin; + + sBuf.delete(begin = begins.pop(), ends.pop()); + + sBuf.insert(begin, replaces.pop()); + } + + return sBuf.toString(); + } + + protected void parsePart(StringBuffer sBuf, int start, int end) { + + boolean insideLink = false; + Integer wordBegin = null; + Integer wordEnd = null; + + for (int i = start; i < end; i++) { + // System.out.print(i+":'"+sBuf.charAt(i)+"'"); + + if (sBuf.charAt(i) == '[') { + // if it is false - make it true + insideLink = (insideLink || true); + wordBegin = i + 1; + wordEnd = i + 1; + } else if (sBuf.charAt(i) == '|') { + if (!insideLink) { + wordBegin = null; + wordEnd = null; + } else { + wordBegin = i+1; + } + + } else if (sBuf.charAt(i) == ']') { + + if ((insideLink) && (wordBegin != null) && (wordBegin != i)) { + wordEnd++; + + // System.out.println("End of link: + // "+sBuf.substring(wordBegin, wordEnd)); + + // if word is GT 0 + + if (!HTMLTranslatorParts.isExternalLink(sBuf.substring( + wordBegin, wordEnd))) { + String link = HTMLTranslatorParts.cleanLink(sBuf + .substring(wordBegin, wordEnd)); + + if (link != changeName(link)) { + begins.add(wordBegin); + ends.add(wordEnd); + replaces.add(changeName(link)); + } + } + wordBegin = null; + wordEnd = null; + insideLink = false; + } + } else if (isPartOfWord(sBuf.charAt(i))) { + if (wordBegin == null) { + wordBegin = i; + } + + wordEnd = i; + } else if (Character.isWhitespace(sBuf.charAt(i))) { + if ((!insideLink) && (wordBegin != null)) { + String link = null; + + if ((link = HTMLTranslatorParts.parseCamelCase(sBuf + .substring(wordBegin, wordEnd))) != null) { + if (link != changeName(link)) { + begins.add(wordBegin); + ends.add(wordEnd); + replaces.add(changeName(link)); + } + + wordBegin = null; + wordEnd = null; + } + } else { + wordEnd = i; + } + } else { + if (!insideLink) { + wordBegin = null; + wordEnd = null; + } else { + wordEnd = i; + } + } + } + + if (wordBegin != null) { + // there was not closed link ([...) parse what stayed unparsed + // (maybe some CamelCase links) + parsePart(sBuf, wordBegin, end); + } + } + + protected boolean isPartOfWord(char ch) { + return ((Character.isLetter(ch)) || (Character.isDigit(ch))); + } + + @Override + public void init() { + + } + + protected String changeName(String link) { + return wikiEngine.getRealName(link); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/DictionaryTest.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/DictionaryTest.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/DictionaryTest.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,85 @@ +package org.jboss.wiki.test; + +import org.jboss.wiki.WikiContext; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.exceptions.EditSessionExpired; +import org.jboss.wiki.exceptions.WikiException; +import org.jboss.wiki.plugins.ReTranslateUids; + +public class DictionaryTest extends WikiTest { + + public void testDictionary() throws WikiException{ + + WikiContext wikiContext = new WikiContext(plainUser.getName(), wikiEngine.getWikiType("html"), testWikiSession); + + String page1 = createTestPage(plainUser, "1 page number 1"); + String page2 = createTestPage(plainUser, "2 page number 2"); + + WikiPage wikiPage1 = wikiEngine.getByName(page1, null); + WikiPage wikiPage2 = wikiEngine.getByName(page2, null); + + + // set apropriate content of pages + wikiPage1.setPageContent("1 ["+page2+"]"); + wikiPage1.setLastVersion(wikiPage1.getLastVersion()+1); + wikiPage1.save(wikiEngine.getEditSessionId()); + + wikiPage2.setPageContent("1 ["+page2+"]"); + wikiPage2.setLastVersion(wikiPage2.getLastVersion()+1); + wikiPage2.save(wikiEngine.getEditSessionId()); + + int i = 0; + String newPage2Name = page2 + (i++); + + while(wikiEngine.pageExists(newPage2Name)) { + newPage2Name = page2 + (i++); + } + + System.out.println("New name for page2: "+newPage2Name); + + //wikiEngine.rename(page2, newPage2Name); + + // get page with renamed reference + WikiPage afterRename = wikiEngine.getByName(page1, wikiContext); + + String pageContentRenamed = afterRename.getContent(); + + System.out.println("page1 content: "+pageContentRenamed); + + int link = -1; + + // look if there is any link + if ((link = pageContentRenamed.lastIndexOf(actionURL+"&page=")) == -1) { + fail("There is no link in afterRename page."); + } + else { + // find link in page + String pageName = pageContentRenamed.substring(link + (actionURL+"&page=").length(), pageContentRenamed.indexOf("\"", link + (actionURL+"&page=").length())); + System.out.println("PAGENAME: "+pageName); + + + // check if the link is the one renamed in dictionary + //TODO NOT YET ! + //assertEquals(pageName, newPage2Name); + + } + } + + public void testTranslating () { + WikiContext wikiContext = new WikiContext(plainUser.getName(), wikiEngine.getWikiType("edit"), testWikiSession); + + WikiPage sourceMain = wikiEngine.getByName("Main", null); + + WikiPage main = wikiEngine.getByName("Main", wikiContext); + + System.out.println("Main source:\n"+sourceMain.getContent()); + + ReTranslateUids reTranslateUids = new ReTranslateUids(wikiEngine); + + String reTranslated = reTranslateUids.getNewContent(main.getContent()); + + System.out.println("Retranslated main:\n"+reTranslated); + + //assertEquals(reTranslated, sourceMain.getContent()); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/GetSavePageTest.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/GetSavePageTest.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/GetSavePageTest.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,68 @@ +package org.jboss.wiki.test; + +import java.util.Set; +import java.util.Vector; + +import org.jboss.wiki.WikiContext; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.exceptions.WikiException; + +public class GetSavePageTest extends WikiTest { + + public void testSaveGetPage() throws WikiException { + WikiContext wikiContext = new WikiContext(plainUser.getName(), wikiEngine.getWikiType("html"), testWikiSession); + + String testPageName = createTestPage(plainUser, "This is simple conten [link] \\ Hello !"); + + WikiPage wikiPage2 = wikiEngine.getByName(testPageName, wikiContext); + + String pageContent = wikiPage2.getPageContent(); + + System.out.println(pageContent); + + if (wikiPage2 == null) { + wikiEngine.deletePage(testPageName); + + fail("Couldn't get page: "+testPageName); + } + + } + + public void testGetAllPages() { + WikiContext wikiContext = new WikiContext("test-user", wikiEngine.getWikiType("html"), testWikiSession); + + Set<String> pageNames = wikiEngine.getAllPageNames(); + + for (String pageName : pageNames) { + if (wikiEngine.getByName(pageName, wikiContext) == null) { + fail("Couldn't get page: "+pageName); + } + } + } + + public void testLocking() throws WikiException{ + WikiContext wikiContext = new WikiContext("test-user", wikiEngine.getWikiType("html"), testWikiSession); + + WikiPage wikiPage = wikiEngine.getByName(createTestPage(plainUser, "some page content"), null); + WikiPage wikiPage2 = wikiEngine.getByName(createTestPage(plainUser, "some page content"), null); + + Vector<Integer> sessIds = new Vector<Integer>(); + + //genrate sess ids and lock pages + for (int i = 0; i < 100; i++) { + sessIds.add(wikiEngine.getEditSessionId()); + wikiPage.lock(plainUser, sessIds.get(i)); + } + + //check what wikiEngine thinks + assertEquals(wikiEngine.arePagesEdited(), true); + + //unlock + for (int i = 0; i < 100; i++) { + wikiPage.unlock(plainUser, sessIds.get(i)); + } + + //check what wikiengine thinks + assertEquals(wikiEngine.arePagesEdited(), false); + } +} Added: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java 2005-10-07 21:53:47 UTC (rev 1334) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java 2005-10-07 22:09:06 UTC (rev 1335) @@ -0,0 +1,141 @@ +package org.jboss.wiki.test; + +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; + +import org.jboss.wiki.Credentials; +import org.jboss.wiki.WikiContext; +import org.jboss.wiki.WikiEngine; +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiSession; +import org.jboss.wiki.exceptions.WikiException; + +import junit.framework.TestCase; + +public class WikiTest extends TestCase { + protected WikiEngine wikiEngine; + protected WikiSession testWikiSession; + protected Credentials notLogedIn = new TestCredentials(false, false); + protected Credentials adminUser = new TestCredentials(true, true); + protected Credentials plainUser = new TestCredentials(true, false); + protected Set<String> pages; + + protected String TEST_PAGE_BASE_NAME = "TestPage"; + protected String hostURL = "http://HostURL.pl"; + protected String actionURL = "/Szimano"; + + public WikiTest () { + wikiEngine = new WikiEngine(); + testWikiSession = new TestWikiSession(); + pages = new HashSet<String>(); + + // set session atributes + testWikiSession.setAttribute("credentials", plainUser); + testWikiSession.setAttribute("actionURL", actionURL); + testWikiSession.setAttribute("hostURL", hostURL); + } + + protected String createTestPage(Credentials user, String pageContent) throws WikiException{ + WikiContext wikiContext = new WikiContext(user.getName(), wikiEngine.getWikiType("html"), testWikiSession); + + if (wikiContext == null) { + fail("There is no html wikitype"); + } + + + String testPageName = TEST_PAGE_BASE_NAME; + int i = 0; + + while (wikiEngine.pageExists(testPageName)) { + testPageName = TEST_PAGE_BASE_NAME + (i++); + } + + WikiPage wikiPage = new WikiPage(testPageName, user, pageContent, 1, 1, new Date(), wikiEngine, true, true); + + if (!wikiPage.save(wikiEngine.getEditSessionId())) { + fail("Couldn't save page"); + } + + pages.add(testPageName); + + return testPageName; + } + + protected void deleteAllTestPages() { + boolean ret = true; + + for (String pageName : pages) { + if (!wikiEngine.deletePage(pageName)) { + ret = false; + System.out.println("Couldn't delete "+pageName); + } + } + + if (!ret) { + fail("Problems with deleting pages"); + } + } + + public void testNoTests() { + // do nothing - it's just an abstract class for other tests + } + + @Override + protected void tearDown() throws Exception { + // at the end delete created testpages + + deleteAllTestPages(); + + super.tearDown(); + } +} + +class TestCredentials extends Credentials { + private boolean logedIn = false; + private boolean admin = false; + + public TestCredentials(boolean logedIn, boolean admin) { + this.admin = admin; + this.logedIn = logedIn; + } + + @Override + public String getName() { + return (isLogedIn()) ? ((isAdmin()) ? "admin" : "test-user") : "Unknown"; + } + + @Override + public boolean isLogedIn() { + return logedIn; + } + + @Override + public boolean isAdmin() { + return admin; + } + +} + +class TestWikiSession implements WikiSession { + + HashMap<String, Object> attributes; + + public TestWikiSession() { + attributes = new HashMap<String, Object>(); + } + + public Object getAttribute(String attributeName) { + return attributes.get(attributeName); + } + + public void setAttribute(String attributeName, Object attribute) { + attributes.put(attributeName, attribute); + } + + public void removeAttribute(String attributeName) { + attributes.remove(attributeName); + } + +} \ No newline at end of file |
From: <jbo...@li...> - 2005-10-07 21:53:51
|
Author: dam...@jb... Date: 2005-10-07 17:53:47 -0400 (Fri, 07 Oct 2005) New Revision: 1334 Modified: branches/forge/rysiek/portal-extensions/forge-ear/src/META-INF/application.xml Log: blah Modified: branches/forge/rysiek/portal-extensions/forge-ear/src/META-INF/application.xml =================================================================== --- branches/forge/rysiek/portal-extensions/forge-ear/src/META-INF/application.xml 2005-10-07 21:36:14 UTC (rev 1333) +++ branches/forge/rysiek/portal-extensions/forge-ear/src/META-INF/application.xml 2005-10-07 21:53:47 UTC (rev 1334) @@ -1,4 +1,5 @@ <application> + <display-name>JBoss Labs - forge infrastructure</display-name> <module> <ejb>forge-service.ejb3</ejb> |
From: <jbo...@li...> - 2005-10-07 21:36:29
|
Author: dam...@jb... Date: 2005-10-07 17:36:14 -0400 (Fri, 07 Oct 2005) New Revision: 1333 Modified: branches/forge/rysiek/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java Log: blah. Modified: branches/forge/rysiek/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java =================================================================== --- branches/forge/rysiek/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java 2005-10-07 19:52:50 UTC (rev 1332) +++ branches/forge/rysiek/portal-extensions/primates/src/java/org/jbosslabs/portlets/primates/Primate.java 2005-10-07 21:36:14 UTC (rev 1333) @@ -1,4 +1,5 @@ package org.jbosslabs.portlets.primates; +// asdfasdf import java.util.HashSet; import java.util.Set; |
From: <jbo...@li...> - 2005-10-07 19:52:52
|
Author: dam...@jb... Date: 2005-10-07 15:52:50 -0400 (Fri, 07 Oct 2005) New Revision: 1332 Removed: servicepacks/jems/jboss-4.0.0/ Log: Test. |
From: <jbo...@li...> - 2005-10-07 19:52:12
|
Author: dam...@jb... Date: 2005-10-07 15:52:09 -0400 (Fri, 07 Oct 2005) New Revision: 1331 Removed: servicepacks/jems/jboss-4.0.3/ Log: Test. |
From: <jbo...@li...> - 2005-10-07 19:52:02
|
Author: dam...@jb... Date: 2005-10-07 15:51:59 -0400 (Fri, 07 Oct 2005) New Revision: 1330 Added: scripts/ scripts/doWork.sh scripts/releaseServicePack.sh scripts/startPatch.sh scripts/startServicePack.sh Log: Added a scripts dir and some scripts to demo the use of service packs and automatically generating those service packs from a list of tasks branches. Added: scripts/doWork.sh =================================================================== --- scripts/doWork.sh 2005-10-07 19:48:57 UTC (rev 1329) +++ scripts/doWork.sh 2005-10-07 19:51:59 UTC (rev 1330) @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Here's a script.. to walk you through.. how things would +# work if we did service packs using Subversion. +# +# First, we start a new service pack code line... +# This thing would live over weeks or months: +./startServicePack.sh jboss-4.0.3 https://svn.labs.jboss.com/trunk/jems/jboss-4.0 sp0 +# +# Now, to do work on individual tasks: +./startPatch.sh jboss-4.0.3 sp0 JBAS-5432 +# After the above, the developer would go work on +# their fix. They commmit to the code line URL +# that is recommended by the output of the +# startPatch.sh script. +# +# And more work: +./startPatch.sh jboss-4.0.3 sp0 JBAS-5434 +# And more work: +./startPatch.sh jboss-4.0.3 sp0 JBAS-5436 +# And more work: +./startPatch.sh jboss-4.0.3 sp0 JBAS-5439 +# +# +# Now, the release service pack script will take +# all the patches that have been created for +# the release and service pack specified, +# apply them to the base where service pack code +# line started. This is is a "last man to make the +# modification wins" policy. +./releaseServicePack.sh jboss-4.0.3 sp0 +# +# Now, after than script executes, you will have a +# branch in the repo: +# +# https://svn.labs.jboss.com/servicepacks/jems/jboss-4.0.3/sp0/release +# +# branch contains all the patches applied in order to the base +# branch where the service pack "work" started. + Property changes on: scripts/doWork.sh ___________________________________________________________________ Name: svn:executable + * Added: scripts/releaseServicePack.sh =================================================================== --- scripts/releaseServicePack.sh 2005-10-07 19:48:57 UTC (rev 1329) +++ scripts/releaseServicePack.sh 2005-10-07 19:51:59 UTC (rev 1330) @@ -0,0 +1,65 @@ +#!/bin/bash +export REPO=https://svn.labs.jboss.com +export RELEASES=releases +export BRANCHES=branches +export SERVICEPACKS=servicepacks/jems +#echo "FUTURE USAGE: ./releaseServicePack.sh release_name service_pack_name" +#echo "Example: ./releaseServicePack.sh jboss-4.0.3 sp0" +RELEASE_NAME=$1 +SP_NAME=$2 +function read_release_name { + while [ -z "$RELEASE_NAME" ] + do + echo "" + echo "What is the name of the release for which" + echo "you want to create a service pack?" + echo "" + echo "Example: jboss-4.0.3" + echo "" + echo -n "Name of release? " + read RELEASE_NAME + done + return 0; +} +function read_sp_name { + while [ -z "$SP_NAME" ] + do + echo "" + echo "What is the name of the service pack?" + echo "" + echo "Example: sp0" + echo "" + echo -n "Name of service pack? " + read SP_NAME + done + return 0; +} +# ---------------- +read_release_name +read_sp_name +echo "" +echo "" +echo "Generating Service Pack Release..." +echo " Release Name: $RELEASE_NAME" +echo " Service Pack Name: $SP_NAME" +echo " " +if svn ls $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/release > /dev/null 2>&1; then + echo "Release already exists. Remove it before running this script if that is really what you want to do."; + exit 1; +fi +echo " Creating service pack release branch: $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/release" +START_REVISION=`svn info $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/base | grep "Last Changed Rev: " | awk '{ print $4 }'` +echo " Service Pack base branch starts at revision: $START_REVISION" +svn cp $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/base $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/release -m "SERVICE PACK RELEASE BRANCH: Creating release branch for $SP_NAME." +END_REVISION=`svn info $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/release | grep "Last Changed Rev: " | awk '{ print $4 }'` +echo " Merging all service pack patches between revisions $START_REVISION and $END_REVISION..." +echo " INSERT CHECK OUT OF WORKING COPY OF $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/release AT R$END_REVISION HERE." +for x in `svn ls $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME | grep -v base | grep -v release | sed -e 's/\///'`; do + echo " Applying patch: $x" + echo " FAKE MERGE: svn merge -r $START_REVISION:$END_REVISION $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/$x ." + echo " FAKE CHECKIN: svn ci -m \"MERGED: SERVICE PACK RELEASE: -r $START_REVISION:$END_REVISION $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/$x ." +done +echo " All patches applied." +echo " Service pack release generated. You can build it by " +echo " checking out a working copy of: " +echo " $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/release" Property changes on: scripts/releaseServicePack.sh ___________________________________________________________________ Name: svn:executable + * Added: scripts/startPatch.sh =================================================================== --- scripts/startPatch.sh 2005-10-07 19:48:57 UTC (rev 1329) +++ scripts/startPatch.sh 2005-10-07 19:51:59 UTC (rev 1330) @@ -0,0 +1,65 @@ +#!/bin/bash +export REPO=https://svn.labs.jboss.com +export RELEASES=releases +export BRANCHES=branches +export SERVICEPACKS=servicepacks/jems +#echo "FUTURE USAGE: ./startPatch.sh release_name service_pack_name task_name" +#echo "Example: ./startPatch.sh jboss-4.0.3 sp0 JBAS-5432" +RELEASE_NAME=$1 +SP_NAME=$2 +TASK_NAME=$3 +function read_release_name { + while [ -z "$RELEASE_NAME" ] + do + echo "" + echo "What is the name of the release for which" + echo "you want to create a service pack?" + echo "" + echo "Example: jboss-4.0.3" + echo "" + echo -n "Name of release? " + read RELEASE_NAME + done + return 0; +} +function read_task_name { + while [ -z "$TASK_NAME" ] + do + echo "" + echo "What is the name of the JIRA task you are workign on?" + echo "" + echo "Examples: JBAS-1334" + echo " JBAS-4123" + echo "" + echo -n "JIRA Task? " + read TASK_NAME + done + return 0; +} +function read_sp_name { + while [ -z "$SP_NAME" ] + do + echo "" + echo "What is the name of the service pack?" + echo "" + echo "Example: sp0" + echo "" + echo -n "Name of service pack? " + read SP_NAME + done + return 0; +} +# ---------------- +read_release_name +read_sp_name +read_task_name +echo "" +echo "" +echo " CREATING TASK BRANCH..." +echo "Release Name: $RELEASE_NAME" +echo "Service Pack Name: $SP_NAME" +echo "JIRA Task: $TASK_NAME" +svn cp $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/base $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/$TASK_NAME -m "TASK BRANCH: Created task branch $TASK_NAME for $SP_NAME of $RELEASE_NAME." +echo "Done. You now need to change to your working copy and issue:" +echo "" +echo " svn switch $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/$TASK_NAME" Property changes on: scripts/startPatch.sh ___________________________________________________________________ Name: svn:executable + * Added: scripts/startServicePack.sh =================================================================== --- scripts/startServicePack.sh 2005-10-07 19:48:57 UTC (rev 1329) +++ scripts/startServicePack.sh 2005-10-07 19:51:59 UTC (rev 1330) @@ -0,0 +1,66 @@ +#!/bin/bash --debug +export REPO=https://svn.labs.jboss.com +export RELEASES=releases +export BRANCHES=branches +export SERVICEPACKS=servicepacks/jems +#echo "FUTURE USAGE: ./startServicePack.sh release_name src_url service_pack_name" +#echo "Example: ./startServicePack.sh jboss-4.0.0 https://svn.labs.jboss.com/releases/jboss-4.0.3 sp0" +RELEASE_NAME=$1 +SRC_URL=$2 +SP_NAME=$3 +function read_release_name { + while [ -z "$RELEASE_NAME" ] + do + echo "" + echo "What is the name of the release for which" + echo "you want to create a service pack?" + echo "" + echo "Example: jboss-4.0.3" + echo "" + echo -n "Name of release? " + read RELEASE_NAME + done + return 0; +} +function read_src_url { + while [ -z "$SRC_URL" ] + do + echo "" + echo "What is the url of the release (or branch) for which" + echo "you want to create a service pack?" + echo "" + echo "Examples: http://svn.labs.jboss.com/releases/jboss-4.0.3" + echo " http://svn.labs.jboss.com/branches/jems/adrian/jboss-4.0" + echo "" + echo -n "URL of release? " + read SRC_URL + done + return 0; +} +function read_sp_name { + while [ -z "$SP_NAME" ] + do + echo "" + echo "What is the name of the service pack?" + echo "" + echo "Example: sp0" + echo "" + echo -n "Name of service pack? " + read SP_NAME + done + return 0; +} +# ---------------- +read_release_name +read_src_url +read_sp_name +echo "" +echo "" +echo " CREATING SERVICE PACK BRANCH..." +echo "Release Name: $RELEASE_NAME" +echo "Src URL: $SRC_URL" +echo "Service Pack Name: $SP_NAME" +svn mkdir $REPO/$SERVICEPACKS/$RELEASE_NAME -m "SERVICE PACK CREATE: Creating release branch $RELEASE_NAME, under /$SERVICEPACKS to hold service packs." +svn mkdir $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME -m "SERVICE PACK CREATE: Creating service pack branch, $SP_NAME, for $RELEASE_NAME." +svn cp $SRC_URL $REPO/$SERVICEPACKS/$RELEASE_NAME/$SP_NAME/base -m "SERVICE PACK BRANCH: Created base branch for $SP_NAME of $RELEASE_NAME." +echo "Done." Property changes on: scripts/startServicePack.sh ___________________________________________________________________ Name: svn:executable + * |