From: <jbo...@li...> - 2005-11-09 22:23:18
|
Author: szimano Date: 2005-11-09 17:23:15 -0500 (Wed, 09 Nov 2005) New Revision: 1548 Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java Log: Added node watcher to reparse configuration file when it changes http://jira.jboss.com/jira/browse/JBLAB-396 Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-09 22:10:10 UTC (rev 1547) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-09 22:23:15 UTC (rev 1548) @@ -1,17 +1,72 @@ package org.jboss.forge.projects.freezone; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilderFactory; + import org.jboss.forge.common.service.NodeWatcher; +import org.jboss.logging.Logger; +import org.jboss.shotoku.Node; +import org.jboss.shotoku.aop.NodeInject; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; public class ForgeConfWatcher implements NodeWatcher { + private final static String TAG_NAME = "page"; + + private final static String ATTR_NAME = "pagePath"; + + private long lastNodeModification; + + private Logger log = Logger.getLogger(this.getClass()); + + @NodeInject("/default/freezone/forcelogin.xml") + private Node configuration; + public Object init(String arg0) { - // TODO Auto-generated method stub - return null; + lastNodeModification = configuration.getLastModification(); + + return parseConfiguration(); } public Object nodeUpdate(String arg0, Object arg1) { - // TODO Auto-generated method stub + if (lastNodeModification < configuration.getLastModification()) { + lastNodeModification = configuration.getLastModification(); + return parseConfiguration(); + } return null; } + private List<String> parseConfiguration() { + try { + List<String> loggedInOnly = new ArrayList<String>(); + + // clear the list first + loggedInOnly.clear(); + + Document doc = DocumentBuilderFactory.newInstance() + .newDocumentBuilder().parse( + configuration.getContentInputStream()); + + NodeList nodeList = doc.getElementsByTagName(TAG_NAME); + + for (int i = 0; i < nodeList.getLength(); i++) { + loggedInOnly.add(nodeList.item(i).getAttributes().getNamedItem( + ATTR_NAME).getNodeValue()); + } + + return loggedInOnly; + } catch (Exception e) { + log.error("Unable to parse configuration file", e); + return null; + } + } + + public ForgeConfWatcher() { + + } + } 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-11-09 22:10:10 UTC (rev 1547) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-11-09 22:23:15 UTC (rev 1548) @@ -71,16 +71,11 @@ private final static String PATH_PARAM = "path"; - private final static String TAG_NAME = "page"; - private Logger log = Logger.getLogger(this.getClass()); @Inject private ContentManager cm; - @NodeInject("/default/freezone/forcelogin.xml") - private Node configuration; - private List<String> loggedInOnly; private void sendResponseNotFound(JBossRenderResponse response) @@ -195,7 +190,7 @@ 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. @@ -220,37 +215,27 @@ JBossRenderResponse response) { String cmsPath = request.getParameter(PATH_PARAM); + loggedInOnly = (List<String>) ForgeHelper.getForgeManagement() + .getFromCache("", ForgeConfWatcher.class.getName()); + return (request.getUser() != null) || (!loggedInOnly.contains(cmsPath)); } @Override public void init() throws PortletException { - // TODO read configuration file + // ConDescriptor desc = (ConDescriptor) + // ForgeHelper.getForgeManagement(). + // getFromCache(portalName, ConServer.class.getName()); - loggedInOnly = new ArrayList<String>(); + /* + * desc = (ConDescriptor) ForgeHelper.getForgeManagement(). + * addNodeWatcher(portalName, ConServer.class.getName(), new + * ConNodeWatcher(cm)); + */ - try { - parseConfiguration(); - } catch (Exception e) { - throw new PortletException(e); - } + loggedInOnly = (List<String>) ForgeHelper.getForgeManagement() + .addNodeWatcher("", ForgeConfWatcher.class.getName(), + new ForgeConfWatcher()); } - - private void parseConfiguration() throws ParserConfigurationException, - RepositoryException, SAXException, IOException { - - // clear the list first - loggedInOnly.clear(); - - Document doc = DocumentBuilderFactory.newInstance() - .newDocumentBuilder().parse( - configuration.getContentInputStream()); - - NodeList nodeList = doc.getElementsByTagName(TAG_NAME); - - for (int i = 0; i < nodeList.getLength(); i++) { - loggedInOnly.add(nodeList.item(i).getAttributes().getNamedItem("pagePath").getNodeValue()); - } - } } |