Author: adamw Date: 2006-03-24 13:19:38 -0500 (Fri, 24 Mar 2006) New Revision: 3206 Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/JBossLabsPortlet.java trunk/forge/portal-extensions/forge-contributor/project.xml 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-portal-attr/src/java/org/jboss/forge/portal/AttributesFilter.java trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/service/ShotokuServiceImpl.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java Log: http://jira.jboss.com/jira/browse/JBLAB-639 Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/Constants.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -30,7 +30,7 @@ * Attributes passed to portlets from the URL. */ public static final String ATTR_PROJECT = "project"; - public static final String ATTR_REQ_PATH = "path"; + public static final String ATTR_REQ_PATH = "path"; public static final String ATTR_URL = "nav-url"; /* @@ -38,7 +38,7 @@ */ public static final String DEFAULT_PROJECT_PAGE = "info"; public static final String DEFAULT_PORTAL_PAGE = "default"; - public static final String FREEZONE_PAGE = "freezone"; + public static final String FREEZONE_PAGE = "freezone"; /** * Beginning of links to portal pages. 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 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -261,10 +261,11 @@ public static String getRequestParameter(JBossRenderRequest request, String paramName) { String paramValue = request.getParameters().get(paramName, null); - if (paramValue == null) + if (paramValue == null) { paramValue = (String) request.getAttribute(paramName); + } - return paramValue; + return paramValue; } /** Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/JBossLabsPortlet.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/JBossLabsPortlet.java 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/JBossLabsPortlet.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -1,3 +1,24 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2005, JBoss Inc., and individual contributors as indicated + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ package org.jboss.forge.common.portlet; import java.io.IOException; @@ -10,7 +31,6 @@ import org.jboss.portlet.JBossRenderResponse; public abstract class JBossLabsPortlet extends JBossPortlet { - private final static String errorMsg = "403 - not authorized<br />I'm sorry but you need to login to view this page."; protected abstract boolean isAllowed(JBossRenderRequest request, JBossRenderResponse response); @@ -27,11 +47,10 @@ showErrorMessage(response); } } - private void showErrorMessage(JBossRenderResponse response) throws IOException{ response.setContentType("text/html"); response.getWriter().write(errorMsg); } - + } Modified: trunk/forge/portal-extensions/forge-contributor/project.xml =================================================================== --- trunk/forge/portal-extensions/forge-contributor/project.xml 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-contributor/project.xml 2006-03-24 18:19:38 UTC (rev 3206) @@ -32,40 +32,13 @@ <dependency> <groupId>myfaces</groupId> - <artifactId>myfaces</artifactId> - <version>1.0.9rc3</version> + <artifactId>myfaces-all</artifactId> + <version>1.1.1</version> <properties> <war.bundle>true</war.bundle> </properties> </dependency> - <dependency> - <groupId>myfaces</groupId> - <artifactId>myfaces-impl</artifactId> - <version>1.0.9rc3</version> - <properties> - <war.bundle>true</war.bundle> - </properties> - </dependency> - - <dependency> - <groupId>myfaces</groupId> - <artifactId>myfaces-jsf-api</artifactId> - <version>1.0.9rc3</version> - <properties> - <war.bundle>true</war.bundle> - </properties> - </dependency> - - <dependency> - <groupId>myfaces</groupId> - <artifactId>myfaces-extensions</artifactId> - <version>1.0.9rc3</version> - <properties> - <war.bundle>true</war.bundle> - </properties> - </dependency> - <dependency> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> 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 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -36,8 +36,13 @@ import org.jboss.shotoku.aop.Inject; import org.jboss.shotoku.aop.CacheItem; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; +import org.jboss.shotoku.exceptions.ResourceAlreadyExists; +import org.jboss.shotoku.exceptions.NameFormatException; +import org.jboss.shotoku.exceptions.SaveException; import org.jboss.shotoku.tools.Tools; +import javax.portlet.*; + /** * A portlet for a project freezone. * @@ -46,80 +51,222 @@ * @author Ryszard Kozmik */ public class Freezone extends JBossLabsPortlet { - @Inject - private ContentManager cm; + @Inject + private ContentManager cm; @CacheItem private FreezoneConfWatcher conf; private void sendResponseNotFound(JBossRenderResponse response) - throws IOException { - response.setContentType("text/html"); - response.getWriter().println("404 - Not found."); - } + throws IOException { + response.setContentType(Constants.PAGES_MIME_TYPE); + response.getWriter().println("404 - Not found."); + } - public void labsDoView(JBossRenderRequest request, - JBossRenderResponse response) throws IOException { - /* - * Checking if the user has access to the selected project (this isn't - * checked in the url mapper). - */ - String projectId = ProjectsHelper.getSelectedProjectId(request); - if ((projectId != null) && (!ProjectsHelper.getProjects( - ForgeHelper.getPortalName(request)).projectExists( - new RenderRequestPermissionsChecker(request), projectId))) { - sendResponseNotFound(response); - return; - } - - // Getting the path requested by the user. - Object requestedPathObject = request.getAttribute(Constants.ATTR_REQ_PATH); - String requestedPath = null ; - if (requestedPathObject!=null) { - requestedPath = requestedPathObject.toString(); - } - - // It is used if an instance has defined preference in instance descriptor. - Object requestedPathFromPref = request.getPreferences().getValue("page", null ); - - if (requestedPathFromPref != null){ - requestedPath = (String)requestedPathFromPref; - } - - if (requestedPath == null) { - sendResponseNotFound(response); - return; - } + public void labsDoView(JBossRenderRequest request, + JBossRenderResponse response) throws IOException, PortletException { + /* + * Checking if the user has access to the selected project (this isn't + * checked in the url mapper). + */ + String projectId = ProjectsHelper.getSelectedProjectId(request); + String portalName = ForgeHelper.getPortalName(request); - Node requestedNode; - try { - requestedNode = cm.getNode(requestedPath); - } catch (ResourceDoesNotExist e) { - sendResponseNotFound(response); - return; - } + if ((projectId != null) && (!ProjectsHelper.getProjects( + portalName).projectExists( + new RenderRequestPermissionsChecker(request), projectId))) { + sendResponseNotFound(response); + return; + } - response.setContentType(Constants.PAGES_MIME_TYPE); - Tools.transfer(requestedNode.getContentInputStream(), - response.getPortletOutputStream()); - } + // Getting the path requested by the user. + Object requestedPathObject = request.getAttribute(Constants.ATTR_REQ_PATH); - @SuppressWarnings("unchecked") - @Override - protected boolean isAllowed(JBossRenderRequest request, - JBossRenderResponse response) { - Object requestedPathFromPref = request.getPreferences().getValue("page", null ); - Object cmsPathObject =request.getAttribute(Constants.ATTR_REQ_PATH); - String cmsPath = null; - if (cmsPathObject!=null) { - cmsPath= cmsPathObject.toString(); + String requestedPath; + if (requestedPathObject == null) { + requestedPath = request.getParameter(Constants.ATTR_REQ_PATH); + } else { + requestedPath = requestedPathObject.toString(); + } + + // It is used if an instance has defined preference in instance descriptor. + Object requestedPathFromPref = request.getPreferences().getValue("page", null ); + + if (requestedPathFromPref != null){ + requestedPath = (String)requestedPathFromPref; + } + + if (requestedPath == null) { + sendResponseNotFound(response); + return; + } + + Node requestedNode; + try { + requestedNode = cm.getNode(requestedPath); + } catch (ResourceDoesNotExist e) { + sendResponseNotFound(response); + return; + } + + response.setContentType(Constants.PAGES_MIME_TYPE); + if (isAllowedToEdit(portalName, request, response)) { + writeEditLink(portalName, requestedPath, request, response); + Tools.transfer(requestedNode.getContentInputStream(), + response.getWriter()); + } else { + Tools.transfer(requestedNode.getContentInputStream(), + response.getPortletOutputStream()); + } + } + + @SuppressWarnings("unchecked") + @Override + protected boolean isAllowed(JBossRenderRequest request, + JBossRenderResponse response) { + Object requestedPathFromPref = request.getPreferences().getValue("page", null ); + Object cmsPathObject = request.getAttribute(Constants.ATTR_REQ_PATH); + String cmsPath = null; + if (cmsPathObject!=null) { + cmsPath= cmsPathObject.toString(); + } + if (requestedPathFromPref!=null) { + cmsPath=(String)requestedPathFromPref; + } + + List<String> loggedInOnly = conf.get(ForgeHelper.getPortalName(request)); + + return (request.getUser() != null) || (loggedInOnly != null && !loggedInOnly.contains(cmsPath)); + } + + /* + * EDITING PART + */ + + private final static String LOG_MSG = "Freezone save"; + private final static String ERROR_403_MSG = "403 not authorized"; + private final static String EDIT_LINK_JSP = "freezone/edit_link.jsp"; + private final static String EDIT_JSP = "freezone/edit.jsp"; + + private final static String ATTR_RETURN = "return"; + + private final static String PARAM_MESSAGE = "message"; + private final static String MESSAGE_SAVE_ERROR = + "There was an error while saving; please try again or contact the " + + "administrator. Error: "; + + private final static String ACTION_SAVE = "save"; + private final static String ACTION_CANCEL = "cancel"; + private final static String ACTION_PREVIEW = "preview"; + private final static String CONTENT = "content"; + + protected boolean isAllowedToEdit(String portalName, JBossRenderRequest request, + JBossRenderResponse response) { + return true; + } + + protected void writeEditLink(String portalName, String requestedPath, + JBossRenderRequest request, JBossRenderResponse response) + throws IOException, PortletException { + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher( + ForgeHelper.createRepoAccessPath(portalName, EDIT_LINK_JSP)); + + String ret = request.getParameter(ATTR_RETURN); + if (ret == null) { + Object retObj = request.getAttribute(Constants.ATTR_URL); + if (retObj != null) { + ret = retObj.toString(); } - if (requestedPathFromPref!=null) { - cmsPath=(String)requestedPathFromPref; + } + + request.setAttribute(ATTR_RETURN, ret); + request.setAttribute(Constants.ATTR_REQ_PATH, requestedPath); + + rd.include(request, response); + } + + private Node getNodeForPath(String path) throws PortletException { + try { + return cm.getNode(path); + } catch (ResourceDoesNotExist resourceDoesNotExist) { + try { + return cm.getRootDirectory().newNode(path); + } catch (Exception e) { + throw new PortletException(e); } + } + } - List<String> loggedInOnly = conf.get(ForgeHelper.getPortalName(request)); + protected void doEdit(JBossRenderRequest request, + JBossRenderResponse response) + throws PortletException, PortletSecurityException, IOException { + String portalName = ForgeHelper.getPortalName(request); - return (request.getUser() != null) || (loggedInOnly != null && !loggedInOnly.contains(cmsPath)); - } + // We'll be sending text/html for sure. + response.setContentType(Constants.PAGES_MIME_TYPE); + + // First checking if a user is allowed to edit the page. + if (!isAllowedToEdit(portalName, request, response)) { + response.getWriter().write(ERROR_403_MSG); + return; + } + + // Setting the content attribute. + String content = request.getParameter(CONTENT); + if (content == null) { + content = getNodeForPath(request.getParameter( + Constants.ATTR_REQ_PATH)).getContent(); + } + + request.setAttribute(CONTENT, content); + + // Showing the edit page. + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher( + ForgeHelper.createRepoAccessPath(portalName, EDIT_JSP)); + + rd.include(request, response); + } + + public void processAction(ActionRequest request, ActionResponse response) + throws PortletException, PortletSecurityException, IOException { + // Passing necessary parameters. + response.setRenderParameter(Constants.ATTR_REQ_PATH, + request.getParameter(Constants.ATTR_REQ_PATH)); + response.setRenderParameter(ATTR_RETURN, request.getParameter(ATTR_RETURN)); + response.setRenderParameter(ProjectsHelper.PROJECT_URL_PARAM, + request.getParameter(ProjectsHelper.PROJECT_URL_PARAM)); + + if (request.getParameter(ACTION_PREVIEW) != null) { + // Preview. + response.setRenderParameter(CONTENT, request.getParameter(CONTENT)); + + return; + } + + if (request.getParameter(ACTION_SAVE) != null) { + // Save. + Node n = getNodeForPath(request.getParameter(Constants.ATTR_REQ_PATH)); + n.setContent(request.getParameter(CONTENT)); + + try { + n.save(LOG_MSG); + } catch (SaveException e) { + response.setRenderParameter(CONTENT, request.getParameter(CONTENT)); + response.setRenderParameter(PARAM_MESSAGE, MESSAGE_SAVE_ERROR + e.toString()); + + return; + } + + // Save successfull, returning to the normal view. + response.setPortletMode(PortletMode.VIEW); + + return; + } + + if (request.getParameter(ACTION_CANCEL) != null) { + // Canceling the edit - returning to normal view. + + response.setPortletMode(PortletMode.VIEW); + } + } } 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 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-freezone/src/web/WEB-INF/portlet.xml 2006-03-24 18:19:38 UTC (rev 3206) @@ -1,18 +1,19 @@ <?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> +<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> + <portlet-mode>EDIT</portlet-mode> + </supports> + <portlet-info> + <title>Project freezone</title> + </portlet-info> + </portlet> +</portlet-app> 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 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-portal-attr/src/java/org/jboss/forge/portal/AttributesFilter.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletRequest; import org.jboss.forge.common.Constants; +import org.jboss.forge.common.projects.ProjectsHelper; /** * Filter which sets attributes that are necessary for labs portlets to be @@ -39,43 +40,47 @@ * @author Adam Warski (ad...@as...) */ public class AttributesFilter implements Filter { - public void init(FilterConfig config) throws ServletException { - - } - - public void doFilter(ServletRequest request, - ServletResponse response, FilterChain chain) - throws IOException, ServletException { - if (request instanceof HttpServletRequest) { - HttpServletRequest httpRequest = (HttpServletRequest) request; - - // Getting the request parameters. - String noproject = request.getParameter(Constants.PARAM_NO_PROJECT); - - // 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(); - - if (Constants.TRUE_VALUE.equals(noproject)) { - // Removing project from session info. - httpRequest.getSession().removeAttribute(Constants.ATTR_PROJECT); - httpRequest.removeAttribute(Constants.ATTR_PROJECT); - } - - // Putting the full requested url into session for navigation. - String fullUrl = requestURI; - if (httpRequest.getQueryString() != null) { - fullUrl += "?" + httpRequest.getQueryString(); - } - - httpRequest.setAttribute(Constants.ATTR_URL, fullUrl); - } - - chain.doFilter(request, response); - } - - public void destroy() { - - } + public void init(FilterConfig config) throws ServletException { + + } + + public void doFilter(ServletRequest request, + ServletResponse response, FilterChain chain) + throws IOException, ServletException { + if (request instanceof HttpServletRequest) { + HttpServletRequest httpRequest = (HttpServletRequest) request; + + // Getting the request parameters. + String noproject = request.getParameter(Constants.PARAM_NO_PROJECT); + String project = request.getParameter(ProjectsHelper.PROJECT_URL_PARAM); + + // 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(); + + if (Constants.TRUE_VALUE.equals(noproject)) { + // Removing project from session info. + httpRequest.getSession().removeAttribute(Constants.ATTR_PROJECT); + httpRequest.removeAttribute(Constants.ATTR_PROJECT); + } else if ((project != null) && (!"".equals(project))) { + httpRequest.getSession().setAttribute(Constants.ATTR_PROJECT, project); + httpRequest.setAttribute(Constants.ATTR_PROJECT, project); + } + + // Putting the full requested url into session for navigation. + String fullUrl = requestURI; + if (httpRequest.getQueryString() != null) { + fullUrl += "?" + httpRequest.getQueryString(); + } + + httpRequest.setAttribute(Constants.ATTR_URL, fullUrl); + } + + chain.doFilter(request, response); + } + + public void destroy() { + + } } Modified: trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java =================================================================== --- trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -118,9 +118,10 @@ try { synchronized (nodeWatchers) { // Updating nodes. - for (CacheKey ck : nodeWatchers.keySet()) + for (CacheKey ck : nodeWatchers.keySet()) { updateNode(ck); - } + } + } } catch (Exception e) { log.warn(e); e.printStackTrace(); @@ -183,9 +184,13 @@ } catch (InterruptedException e) { e.printStackTrace(); } - - update(); - } + + try { + update(); + } catch (Throwable t) { + // Making sure that an exception won't stop the thread. + } + } } }.start(); } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/service/ShotokuServiceImpl.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/service/ShotokuServiceImpl.java 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/service/ShotokuServiceImpl.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -75,7 +75,11 @@ e.printStackTrace(); } - update(); + try { + update(); + } catch (Throwable t) { + // Making sure that an exception won't stop the thread. + } } } }.start(); @@ -161,7 +165,11 @@ } for (ShotokuCacheItem sci : toUpdate) { - sci.update(); + try { + sci.update(); + } catch (Exception e) { + log.error("Exception while updating a cache item.", e); + } } } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/tools/Tools.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -214,17 +214,37 @@ * @param is * Input stream to read from. * @param os - * Outpu stream to write to. + * Output stream to write to. * @throws IOException */ public static void transfer(InputStream is, OutputStream os) throws IOException { byte[] buffer = new byte[ContentManager.getTransferBufferSize()]; int read; - while ((read = is.read(buffer)) != -1) + while ((read = is.read(buffer)) != -1) { os.write(buffer, 0, read); + } } /** + * Transferes all bytes from the given input stream to the given output + * stream. + * + * @param is + * Input stream to read from. + * @param w + * Printwriter to write to. + * @throws IOException + */ + public static void transfer(InputStream is, PrintWriter w) throws IOException { + char[] buffer = new char[ContentManager.getTransferBufferSize()]; + int read; + InputStreamReader isr = new InputStreamReader(is); + while ((read = isr.read(buffer)) != -1) { + w.write(buffer, 0, read); + } + } + + /** * Checks if the given string represents a true value. For example, "true", * "yes", "TrUe" etc will return true. * Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2006-03-24 17:38:06 UTC (rev 3205) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/service/SvnServiceImpl.java 2006-03-24 18:19:38 UTC (rev 3206) @@ -87,8 +87,12 @@ e.printStackTrace(); } - update(); - } + try { + update(); + } catch (Throwable t) { + // Making sure that an exception won't stop the thread. + } + } } }.start(); } @@ -113,7 +117,11 @@ public void update() { for (SvnRepository repo : repositories.values()) { - repo.update(); + try { + repo.update(); + } catch (Exception e) { + log.error("Exception while updating a repository.", e); + } } } |