From: <jbo...@li...> - 2005-11-07 11:07:03
|
Author: adamw Date: 2005-11-07 06:06:39 -0500 (Mon, 07 Nov 2005) New Revision: 1523 Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/AndNodeFilter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/BooleanNodeFilter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/MultiBooleanNodeFilter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/NodeFilter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/OrNodeFilter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/PropertyValueParameter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Search.java Removed: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/CustomPropertyValueParameter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Qualificator.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameters.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SimplePropertyValueParameter.java Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/DirectoryIncludeParameter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/HistoryIncludeParameter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/LimitParameter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameter.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SortParameter.java trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java Log: http://jira.jboss.com/jira/browse/JBSHOTOKU-17 : implementation Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -31,7 +31,7 @@ import org.apache.xerces.parsers.DOMParser; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; import org.jboss.shotoku.exceptions.RepositoryException; -import org.jboss.shotoku.search.SearchParameters; +import org.jboss.shotoku.search.Search; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -48,6 +48,12 @@ * <code>id</code> - id of a corresponding repository. */ protected String id; + /** + * <code>engines</code> - a map of initialized velocity engines, + * The key is a string representation of parameters with which an + * engine was initialized. + */ + private Map<String, VelocityEngine> engines; /** * Gets a root directory that is represented by this content manager. @@ -89,7 +95,7 @@ * @return A list of found nodes. * @throws RepositoryException */ - public abstract NodeList search(SearchParameters parameters) + public abstract NodeList search(Search parameters) throws RepositoryException; /** @@ -112,7 +118,7 @@ * in velocity.properties in shotoku-base jar. * * @param addIdPrefix - * true iff id/ prefix properties should be added to the + * True iff id/ prefix properties should be added to the * properties. * @return A velocity engine initialized with default properties. * @throws Exception @@ -138,19 +144,31 @@ public VelocityEngine getVelocityEngine( Map<? extends Object, ? extends Object> overProps, boolean addIdPrefix) throws Exception { - VelocityEngine ve = new VelocityEngine(); - Properties props = new Properties(); - props.load(ContentManager.class - .getResourceAsStream("/velocity.properties")); - props.putAll(overProps); + String representation = ""; + for (Object key : overProps.keySet()) { + representation += key + "=" + overProps.get(key) + ","; + } + + representation += addIdPrefix; + + VelocityEngine ve = engines.get(representation); + if (ve == null) { + ve = new VelocityEngine(); + Properties props = new Properties(); + props.load(ContentManager.class + .getResourceAsStream("/velocity.properties")); + props.putAll(overProps); - if (addIdPrefix) { - props.put("shotoku.resource.loader." + "prefix", prefix); - props.put("shotoku.resource.loader." + "id", id); + if (addIdPrefix) { + props.put("shotoku.resource.loader." + "prefix", prefix); + props.put("shotoku.resource.loader." + "id", id); + } + + ve.init(props); + + engines.put(representation, ve); } - ve.init(props); - return ve; } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/Directory.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -35,7 +35,8 @@ */ public interface Directory extends AbstractResource { /** - * Gets a list of nodes that are contained in this directory. + * Gets a list of nodes that are contained in this directory. The nodes + * are sorted in alphabetic order. * * @return A list of nodes that are contained in this directory. * @throws RepositoryException @@ -43,7 +44,8 @@ public NodeList getNodes() throws RepositoryException; /** - * Gets a list of directories that are contained in this directory. + * Gets a list of directories that are contained in this directory. The + * directories are sorted in alphabetic order. * * @return A list of directories that are contained in this directory. * @throws RepositoryException Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -22,6 +22,10 @@ package org.jboss.shotoku; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; import java.util.List; /** @@ -30,7 +34,7 @@ * * @author adamw */ -public class NodeList { +public class NodeList implements Iterable<Node> { private List<Node> nodeList; public NodeList() { @@ -52,11 +56,55 @@ } /** - * Gets a <code>java.util.List</code> representation of this node list. + * Adds all of the given nodes to this node list. * - * @return A <code>java.util.List</code> representation of this node list. + * @param coll Node collection to add. */ + public void addAll(Collection<Node> coll) { + nodeList.addAll(coll); + } + + /** + * Adds nodes from the given node list to this node list. + * + * @param list Node list to add. + */ + public void addAll(NodeList list) { + nodeList.addAll(list.toList()); + } + + /** + * Sorts this node list with the given comparator. + * @param comparator Comparator to sort with. + */ + public void sort(Comparator<Node> comparator) { + Collections.sort(nodeList, comparator); + } + + /** + * Gets an immutable <code>java.util.List</code> representation of this + * node list. + * + * @return An immutable <code>java.util.List</code> representation of + * this node list. + */ public List<Node> toList() { - return nodeList; + return Collections.unmodifiableList(nodeList); } + + public Iterator<Node> iterator() { + return toList().iterator(); + } + + /** + * Limits the size of this node list. After this operation, + * the size of this node list will be lower or equal to the + * given limit. + * @param limit Node count limit. + */ + public void limit(int limit) { + if (nodeList.size() > limit) { + nodeList = nodeList.subList(0, limit); + } + } } Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/AndNodeFilter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/AndNodeFilter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/AndNodeFilter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -0,0 +1,41 @@ +/* + * 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.shotoku.search; + +import org.jboss.shotoku.Node; + +/** + * + * @author adamw + */ +public class AndNodeFilter extends MultiBooleanNodeFilter { + @Override + public boolean qualifyNode(Node node) { + for (BooleanNodeFilter filter : filters) { + if (!filter.qualifyNode(node)) { + return false; + } + } + + return true; + } +} Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/BooleanNodeFilter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/BooleanNodeFilter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/BooleanNodeFilter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -0,0 +1,42 @@ +/* + * 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.shotoku.search; + +import org.jboss.shotoku.Node; + +/** + * + * @author adamw + */ +public abstract class BooleanNodeFilter extends NodeFilter { + public abstract boolean qualifyNode(Node node); + + @Override + public final Node filterNode(Node node) { + if (qualifyNode(node)) { + return node; + } else { + return null; + } + } + +} Deleted: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/CustomPropertyValueParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/CustomPropertyValueParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/CustomPropertyValueParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -1,36 +0,0 @@ -/* - * 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.shotoku.search; - -/** - * @author adamw - * TODO - */ -public class CustomPropertyValueParameter extends SearchParameter { - //private String propertyName; - //private Qualificator qualificator; - - public CustomPropertyValueParameter(String name, Qualificator qualificator) { - //propertyName = name; - //this.qualificator = qualificator; - } -} Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/DirectoryIncludeParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/DirectoryIncludeParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/DirectoryIncludeParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -21,16 +21,23 @@ */ package org.jboss.shotoku.search; +import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.Directory; +import org.jboss.shotoku.NodeList; /** + * A search parameter which includes to the result all nodes from a directory. * @author adamw - * TODO */ -public class DirectoryIncludeParameter extends SearchParameter { - //private Directory directory; +public class DirectoryIncludeParameter implements SearchParameter { + private Directory directory; public DirectoryIncludeParameter(Directory directory) { - //this.directory = directory; + this.directory = directory; } + + public NodeList transform(NodeList list, ContentManager cm) { + list.addAll(directory.getNodes()); + return list; + } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/HistoryIncludeParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/HistoryIncludeParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/HistoryIncludeParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -21,16 +21,29 @@ */ package org.jboss.shotoku.search; +import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.History; +import org.jboss.shotoku.Node; +import org.jboss.shotoku.NodeList; /** + * A search parameter which includes to the result all nodes from the + * history of a given node. * @author adamw - * TODO */ -public class HistoryIncludeParameter extends SearchParameter { - //private History history; +public class HistoryIncludeParameter implements SearchParameter { + private History history; public HistoryIncludeParameter(History history) { - //this.history = history; + this.history = history; } + + public HistoryIncludeParameter(Node node) { + history = node.getHistory(); + } + + public NodeList transform(NodeList list, ContentManager cm) { + list.addAll(history.getAllRevisions()); + return list; + } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/LimitParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/LimitParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/LimitParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -21,14 +21,23 @@ */ package org.jboss.shotoku.search; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.NodeList; + /** + * A search parameter which truncates the number of nodes in the result + * to the given parameter. * @author adamw - * TODO */ -public class LimitParameter extends SearchParameter { - //private int limit; +public class LimitParameter implements SearchParameter { + private int limit; public LimitParameter(int limit) { - //this.limit = limit; + this.limit = limit; } + + public NodeList transform(NodeList list, ContentManager cm) { + list.limit(limit); + return list; + } } Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/MultiBooleanNodeFilter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/MultiBooleanNodeFilter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/MultiBooleanNodeFilter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -0,0 +1,41 @@ +/* + * 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.shotoku.search; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author adamw + */ +public abstract class MultiBooleanNodeFilter extends BooleanNodeFilter { + protected List<BooleanNodeFilter> filters; + + public MultiBooleanNodeFilter() { + filters = new ArrayList<BooleanNodeFilter>(); + } + + public void addFilter(BooleanNodeFilter filter) { + filters.add(filter); + } +} Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/NodeFilter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/NodeFilter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/NodeFilter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -0,0 +1,50 @@ +/* + * 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.shotoku.search; + +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; +import org.jboss.shotoku.NodeList; + +/** + * + * @author adamw + */ +public abstract class NodeFilter implements SearchParameter { + /** + * Filters the given node. + * @param node Node to filter. + * @return A node that should be included in the final result or null, + * if the nothing is to be included. + */ + public abstract Node filterNode(Node node); + + public NodeList transform(NodeList list, ContentManager cm) { + NodeList newList = new NodeList(); + for (Node n: list) { + Node newNode = filterNode(n); + if (newNode != null) newList.add(newNode); + } + + return newList; + } +} Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/OrNodeFilter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/OrNodeFilter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/OrNodeFilter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -0,0 +1,41 @@ +/* + * 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.shotoku.search; + +import org.jboss.shotoku.Node; + +/** + * + * @author adamw + */ +public class OrNodeFilter extends MultiBooleanNodeFilter { + @Override + public boolean qualifyNode(Node node) { + for (BooleanNodeFilter filter : filters) { + if (filter.qualifyNode(node)) { + return true; + } + } + + return false; + } +} Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/PropertyValueParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/PropertyValueParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/PropertyValueParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -0,0 +1,46 @@ +/* + * 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.shotoku.search; + +import org.jboss.shotoku.Node; + +/** + * @author adamw + */ +public class PropertyValueParameter extends BooleanNodeFilter { + private String propertyName; + private String propertyValue; + + public PropertyValueParameter(String name, String value) { + propertyName = name; + propertyValue = value; + } + + @Override + public boolean qualifyNode(Node node) { + String nodePropVal = node.getProperty(propertyName); + if (propertyValue == null) { + return nodePropVal == null; + } else + return propertyValue.equals(nodePropVal); + } +} Deleted: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Qualificator.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Qualificator.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Qualificator.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -1,26 +0,0 @@ -/* - * 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.shotoku.search; - -public interface Qualificator { - public boolean qualify(String propertyValue); -} Added: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Search.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Search.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/Search.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -0,0 +1,58 @@ +/* + * 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.shotoku.search; + +import java.util.ArrayList; +import java.util.List; + +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.NodeList; + +/** + * A class representing a search or a sub-search. + * @author adamw + */ +public class Search implements SearchParameter { + private List<SearchParameter> searchParametersStack; + + public Search() { + searchParametersStack = new ArrayList<SearchParameter>(); + } + + public void add(SearchParameter parameter) { + searchParametersStack.add(parameter); + } + + public NodeList perform(ContentManager cm) { + NodeList list = new NodeList(); + for (SearchParameter parameter : searchParametersStack) { + list = parameter.transform(list, cm); + } + + return list; + } + + public NodeList transform(NodeList list, ContentManager cm) { + list.addAll(perform(cm)); + return list; + } +} Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -21,10 +21,12 @@ */ package org.jboss.shotoku.search; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.NodeList; + /** * @author adamw - * TODO */ -public class SearchParameter { - +public interface SearchParameter { + public NodeList transform(NodeList list, ContentManager cm); } Deleted: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameters.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameters.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SearchParameters.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -1,38 +0,0 @@ -/* - * 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.shotoku.search; - -/** - * @author adamw - * TODO - */ -public class SearchParameters { - //private List<SearchParameter> searchParametersStack; - - public SearchParameters() { - //searchParametersStack = new ArrayList<SearchParameter>(); - } - - public void add(SearchParameter parameter) { - - } -} Deleted: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SimplePropertyValueParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SimplePropertyValueParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SimplePropertyValueParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -1,36 +0,0 @@ -/* - * 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.shotoku.search; - -/** - * @author adamw - * TODO - */ -public class SimplePropertyValueParameter extends SearchParameter { - //private String propertyName; - //private String propertyValue; - - public SimplePropertyValueParameter(String name, String value) { - //propertyName = name; - //propertyValue = value; - } -} Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SortParameter.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SortParameter.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/search/SortParameter.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -23,16 +23,24 @@ import java.util.Comparator; +import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; +import org.jboss.shotoku.NodeList; + /** + * A search parameter which sorts the result node list with the given + * comparator. * @author adamw - * TODO */ -public class SortParameter extends SearchParameter { - //private String propertyName; - //private Comparator comparator; +public class SortParameter implements SearchParameter { + private Comparator<Node> comparator; - public SortParameter(Comparator comparator, String name) { - //this.comparator = comparator; - //propertyName = name; + public SortParameter(Comparator<Node> comparator) { + this.comparator = comparator; } + + public NodeList transform(NodeList list, ContentManager cm) { + list.sort(comparator); + return list; + } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-svn/src/java/org/jboss/shotoku/svn/SvnContentManager.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -29,7 +29,7 @@ import org.jboss.shotoku.NodeList; import org.jboss.shotoku.exceptions.RepositoryException; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; -import org.jboss.shotoku.search.SearchParameters; +import org.jboss.shotoku.search.Search; /** * @author adamw @@ -145,7 +145,7 @@ } @Override - public NodeList search(SearchParameters parameters) { - throw new RuntimeException("Operation not yet implemented"); + public NodeList search(Search search) { + return search.perform(this); } } Modified: trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java 2005-11-07 09:28:06 UTC (rev 1522) +++ trunk/forge/portal-extensions/shotoku/shotoku-test/src/java/org/jboss/shotoku/test/servlet/ShotokuServlet.java 2005-11-07 11:06:39 UTC (rev 1523) @@ -1,7 +1,11 @@ package org.jboss.shotoku.test.servlet; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.PrintWriter; +import java.util.Calendar; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -9,12 +13,23 @@ import javax.servlet.http.HttpServletResponse; import org.jboss.shotoku.ContentManager; +import org.jboss.shotoku.Node; import org.jboss.shotoku.aop.Inject; public class ShotokuServlet extends HttpServlet { @Inject(prefix="shotoku-test") ContentManager test; + + @Inject(prefix="wiki-content") + ContentManager wikiCm; + private void readInputStream(InputStream is) throws IOException { + int b; + StringBuffer sb = new StringBuffer(); + while ((b = is.read()) != -1) + sb.append(b); + } + @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { @@ -28,6 +43,36 @@ //NodeList nl = new NodeList(); //pw.write(nl.getFeed("default/feeds/templates/hello-world.vm", null, new HashMap<String, Object>()).toString()); + + int processed; + + pw.write("Shotoku file read: <br />"); + long start = Calendar.getInstance().getTimeInMillis(); + processed = 0; + for (Node n : wikiCm.getRootDirectory().getNodes().toList()) { + readInputStream(wikiCm.getNode(n.getName()).getContentInputStream()); + processed++; + } + long stop = Calendar.getInstance().getTimeInMillis(); + pw.write("Time: " + (stop-start) + ", processed: " + processed); + pw.write("<br />"); + pw.write("<br />"); + + String pathPrefix = "/home/adamw/portal-content/wiki-content/"; + + pw.write("Normal file read: <br />"); + start = Calendar.getInstance().getTimeInMillis(); + String[] files = new File(pathPrefix).list(); + processed = 0; + for (String file : files) { + File f = new File(pathPrefix + file); + if (f.isFile()) { + readInputStream(new FileInputStream(f)); + processed++; + } + } + stop = Calendar.getInstance().getTimeInMillis(); + pw.write("Time: " + (stop-start) + ", processed: " + processed); } } |