You are viewing a plain text version of this content. The canonical link for it is here.
Posted to droids-commits@incubator.apache.org by to...@apache.org on 2012/12/18 08:48:00 UTC

svn commit: r1423339 [3/5] - in /incubator/droids/branches/0.2.x-cleanup: droids-crawler/ droids-crawler/src/main/java/org/apache/droids/crawler/ droids-crawler/src/main/java/org/apache/droids/protocol/http/ droids-crawler/src/test/java/org/apache/droi...

Modified: incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/NoRobotException.java
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/NoRobotException.java?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/NoRobotException.java (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/NoRobotException.java Tue Dec 18 08:47:39 2012
@@ -27,19 +27,19 @@
 package org.apache.droids.norobots;
 
 /**
- * Application exception for anything that might go wrong 
- * in the checking of a robots.txt file. It does not 
+ * Application exception for anything that might go wrong
+ * in the checking of a robots.txt file. It does not
  * wrap an Exception to maintain support for older JDKs.
  */
 public class NoRobotException extends Exception {
 
-  private static final long serialVersionUID = 7185905140738392746L;
+    private static final long serialVersionUID = 7185905140738392746L;
 
-public NoRobotException(String message) {
-    super(message);
-  }
+    public NoRobotException(String message) {
+        super(message);
+    }
 
-  public NoRobotException(String message, Throwable t) {
-    super(message + " :::: " + t.getMessage());
-  }
+    public NoRobotException(String message, Throwable t) {
+        super(message + " :::: " + t.getMessage());
+    }
 }

Modified: incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/Rule.java
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/Rule.java?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/Rule.java (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/Rule.java Tue Dec 18 08:47:39 2012
@@ -30,10 +30,10 @@ package org.apache.droids.norobots;
  * A robots.txt rule. Is a particular path allowed?
  */
 public interface Rule {
-  /**
-   * Boolean.TRUE means it is allowed. 
-   * Boolean.FALSE means it is not allowed.
-   * null means that this rule is not applicable.
-   */
-  Boolean isAllowed(String path);
+    /**
+     * Boolean.TRUE means it is allowed.
+     * Boolean.FALSE means it is not allowed.
+     * null means that this rule is not applicable.
+     */
+    Boolean isAllowed(String path);
 }

Modified: incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/RulesEngine.java
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/RulesEngine.java?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/RulesEngine.java (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/RulesEngine.java Tue Dec 18 08:47:39 2012
@@ -30,51 +30,51 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
- * Contains a series of Rules. It then runs a path against these 
- * to decide if it is allowed or not. 
+ * Contains a series of Rules. It then runs a path against these
+ * to decide if it is allowed or not.
  */
 class RulesEngine {
 
-  private List<Rule> rules;
+    private List<Rule> rules;
 
-  public RulesEngine() {
-    this.rules = new ArrayList<Rule>();
-  }
-
-  public void allowPath(String path) {
-    add( new AllowedRule(path) );
-  }
-
-  public void disallowPath(String path) {
-    add( new DisallowedRule(path) );
-  }
-
-  public void add(Rule rule) {
-    this.rules.add(rule);
-  }
-
-  /**
-   * Run each Rule in series on the path. 
-   * If a Rule returns a Boolean, return that.
-   * When no more rules are left, return null to indicate there were 
-   * no rules for this path.. 
-   */
-  public Boolean isAllowed(String path) {
-    for( Rule rule : rules ) {
-      Boolean test = rule.isAllowed(path);
-      if(test != null) {
-        return test;
-      }
-    }
-    return null;
-  }
-
-  public boolean isEmpty() {
-    return this.rules.isEmpty();
-  }
-
-  @Override
-  public String toString() {
-    return "RulesEngine: " + this.rules;
-  }
+    public RulesEngine() {
+        this.rules = new ArrayList<Rule>();
+    }
+
+    public void allowPath(String path) {
+        add(new AllowedRule(path));
+    }
+
+    public void disallowPath(String path) {
+        add(new DisallowedRule(path));
+    }
+
+    public void add(Rule rule) {
+        this.rules.add(rule);
+    }
+
+    /**
+     * Run each Rule in series on the path.
+     * If a Rule returns a Boolean, return that.
+     * When no more rules are left, return null to indicate there were
+     * no rules for this path..
+     */
+    public Boolean isAllowed(String path) {
+        for (Rule rule : rules) {
+            Boolean test = rule.isAllowed(path);
+            if (test != null) {
+                return test;
+            }
+        }
+        return null;
+    }
+
+    public boolean isEmpty() {
+        return this.rules.isEmpty();
+    }
+
+    @Override
+    public String toString() {
+        return "RulesEngine: " + this.rules;
+    }
 }

Modified: incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/SimpleContentLoader.java
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/SimpleContentLoader.java?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/SimpleContentLoader.java (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/SimpleContentLoader.java Tue Dec 18 08:47:39 2012
@@ -35,26 +35,24 @@ import java.net.URLConnection;
 /**
  * A simple implementation of {@link ContentLoader} based on {@link URLConnection}.
  */
-public class SimpleContentLoader implements ContentLoader
-{
+public class SimpleContentLoader implements ContentLoader {
 
-  @Override
-  public boolean exists(URI uri) throws IOException
-  {
-    URL url = uri.toURL();
-    try {
-      URLConnection conn = url.openConnection();
-      return conn != null;
-    } catch (IOException ex) {
-      return false;
+    @Override
+    public boolean exists(URI uri) throws IOException {
+        URL url = uri.toURL();
+        try {
+            URLConnection conn = url.openConnection();
+            return conn != null;
+        } catch (IOException ex) {
+            return false;
+        }
     }
-  }
 
-  @Override
-  public InputStream load(URI uri) throws IOException {
-    URL url = uri.toURL();
-    URLConnection conn = url.openConnection();
-    return conn.getInputStream();
-  }
+    @Override
+    public InputStream load(URI uri) throws IOException {
+        URL url = uri.toURL();
+        URLConnection conn = url.openConnection();
+        return conn.getInputStream();
+    }
 
 }

Modified: incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/package.html
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/package.html?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/package.html (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/main/java/org/apache/droids/norobots/package.html Tue Dec 18 08:47:39 2012
@@ -17,31 +17,31 @@
 <html>
 <body>
 
-  <h3>Using norobots-rfc</h3>
-   <ol>
-   <li>Import the class
-   <code>
-       import org.apache.http.norobots.NoRobotClient;
-   </code>
-   </li>
-   <li>Create an instance for your user-agent
-   <code>
-       NoRobotClient nrc = NoRobotClient("googlebot");
-   </code>
-   </li>
-   <li>Parse a robots.txt at a site
-   <code>
-       nrc.parse( new URL( "http://www.apache.org/" ) );
-   </code>
-   </li>
-   <li>Ask if a url is allowed
-   <code>
-       boolean test = nrc.isUrlAllowed( new URL( "http://www.apache.org/index.html" ) );
-   </code>
-   </li>
-   </ol>
+<h3>Using norobots-rfc</h3>
+<ol>
+    <li>Import the class
+        <code>
+            import org.apache.http.norobots.NoRobotClient;
+        </code>
+    </li>
+    <li>Create an instance for your user-agent
+        <code>
+            NoRobotClient nrc = NoRobotClient("googlebot");
+        </code>
+    </li>
+    <li>Parse a robots.txt at a site
+        <code>
+            nrc.parse( new URL( "http://www.apache.org/" ) );
+        </code>
+    </li>
+    <li>Ask if a url is allowed
+        <code>
+            boolean test = nrc.isUrlAllowed( new URL( "http://www.apache.org/index.html" ) );
+        </code>
+    </li>
+</ol>
 
- </body>
+</body>
 </document>
 </body>
 </html> 

Modified: incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/site/site.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/site/site.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/site/site.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/site/site.xml Tue Dec 18 08:47:39 2012
@@ -16,14 +16,14 @@
  limitations under the License.
 -->
 <project xmlns="http://maven.apache.org/DECORATION/1.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
-  <body>
-    <menu ref="parent" />
-    
-    <menu name="JavaDocs"> 
-      <item name="JavaDocs" href="apidocs/index.html"/>
-      <item name="Test JavaDocs" href="testapidocs/index.html"/>
-    </menu>
-  </body>
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+    <body>
+        <menu ref="parent"/>
+
+        <menu name="JavaDocs">
+            <item name="JavaDocs" href="apidocs/index.html"/>
+            <item name="Test JavaDocs" href="testapidocs/index.html"/>
+        </menu>
+    </body>
 </project>
\ No newline at end of file

Modified: incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/test/java/org/apache/droids/norobots/TestNorobotsClient.java
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/test/java/org/apache/droids/norobots/TestNorobotsClient.java?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/test/java/org/apache/droids/norobots/TestNorobotsClient.java (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-norobots/src/test/java/org/apache/droids/norobots/TestNorobotsClient.java Tue Dec 18 08:47:39 2012
@@ -28,258 +28,257 @@ import junit.framework.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-public class TestNorobotsClient
-{
+public class TestNorobotsClient {
+
+    private static URI BASE_URI;
+
+    @BeforeClass
+    public static void setupBaseURL() throws URISyntaxException {
+        ClassLoader cl = TestNorobotsClient.class.getClassLoader();
+        BASE_URI = cl.getResource("data/").toURI();
+    }
+
+    //-----------------------------------------------------------------------
+    // To test:
+    // create -> parse -> isUrlAllowed?
+
+    @Test
+    public void testAllowed() throws Exception {
+        URI target = BASE_URI.resolve("basic/");
+        NoRobotClient nrc = new NoRobotClient("Scabies-1.0");
+        nrc.parse(target);
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("index.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("view-cvs/")));
+    }
+
+    // Tests the example given in the RFC
+    @Test
+    public void testRfcExampleUnhipbot() throws Exception {
+        URI target = BASE_URI.resolve("rfc/");
+
+        NoRobotClient nrc = new NoRobotClient("unhipbot");
+        nrc.parse(target);
+
+        // Start of rfc test
+        Assert.assertFalse(nrc.isUrlAllowed(target));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("index.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("server.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("services/fast.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("services/slow.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("orgo.gif")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("org/about.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("org/plans.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
+        // End of rfc test
+    }
+
+    @Test
+    public void testRfcExampleWebcrawler() throws Exception {
+        URI target = BASE_URI.resolve("rfc/");
+
+        NoRobotClient nrc = new NoRobotClient("webcrawler");
+        nrc.parse(target);
+        // Start of rfc test
+        Assert.assertTrue(nrc.isUrlAllowed(target));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("index.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("server.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/fast.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/slow.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("orgo.gif")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/about.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/plans.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
+        // End of rfc test
+    }
+
+    @Test
+    public void testRfcExampleExcite() throws Exception {
+        URI target = BASE_URI.resolve("rfc/");
+
+        NoRobotClient nrc = new NoRobotClient("excite");
+        nrc.parse(target);
+        // Start of rfc test
+        Assert.assertTrue(nrc.isUrlAllowed(target));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("index.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("server.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/fast.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/slow.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("orgo.gif")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/about.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/plans.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
+        // End of rfc test
+    }
+
+    @Test
+    public void testRfcExampleOther() throws Exception {
+        URI target = BASE_URI.resolve("rfc/");
+
+        NoRobotClient nrc = new NoRobotClient("other");
+        nrc.parse(target);
+        // Start of rfc test
+        Assert.assertFalse(nrc.isUrlAllowed(target));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("index.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("server.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/fast.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/slow.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("orgo.gif")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/about.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("org/plans.html")));
+        Assert.assertFalse(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
+        // End of rfc test
+    }
+
+    @Test
+    public void testRfcBadWebDesigner() throws Exception {
+        URI target = BASE_URI.resolve("bad/");
+
+        NoRobotClient nrc = new NoRobotClient("other");
+        nrc.parse(target);
+
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Etest/%7Efoo.html")));
+    }
+
+    // Tests NRB-3
+    // http://www.osjava.org:8080/jira/secure/ViewIssue.jspa?key=NRB-3
+    @Test
+    public void testNrb3() throws Exception {
+        URI target = BASE_URI.resolve("basic/");
+        NoRobotClient nrc = new NoRobotClient("Scabies-1.0");
+        nrc.parse(target);
+        Assert.assertTrue(nrc.isUrlAllowed(target.resolve("basic")));
+    }
+
+    // Tests NRB-6
+    // http://issues.osjava.org/jira/secure/ViewIssue.jspa?key=NRB-6
+    @Test
+    public void testNrb6() throws Exception {
+        URI target = BASE_URI.resolve("order/");
+        NoRobotClient nrc = new NoRobotClient("Scabies-1.0");
+        nrc.parse(target);
+        Assert.assertTrue("Specific then Wildcard not working as expected", nrc
+                .isUrlAllowed(target.resolve("order/")));
+
+        target = BASE_URI.resolve("order-reverse/");
+        nrc = new NoRobotClient("Scabies-1.0");
+        nrc.parse(target);
+        Assert.assertTrue("Wildcard then Specific not working as expected", nrc
+                .isUrlAllowed(target.resolve("order/")));
+    }
+
+    // Tests NRB-9
+    // http://issues.osjava.org/jira/secure/ViewIssue.jspa?key=NRB-9
+    @Test
+    public void testNrb9() throws Exception {
+        URI target = BASE_URI.resolve("disallow-empty/");
+        NoRobotClient nrc = new NoRobotClient("test");
+        nrc.parse(target);
+        Assert.assertTrue("'Disallow: ' should mean to disallow nothing", nrc
+                .isUrlAllowed(target.resolve("index.html")));
+    }
+
+    // Tests NRB-8
+    // http://issues.osjava.org/jira/secure/ViewIssue.jspa?key=NRB-8
+    @Test
+    public void testNrb8() throws Exception {
+        URI target = BASE_URI.resolve("ua-case-insensitive/");
+        String[] names = new String[]{"test", "TEST", "tEsT"};
+        for (int i = 0; i < names.length; i++) {
+            NoRobotClient nrc = new NoRobotClient(names[i]);
+            nrc.parse(target);
+            Assert.assertFalse("User-Agent names should be case insensitive", nrc
+                    .isUrlAllowed(target.resolve("index.html")));
+        }
+    }
+
+    @Test
+    public void testRobotsParsing() throws Exception {
+        String s =
+                "User-agent: *\r\n" +
+                        "Disallow: /tmp/\r\n" +
+                        "User-agent: BadRobot\r\n" +
+                        "Disallow: /cgi-bin/\r\n" +
+                        "Disallow: /blah/";
+        Map<String, RulesEngine> map = NoRobotClient.parse(
+                new ByteArrayInputStream(s.getBytes("US-ASCII")));
+        Assert.assertNotNull(map);
+        Assert.assertEquals(2, map.size());
+        Assert.assertNotNull(map.get("*"));
+        Assert.assertNotNull(map.get("badrobot"));
+        Assert.assertNull(map.get("BadRobot"));
+        Assert.assertNull(map.get("wnatever"));
+    }
+
+    @Test
+    public void testComplexRobotsParsing() throws Exception {
+        String s =
+                "User-agent: *\r\n" +
+                        "Disallow: /tmp/\r\n" +
+                        "User-agent: BadRobot1\r\n" +
+                        "User-agent: BadRobot2\r\n" +
+                        "User-agent: BadRobot3\r\n" +
+                        "Disallow: /cgi-bin/\r\n" +
+                        "Disallow: /blah/\r\n" +
+                        "User-agent: BadRobot1\r\n" +
+                        "Disallow: /yada/\r\n" +
+                        "User-agent: BadRobot3\r\n" +
+                        "Allow: /haha/";
+        Map<String, RulesEngine> map = NoRobotClient.parse(
+                new ByteArrayInputStream(s.getBytes("US-ASCII")));
+        Assert.assertNotNull(map);
+        Assert.assertEquals(4, map.size());
+        Assert.assertNotNull(map.get("*"));
+        Assert.assertNotNull(map.get("badrobot1"));
+        Assert.assertNotNull(map.get("badrobot2"));
+        Assert.assertNotNull(map.get("badrobot3"));
+        Assert.assertNull(map.get("badrobot4"));
+        Assert.assertNull(map.get("wnatever"));
+
+        RulesEngine e1 = map.get("*");
+        Assert.assertEquals(Boolean.FALSE, e1.isAllowed("/tmp/"));
+        Assert.assertNull(e1.isAllowed("/blah/"));
+        Assert.assertNull(e1.isAllowed("/yada/"));
+        Assert.assertNull(e1.isAllowed("/haha/"));
+
+        RulesEngine e2 = map.get("badrobot1");
+        Assert.assertEquals(Boolean.FALSE, e2.isAllowed("/cgi-bin/"));
+        Assert.assertEquals(Boolean.FALSE, e2.isAllowed("/blah/"));
+        Assert.assertEquals(Boolean.FALSE, e2.isAllowed("/yada/"));
+        Assert.assertNull(e2.isAllowed("/haha/"));
+
+        RulesEngine e3 = map.get("badrobot2");
+        Assert.assertEquals(Boolean.FALSE, e3.isAllowed("/cgi-bin/"));
+        Assert.assertEquals(Boolean.FALSE, e3.isAllowed("/blah/"));
+        Assert.assertNull(e3.isAllowed("/yada/"));
+        Assert.assertNull(e3.isAllowed("/haha/"));
+
+        RulesEngine e4 = map.get("badrobot3");
+        Assert.assertEquals(Boolean.FALSE, e4.isAllowed("/cgi-bin/"));
+        Assert.assertEquals(Boolean.FALSE, e4.isAllowed("/blah/"));
+        Assert.assertNull(e4.isAllowed("/yada/"));
+        Assert.assertEquals(Boolean.TRUE, e4.isAllowed("/haha/"));
+    }
+
+    @Test
+    public void testSimpleRobotsCheck() throws Exception {
+        String s =
+                "User-agent: *\r\n" +
+                        "Disallow: /cgi-bin/\r\n" +
+                        "Disallow: /tmp/\r\n" +
+                        "Disallow: /~mine/";
+        NoRobotClient nrc = new NoRobotClient(new SimpleContentLoader(), "whatever");
+        nrc.parseText(new ByteArrayInputStream(s.getBytes("US-ASCII")));
+        Assert.assertTrue(nrc.isUrlAllowed(new URI("/whatever/")));
+        Assert.assertFalse(nrc.isUrlAllowed(new URI("/~mine/")));
+        Assert.assertFalse(nrc.isUrlAllowed(new URI("/tmp/")));
+    }
 
-  private static URI BASE_URI;
-  
-  @BeforeClass
-  public static void setupBaseURL() throws URISyntaxException {
-    ClassLoader cl = TestNorobotsClient.class.getClassLoader();
-    BASE_URI = cl.getResource("data/").toURI();
-  }
-  
-  //-----------------------------------------------------------------------
-  // To test: 
-  // create -> parse -> isUrlAllowed?
-
-  @Test
-  public void testAllowed() throws Exception {
-    URI target = BASE_URI.resolve("basic/");
-    NoRobotClient nrc = new NoRobotClient("Scabies-1.0");
-    nrc.parse(target);
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("index.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("view-cvs/")));
-  }
-
-  // Tests the example given in the RFC
-  @Test
-  public void testRfcExampleUnhipbot() throws Exception {
-    URI target = BASE_URI.resolve("rfc/");
-
-    NoRobotClient nrc = new NoRobotClient("unhipbot");
-    nrc.parse(target);
-
-    // Start of rfc test
-    Assert.assertFalse(nrc.isUrlAllowed(target));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("index.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("server.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("services/fast.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("services/slow.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("orgo.gif")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("org/about.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("org/plans.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
-    // End of rfc test
-  }
-
-  @Test
-  public void testRfcExampleWebcrawler() throws Exception {
-    URI target = BASE_URI.resolve("rfc/");
-
-    NoRobotClient nrc = new NoRobotClient("webcrawler");
-    nrc.parse(target);
-    // Start of rfc test
-    Assert.assertTrue(nrc.isUrlAllowed(target));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("index.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("server.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/fast.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/slow.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("orgo.gif")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/about.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/plans.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
-    // End of rfc test
-  }
-
-  @Test
-  public void testRfcExampleExcite() throws Exception {
-    URI target = BASE_URI.resolve("rfc/");
-
-    NoRobotClient nrc = new NoRobotClient("excite");
-    nrc.parse(target);
-    // Start of rfc test
-    Assert.assertTrue(nrc.isUrlAllowed(target));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("index.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("server.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/fast.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/slow.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("orgo.gif")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/about.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/plans.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
-    // End of rfc test
-  }
-
-  @Test
-  public void testRfcExampleOther() throws Exception {
-    URI target = BASE_URI.resolve("rfc/");
-
-    NoRobotClient nrc = new NoRobotClient("other");
-    nrc.parse(target);
-    // Start of rfc test
-    Assert.assertFalse(nrc.isUrlAllowed(target));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("index.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("robots.txt")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("server.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/fast.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("services/slow.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("orgo.gif")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("org/about.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("org/plans.html")));
-    Assert.assertFalse(nrc.isUrlAllowed(target.resolve("%7Ejim/jim.html")));
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Emak/mak.html")));
-    // End of rfc test
-  }
-
-  @Test
-  public void testRfcBadWebDesigner() throws Exception {
-    URI target = BASE_URI.resolve("bad/");
-
-    NoRobotClient nrc = new NoRobotClient("other");
-    nrc.parse(target);
-
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("%7Etest/%7Efoo.html")));
-  }
-
-  // Tests NRB-3
-  // http://www.osjava.org:8080/jira/secure/ViewIssue.jspa?key=NRB-3
-  @Test
-  public void testNrb3() throws Exception {
-    URI target = BASE_URI.resolve("basic/");
-    NoRobotClient nrc = new NoRobotClient("Scabies-1.0");
-    nrc.parse(target);
-    Assert.assertTrue(nrc.isUrlAllowed(target.resolve("basic")));
-  }
-
-  // Tests NRB-6
-  // http://issues.osjava.org/jira/secure/ViewIssue.jspa?key=NRB-6
-  @Test
-  public void testNrb6() throws Exception {
-    URI target = BASE_URI.resolve("order/");
-    NoRobotClient nrc = new NoRobotClient("Scabies-1.0");
-    nrc.parse(target);
-    Assert.assertTrue("Specific then Wildcard not working as expected", nrc
-        .isUrlAllowed(target.resolve("order/")));
-
-    target = BASE_URI.resolve("order-reverse/");
-    nrc = new NoRobotClient("Scabies-1.0");
-    nrc.parse(target);
-    Assert.assertTrue("Wildcard then Specific not working as expected", nrc
-        .isUrlAllowed(target.resolve("order/")));
-  }      
-
-  // Tests NRB-9
-  // http://issues.osjava.org/jira/secure/ViewIssue.jspa?key=NRB-9
-  @Test
-  public void testNrb9() throws Exception {
-    URI target = BASE_URI.resolve("disallow-empty/");
-    NoRobotClient nrc = new NoRobotClient("test");
-    nrc.parse(target);
-    Assert.assertTrue("'Disallow: ' should mean to disallow nothing", nrc
-        .isUrlAllowed(target.resolve("index.html")));
-  }
-
-  // Tests NRB-8
-  // http://issues.osjava.org/jira/secure/ViewIssue.jspa?key=NRB-8
-  @Test
-  public void testNrb8() throws Exception {
-    URI target = BASE_URI.resolve("ua-case-insensitive/");
-    String[] names = new String[] {"test", "TEST", "tEsT"};
-    for (int i = 0; i < names.length; i++) {
-      NoRobotClient nrc = new NoRobotClient(names[i]);
-      nrc.parse(target);
-      Assert.assertFalse("User-Agent names should be case insensitive", nrc
-          .isUrlAllowed(target.resolve("index.html")));
-    }
-  }
-
-  @Test
-  public void testRobotsParsing() throws Exception {
-    String s = 
-      "User-agent: *\r\n" +
-      "Disallow: /tmp/\r\n" +
-      "User-agent: BadRobot\r\n" +
-      "Disallow: /cgi-bin/\r\n" +
-      "Disallow: /blah/";
-    Map<String, RulesEngine> map = NoRobotClient.parse(
-        new ByteArrayInputStream(s.getBytes("US-ASCII")));
-    Assert.assertNotNull(map);
-    Assert.assertEquals(2, map.size());
-    Assert.assertNotNull(map.get("*"));
-    Assert.assertNotNull(map.get("badrobot"));
-    Assert.assertNull(map.get("BadRobot"));
-    Assert.assertNull(map.get("wnatever"));
-  }
-  
-  @Test
-  public void testComplexRobotsParsing() throws Exception {
-    String s = 
-      "User-agent: *\r\n" +
-      "Disallow: /tmp/\r\n" +
-      "User-agent: BadRobot1\r\n" +
-      "User-agent: BadRobot2\r\n" +
-      "User-agent: BadRobot3\r\n" +
-      "Disallow: /cgi-bin/\r\n" +
-      "Disallow: /blah/\r\n" +
-      "User-agent: BadRobot1\r\n" +
-      "Disallow: /yada/\r\n" +
-      "User-agent: BadRobot3\r\n" +
-      "Allow: /haha/";
-    Map<String, RulesEngine> map = NoRobotClient.parse(
-        new ByteArrayInputStream(s.getBytes("US-ASCII")));
-    Assert.assertNotNull(map);
-    Assert.assertEquals(4, map.size());
-    Assert.assertNotNull(map.get("*"));
-    Assert.assertNotNull(map.get("badrobot1"));
-    Assert.assertNotNull(map.get("badrobot2"));
-    Assert.assertNotNull(map.get("badrobot3"));
-    Assert.assertNull(map.get("badrobot4"));
-    Assert.assertNull(map.get("wnatever"));
-    
-    RulesEngine e1 = map.get("*");
-    Assert.assertEquals(Boolean.FALSE, e1.isAllowed("/tmp/"));
-    Assert.assertNull(e1.isAllowed("/blah/"));
-    Assert.assertNull(e1.isAllowed("/yada/"));
-    Assert.assertNull(e1.isAllowed("/haha/"));
-
-    RulesEngine e2 = map.get("badrobot1");
-    Assert.assertEquals(Boolean.FALSE, e2.isAllowed("/cgi-bin/"));
-    Assert.assertEquals(Boolean.FALSE, e2.isAllowed("/blah/"));
-    Assert.assertEquals(Boolean.FALSE, e2.isAllowed("/yada/"));
-    Assert.assertNull(e2.isAllowed("/haha/"));
-
-    RulesEngine e3 = map.get("badrobot2");
-    Assert.assertEquals(Boolean.FALSE, e3.isAllowed("/cgi-bin/"));
-    Assert.assertEquals(Boolean.FALSE, e3.isAllowed("/blah/"));
-    Assert.assertNull(e3.isAllowed("/yada/"));
-    Assert.assertNull(e3.isAllowed("/haha/"));
-
-    RulesEngine e4 = map.get("badrobot3");
-    Assert.assertEquals(Boolean.FALSE, e4.isAllowed("/cgi-bin/"));
-    Assert.assertEquals(Boolean.FALSE, e4.isAllowed("/blah/"));
-    Assert.assertNull(e4.isAllowed("/yada/"));
-    Assert.assertEquals(Boolean.TRUE, e4.isAllowed("/haha/"));
-  }
-  
-  @Test
-  public void testSimpleRobotsCheck() throws Exception {
-    String s = 
-      "User-agent: *\r\n" +
-      "Disallow: /cgi-bin/\r\n" +
-      "Disallow: /tmp/\r\n" +
-      "Disallow: /~mine/";
-    NoRobotClient nrc = new NoRobotClient(new SimpleContentLoader(), "whatever");
-    nrc.parseText(new ByteArrayInputStream(s.getBytes("US-ASCII")));
-    Assert.assertTrue(nrc.isUrlAllowed(new URI("/whatever/")));
-    Assert.assertFalse(nrc.isUrlAllowed(new URI("/~mine/")));
-    Assert.assertFalse(nrc.isUrlAllowed(new URI("/tmp/")));
-  }
-  
 }

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/schema.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/schema.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/schema.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/schema.xml Tue Dec 18 08:47:39 2012
@@ -17,66 +17,68 @@
 -->
 
 <schema name="example" version="1.1">
-  <types>
-  
-    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
-    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
-    <fieldType name="integer" class="solr.IntField" omitNorms="true"/>
-    <fieldType name="long" class="solr.LongField" omitNorms="true"/>
-    <fieldType name="float" class="solr.FloatField" omitNorms="true"/>
-    <fieldType name="double" class="solr.DoubleField" omitNorms="true"/>
-    <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
-    <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
-    <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
-    <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
-    <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>
-    <fieldType name="random" class="solr.RandomSortField" indexed="true" />
-
-    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
-      <analyzer type="index">
-        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.StopFilterFactory"
-                ignoreCase="true"
-                words="stopwords.txt"
-                enablePositionIncrements="true"
-                />
-        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
-        <filter class="solr.LowerCaseFilterFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
-        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
-      </analyzer>
-      <analyzer type="query">
-        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
-        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
-        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
-        <filter class="solr.LowerCaseFilterFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
-        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
-      </analyzer>
-    </fieldType>
-
- </types>
-
- <fields>
-   <field name="id"      type="string" indexed="true" stored="true" required="true" /> 
-   <field name="name"    type="string" indexed="true" stored="true" />
-   <field name="host"    type="string" indexed="true" stored="true" />
-   <field name="mime"    type="string" indexed="true" stored="true" />
-   <field name="content" type="text"   indexed="true" stored="true" />
-   <field name="selector" type="text"   indexed="true" stored="true" />
-
- </fields>
-
- <!-- Field to use to determine and enforce document uniqueness. 
-      Unless this field is marked with required="false", it will be a required field
-   -->
- <uniqueKey>id</uniqueKey>
+    <types>
 
- <!-- field for the QueryParser to use when an explicit fieldname is absent -->
- <defaultSearchField>content</defaultSearchField>
+        <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="integer" class="solr.IntField" omitNorms="true"/>
+        <fieldType name="long" class="solr.LongField" omitNorms="true"/>
+        <fieldType name="float" class="solr.FloatField" omitNorms="true"/>
+        <fieldType name="double" class="solr.DoubleField" omitNorms="true"/>
+        <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>
+        <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
+
+        <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
+            <analyzer type="index">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <filter class="solr.StopFilterFactory"
+                        ignoreCase="true"
+                        words="stopwords.txt"
+                        enablePositionIncrements="true"
+                        />
+                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+                <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
+                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
+                        catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+                <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+            </analyzer>
+        </fieldType>
+
+    </types>
+
+    <fields>
+        <field name="id" type="string" indexed="true" stored="true" required="true"/>
+        <field name="name" type="string" indexed="true" stored="true"/>
+        <field name="host" type="string" indexed="true" stored="true"/>
+        <field name="mime" type="string" indexed="true" stored="true"/>
+        <field name="content" type="text" indexed="true" stored="true"/>
+        <field name="selector" type="text" indexed="true" stored="true"/>
+
+    </fields>
+
+    <!-- Field to use to determine and enforce document uniqueness.
+         Unless this field is marked with required="false", it will be a required field
+      -->
+    <uniqueKey>id</uniqueKey>
 
- <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
- <solrQueryParser defaultOperator="OR"/>
+    <!-- field for the QueryParser to use when an explicit fieldname is absent -->
+    <defaultSearchField>content</defaultSearchField>
+
+    <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
+    <solrQueryParser defaultOperator="OR"/>
 
 </schema>

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/solrconfig.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/solrconfig.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/example/conf/solrconfig.xml Tue Dec 18 08:47:39 2012
@@ -17,174 +17,174 @@
 -->
 
 <config>
-  <abortOnConfigurationError>true</abortOnConfigurationError>
+    <abortOnConfigurationError>true</abortOnConfigurationError>
 
-  <!-- must specify a data directory -->
-  <dataDir>${solr.data.dir:target/data}</dataDir>
+    <!-- must specify a data directory -->
+    <dataDir>${solr.data.dir:target/data}</dataDir>
 
 
-  <indexDefaults>
-   <!-- Values here affect all index writers and act as a default unless overridden. -->
-    <useCompoundFile>false</useCompoundFile>
+    <indexDefaults>
+        <!-- Values here affect all index writers and act as a default unless overridden. -->
+        <useCompoundFile>false</useCompoundFile>
 
-    <mergeFactor>10</mergeFactor>
-    <!--
-     If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
+        <mergeFactor>10</mergeFactor>
+        <!--
+         If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
 
-     -->
-    <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
-    <!-- Tell Lucene when to flush documents to disk.
-    Giving Lucene more memory for indexing means faster indexing at the cost of more RAM
-
-    If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
-
-    -->
-    <ramBufferSizeMB>32</ramBufferSizeMB>
-    <maxMergeDocs>2147483647</maxMergeDocs>
-    <maxFieldLength>10000</maxFieldLength>
-    <writeLockTimeout>1000</writeLockTimeout>
-    <commitLockTimeout>10000</commitLockTimeout>
-    <lockType>single</lockType>
-  </indexDefaults>
-
-  <mainIndex>
-    <!-- options specific to the main on-disk lucene index -->
-    <useCompoundFile>false</useCompoundFile>
-    <ramBufferSizeMB>32</ramBufferSizeMB>
-    <mergeFactor>10</mergeFactor>
-    <!-- Deprecated -->
-    <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
-    <maxMergeDocs>2147483647</maxMergeDocs>
-    <maxFieldLength>10000</maxFieldLength>
-
-    <!-- If true, unlock any held write or commit locks on startup. 
-         This defeats the locking mechanism that allows multiple
-         processes to safely access a lucene index, and should be
-         used with care.
-         This is not needed if lock type is 'none' or 'single'
-     -->
-    <unlockOnStartup>true</unlockOnStartup>
+         -->
+        <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
+        <!-- Tell Lucene when to flush documents to disk.
+        Giving Lucene more memory for indexing means faster indexing at the cost of more RAM
 
-    <!--
-        Custom deletion policies can specified here. The class must
-        implement org.apache.lucene.index.IndexDeletionPolicy.
+        If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
 
-        http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/index/IndexDeletionPolicy.html
+        -->
+        <ramBufferSizeMB>32</ramBufferSizeMB>
+        <maxMergeDocs>2147483647</maxMergeDocs>
+        <maxFieldLength>10000</maxFieldLength>
+        <writeLockTimeout>1000</writeLockTimeout>
+        <commitLockTimeout>10000</commitLockTimeout>
+        <lockType>single</lockType>
+    </indexDefaults>
+
+    <mainIndex>
+        <!-- options specific to the main on-disk lucene index -->
+        <useCompoundFile>false</useCompoundFile>
+        <ramBufferSizeMB>32</ramBufferSizeMB>
+        <mergeFactor>10</mergeFactor>
+        <!-- Deprecated -->
+        <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
+        <maxMergeDocs>2147483647</maxMergeDocs>
+        <maxFieldLength>10000</maxFieldLength>
+
+        <!-- If true, unlock any held write or commit locks on startup.
+             This defeats the locking mechanism that allows multiple
+             processes to safely access a lucene index, and should be
+             used with care.
+             This is not needed if lock type is 'none' or 'single'
+         -->
+        <unlockOnStartup>true</unlockOnStartup>
+
+        <!--
+            Custom deletion policies can specified here. The class must
+            implement org.apache.lucene.index.IndexDeletionPolicy.
+
+            http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/index/IndexDeletionPolicy.html
+
+            The standard Solr IndexDeletionPolicy implementation supports deleting
+            index commit points on number of commits, age of commit point and
+            optimized status.
 
-        The standard Solr IndexDeletionPolicy implementation supports deleting
-        index commit points on number of commits, age of commit point and
-        optimized status.
-
-        The latest commit point should always be preserved regardless
-        of the criteria.
-    -->
-    <deletionPolicy class="solr.SolrDeletionPolicy">
-      <!-- Keep only optimized commit points -->
-      <str name="keepOptimizedOnly">false</str>
-      <!-- The maximum number of commit points to be kept -->
-      <str name="maxCommitsToKeep">1</str>
-      <!--
-          Delete all commit points once they have reached the given age.
-          Supports DateMathParser syntax e.g.
-          
-          <str name="maxCommitAge">30MINUTES</str>
-          <str name="maxCommitAge">1DAY</str>
-      -->
-    </deletionPolicy>
+            The latest commit point should always be preserved regardless
+            of the criteria.
+        -->
+        <deletionPolicy class="solr.SolrDeletionPolicy">
+            <!-- Keep only optimized commit points -->
+            <str name="keepOptimizedOnly">false</str>
+            <!-- The maximum number of commit points to be kept -->
+            <str name="maxCommitsToKeep">1</str>
+            <!--
+                Delete all commit points once they have reached the given age.
+                Supports DateMathParser syntax e.g.
+
+                <str name="maxCommitAge">30MINUTES</str>
+                <str name="maxCommitAge">1DAY</str>
+            -->
+        </deletionPolicy>
+
+    </mainIndex>
+
+    <jmx/>
+
+    <!-- the default high-performance update handler -->
+    <updateHandler class="solr.DirectUpdateHandler2">
+        <!-- Perform a <commit/> automatically under certain conditions:
+        <autoCommit>
+          <maxDocs>10000</maxDocs>
+          <maxTime>1000</maxTime>
+        </autoCommit>
+        -->
+    </updateHandler>
 
-  </mainIndex>
 
-  <jmx />
+    <query>
+        <!-- Maximum number of clauses in a boolean query... can affect
+            range or prefix queries that expand to big boolean
+            queries.  An exception is thrown if exceeded.  -->
+        <maxBooleanClauses>1024</maxBooleanClauses>
+
+        <filterCache
+                class="solr.LRUCache"
+                size="512"
+                initialSize="512"
+                autowarmCount="128"/>
+
+        <queryResultCache
+                class="solr.LRUCache"
+                size="512"
+                initialSize="512"
+                autowarmCount="32"/>
+
+        <documentCache
+                class="solr.LRUCache"
+                size="512"
+                initialSize="512"
+                autowarmCount="0"/>
+
+        <enableLazyFieldLoading>true</enableLazyFieldLoading>
+
+        <!-- An optimization for use with the queryResultCache.  When a search
+              is requested, a superset of the requested number of document ids
+              are collected.  For example, if a search for a particular query
+              requests matching documents 10 through 19, and queryWindowSize is 50,
+              then documents 0 through 49 will be collected and cached.  Any further
+              requests in that range can be satisfied via the cache.  -->
+        <queryResultWindowSize>50</queryResultWindowSize>
+
+        <!-- Maximum number of documents to cache for any entry in the
+             queryResultCache. -->
+        <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
+
+        <!-- This entry enables an int hash representation for filters (DocSets)
+             when the number of items in the set is less than maxSize.  For smaller
+             sets, this representation is more memory efficient, more efficient to
+             iterate over, and faster to take intersections.  -->
+        <HashDocSet maxSize="3000" loadFactor="0.75"/>
+
+        <!-- If a search request comes in and there is no current registered searcher,
+             then immediately register the still warming searcher and use it.  If
+             "false" then all requests will block until the first searcher is done
+             warming. -->
+        <useColdSearcher>false</useColdSearcher>
+
+        <!-- Maximum number of searchers that may be warming in the background
+          concurrently.  An error is returned if this limit is exceeded. Recommend
+          1-2 for read-only slaves, higher for masters w/o cache warming. -->
+        <maxWarmingSearchers>2</maxWarmingSearchers>
 
-  <!-- the default high-performance update handler -->
-  <updateHandler class="solr.DirectUpdateHandler2">
-    <!-- Perform a <commit/> automatically under certain conditions:
-    <autoCommit> 
-      <maxDocs>10000</maxDocs>
-      <maxTime>1000</maxTime> 
-    </autoCommit>
-    -->
-  </updateHandler>
-
-
-  <query>
-    <!-- Maximum number of clauses in a boolean query... can affect
-        range or prefix queries that expand to big boolean
-        queries.  An exception is thrown if exceeded.  -->
-    <maxBooleanClauses>1024</maxBooleanClauses>
-
-    <filterCache
-      class="solr.LRUCache"
-      size="512"
-      initialSize="512"
-      autowarmCount="128"/>
-
-    <queryResultCache
-      class="solr.LRUCache"
-      size="512"
-      initialSize="512"
-      autowarmCount="32"/>
-
-    <documentCache
-      class="solr.LRUCache"
-      size="512"
-      initialSize="512"
-      autowarmCount="0"/>
-
-    <enableLazyFieldLoading>true</enableLazyFieldLoading>
-
-   <!-- An optimization for use with the queryResultCache.  When a search
-         is requested, a superset of the requested number of document ids
-         are collected.  For example, if a search for a particular query
-         requests matching documents 10 through 19, and queryWindowSize is 50,
-         then documents 0 through 49 will be collected and cached.  Any further
-         requests in that range can be satisfied via the cache.  -->
-    <queryResultWindowSize>50</queryResultWindowSize>
-
-    <!-- Maximum number of documents to cache for any entry in the
-         queryResultCache. -->
-    <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
-
-    <!-- This entry enables an int hash representation for filters (DocSets)
-         when the number of items in the set is less than maxSize.  For smaller
-         sets, this representation is more memory efficient, more efficient to
-         iterate over, and faster to take intersections.  -->
-    <HashDocSet maxSize="3000" loadFactor="0.75"/>
-
-    <!-- If a search request comes in and there is no current registered searcher,
-         then immediately register the still warming searcher and use it.  If
-         "false" then all requests will block until the first searcher is done
-         warming. -->
-    <useColdSearcher>false</useColdSearcher>
-
-    <!-- Maximum number of searchers that may be warming in the background
-      concurrently.  An error is returned if this limit is exceeded. Recommend
-      1-2 for read-only slaves, higher for masters w/o cache warming. -->
-    <maxWarmingSearchers>2</maxWarmingSearchers>
-
-  </query>
-
-  <!-- 
-    Let the dispatch filter handler /select?qt=XXX
-    handleSelect=true will use consistent error handling for /select and /update
-    handleSelect=false will use solr1.1 style error formatting
-    -->
-  <requestDispatcher handleSelect="true" />
-  
-  <requestHandler name="standard" class="solr.SearchHandler" default="true">
-    <!-- default values for query parameters -->
-     <lst name="defaults">
-       <str name="echoParams">explicit</str>
-       <!--
-       <int name="rows">10</int>
-       <str name="fl">*</str>
-       <str name="version">2.1</str>
-        -->
-     </lst>
-  </requestHandler>
+    </query>
+
+    <!--
+      Let the dispatch filter handler /select?qt=XXX
+      handleSelect=true will use consistent error handling for /select and /update
+      handleSelect=false will use solr1.1 style error formatting
+      -->
+    <requestDispatcher handleSelect="true"/>
+
+    <requestHandler name="standard" class="solr.SearchHandler" default="true">
+        <!-- default values for query parameters -->
+        <lst name="defaults">
+            <str name="echoParams">explicit</str>
+            <!--
+            <int name="rows">10</int>
+            <str name="fl">*</str>
+            <str name="version">2.1</str>
+             -->
+        </lst>
+    </requestHandler>
 
 
-  <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+    <requestHandler name="/update" class="solr.XmlUpdateRequestHandler"/>
+    <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers"/>
 
 </config>

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/pom.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/pom.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/pom.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/pom.xml Tue Dec 18 08:47:39 2012
@@ -15,66 +15,67 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>droids</artifactId>
-    <groupId>org.apache.droids</groupId>
-    <version>0.3.0-incubating-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-  <artifactId>droids-solr</artifactId>
-  <name>Apache Droids Solr</name>
-  <inceptionYear>2007</inceptionYear>
-  <description>Apache Droids Solr Integration</description>
-  <packaging>jar</packaging>  
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>droids</artifactId>
+        <groupId>org.apache.droids</groupId>
+        <version>0.3.0-incubating-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>droids-solr</artifactId>
+    <name>Apache Droids Solr</name>
+    <inceptionYear>2007</inceptionYear>
+    <description>Apache Droids Solr Integration</description>
+    <packaging>jar</packaging>
 
-  <properties>
-    <solr-release-version>3.6.0</solr-release-version>
-  </properties>
+    <properties>
+        <solr-release-version>3.6.0</solr-release-version>
+    </properties>
 
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.droids</groupId>
-      <artifactId>droids-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.solr</groupId>
-      <artifactId>solr-solrj</artifactId>
-      <version>${solr-release-version}</version>
-      <exclusions>
-      	<exclusion>
-      		<artifactId>commons-logging</artifactId>
-      		<groupId>commons-logging</groupId>
-      	</exclusion>
-      </exclusions>
-    </dependency>
-    <!-- FOR TESTING -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.solr</groupId>
-      <artifactId>solr-core</artifactId>
-      <version>${solr-release-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>2.3</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
-      <version>1.6.4</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.droids</groupId>
+            <artifactId>droids-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.solr</groupId>
+            <artifactId>solr-solrj</artifactId>
+            <version>${solr-release-version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-logging</artifactId>
+                    <groupId>commons-logging</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!-- FOR TESTING -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.solr</groupId>
+            <artifactId>solr-core</artifactId>
+            <version>${solr-release-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.3</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>1.6.4</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 </project>

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/locationmap.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/locationmap.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/locationmap.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/locationmap.xml Tue Dec 18 08:47:39 2012
@@ -16,16 +16,16 @@
   limitations under the License.
 -->
 <locationmap xmlns="http://apache.org/forrest/locationmap/1.0">
-  <components>
-    <matchers default="lm">
-      <matcher 
-        name="lm" 
-        src="org.apache.forrest.locationmap.WildcardLocationMapHintMatcher"/>
-    </matchers>
-    <selectors default="exists">
-      <selector name="exists" logger="sitemap.selector.exists"  
-                    src="org.apache.forrest.sourceexists.SourceExistsSelector" />
-    </selectors>
-  </components>
-  <locator></locator>
+    <components>
+        <matchers default="lm">
+            <matcher
+                    name="lm"
+                    src="org.apache.forrest.locationmap.WildcardLocationMapHintMatcher"/>
+        </matchers>
+        <selectors default="exists">
+            <selector name="exists" logger="sitemap.selector.exists"
+                      src="org.apache.forrest.sourceexists.SourceExistsSelector"/>
+        </selectors>
+    </components>
+    <locator></locator>
 </locationmap>

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/index.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/index.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/index.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/index.xml Tue Dec 18 08:47:39 2012
@@ -17,35 +17,39 @@
 -->
 <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
 <document>
-  <header>
-    <title>Welcome to the @plugin-name@ Plugin</title>
-  </header>
-  <body>
-    <section id="overview">
-      <title>Apache Droids - @plugin-name@ Plugin</title>
-      <p>
-        @plugin-desc@
-      </p>
-    </section>
-    <section id="samples">
-      <title>Samples</title>
-      <p>
-        This section includes links to a number of samples using this plugin.
-        The plugin is intended to be self documenting through these samples. If
-        you require further help please ask on the user mailing list.
-      </p>
-      <ul>
-        <li><fixme author="droids-dev">
-            Add a link to a sample here...
-          </fixme></li>
-        <li><fixme author="droids-dev">
-            Add another sample link here...
-          </fixme></li>
-      </ul>
-      <note>
-        The more samples included here the easier it is for users to understand
-        this plugin. If you can provide additional samples please do so.
-      </note>
-    </section>
-  </body>
+    <header>
+        <title>Welcome to the @plugin-name@ Plugin</title>
+    </header>
+    <body>
+        <section id="overview">
+            <title>Apache Droids - @plugin-name@ Plugin</title>
+            <p>
+                @plugin-desc@
+            </p>
+        </section>
+        <section id="samples">
+            <title>Samples</title>
+            <p>
+                This section includes links to a number of samples using this plugin.
+                The plugin is intended to be self documenting through these samples. If
+                you require further help please ask on the user mailing list.
+            </p>
+            <ul>
+                <li>
+                    <fixme author="droids-dev">
+                        Add a link to a sample here...
+                    </fixme>
+                </li>
+                <li>
+                    <fixme author="droids-dev">
+                        Add another sample link here...
+                    </fixme>
+                </li>
+            </ul>
+            <note>
+                The more samples included here the easier it is for users to understand
+                this plugin. If you can provide additional samples please do so.
+            </note>
+        </section>
+    </body>
 </document>

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/site.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/site.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/site.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/site.xml Tue Dec 18 08:47:39 2012
@@ -29,20 +29,20 @@ This file contains an outline of the sit
 See http://forrest.apache.org/docs/linking.html for more info
 -->
 <site label="@plugin-name@" href="" xmlns="http://apache.org/forrest/linkmap/1.0" tab="">
-  <about label="About">
-    <index label="Index" href="index.html" description="Welcome to @plugin-name@"/>
-    <changes label="Changes" href="changes.html" description="History of Changes" />
-    <todo label="Todo" href="todo.html" description="Todo List" />
-  </about>
-  
-<!--
-  The href must be wholesite.html/pdf  You can change the labels and node names
-  <all label="All">
-    <whole_site_html label="Whole Site HTML" href="wholesite.html"/>
-    <whole_site_pdf label="Whole Site PDF" href="wholesite.pdf"/>
-  </all>
-  -->
-  <external-refs>
-    <forrest href="http://forrest.apache.org/"/>
-  </external-refs>
+    <about label="About">
+        <index label="Index" href="index.html" description="Welcome to @plugin-name@"/>
+        <changes label="Changes" href="changes.html" description="History of Changes"/>
+        <todo label="Todo" href="todo.html" description="Todo List"/>
+    </about>
+
+    <!--
+      The href must be wholesite.html/pdf  You can change the labels and node names
+      <all label="All">
+        <whole_site_html label="Whole Site HTML" href="wholesite.html"/>
+        <whole_site_pdf label="Whole Site PDF" href="wholesite.pdf"/>
+      </all>
+      -->
+    <external-refs>
+        <forrest href="http://forrest.apache.org/"/>
+    </external-refs>
 </site>

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/tabs.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/tabs.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/tabs.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/content/xdocs/tabs.xml Tue Dec 18 08:47:39 2012
@@ -15,24 +15,25 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<!DOCTYPE tabs PUBLIC "-//APACHE//DTD Cocoon Documentation Tab V1.1//EN" "http://forrest.apache.org/dtd/tab-cocoon-v11.dtd">
+<!DOCTYPE tabs PUBLIC "-//APACHE//DTD Cocoon Documentation Tab V1.1//EN"
+        "http://forrest.apache.org/dtd/tab-cocoon-v11.dtd">
 <tabs software="MyProj"
-  title="MyProj"
-  copyright="Foo"
-  xmlns:xlink="http://www.w3.org/1999/xlink">
-<!-- The rules for tabs are:
-    @dir will always have '/@indexfile' added.
-    @indexfile gets appended to @dir if the tab is selected. Defaults to 'index.html'
-    @href is not modified unless it is root-relative and obviously specifies a
-    directory (ends in '/'), in which case /index.html will be added
-    If @id's are present, site.xml entries with a matching @tab will be in that tab.
+      title="MyProj"
+      copyright="Foo"
+      xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- The rules for tabs are:
+        @dir will always have '/@indexfile' added.
+        @indexfile gets appended to @dir if the tab is selected. Defaults to 'index.html'
+        @href is not modified unless it is root-relative and obviously specifies a
+        directory (ends in '/'), in which case /index.html will be added
+        If @id's are present, site.xml entries with a matching @tab will be in that tab.
 
-   Tabs can be embedded to a depth of two. The second level of tabs will only 
-    be displayed when their parent tab is selected.    
-  -->
-  <tab id="" label="Plugin Home" dir="" indexfile="index.html"/>
-<!-- Add new tabs here, eg:
-  <tab label="How-Tos" dir="community/howto/"/>
-  <tab label="XML Site" dir="xml-site/"/>
-  -->
+       Tabs can be embedded to a depth of two. The second level of tabs will only
+        be displayed when their parent tab is selected.
+      -->
+    <tab id="" label="Plugin Home" dir="" indexfile="index.html"/>
+    <!-- Add new tabs here, eg:
+      <tab label="How-Tos" dir="community/howto/"/>
+      <tab label="XML Site" dir="xml-site/"/>
+      -->
 </tabs>

Modified: incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/skinconf.xml
URL: http://svn.apache.org/viewvc/incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/skinconf.xml?rev=1423339&r1=1423338&r2=1423339&view=diff
==============================================================================
--- incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/skinconf.xml (original)
+++ incubator/droids/branches/0.2.x-cleanup/droids-solr/src/documentation/skinconf.xml Tue Dec 18 08:47:39 2012
@@ -15,13 +15,14 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<!DOCTYPE skinconfig PUBLIC "-//APACHE//DTD Skin Configuration V0.7-1//EN" "http://forrest.apache.org/dtd/skinconfig-v07-1.dtd"
-[
-  <!ENTITY skinconf-common PUBLIC "-//Apache Forrest//ENTITIES Skin Configuration common plugins V0.7-1//EN" "">
-]>
+<!DOCTYPE skinconfig PUBLIC "-//APACHE//DTD Skin Configuration V0.7-1//EN"
+        "http://forrest.apache.org/dtd/skinconfig-v07-1.dtd"
+        [
+                <!ENTITY skinconf-common PUBLIC "-//Apache Forrest//ENTITIES Skin Configuration common plugins V0.7-1//EN" "">
+                ]>
 <skinconfig>
-  &skinconf-common;
+    &skinconf-common;
 
-  <project-name>Plugin: @plugin-name@</project-name>
-  <project-description>@plugin-name@ plugin for Apache Droids</project-description>
+    <project-name>Plugin: @plugin-name@</project-name>
+    <project-description>@plugin-name@ plugin for Apache Droids</project-description>
 </skinconfig>