RAT-195: Merged rat-api from GSOC branch.

* Cleaned up mess with pom coordinates of it test projects.
* Enhanced SVN:ignore to not take care of *.iml.
* Activated RAT::API as default module.



git-svn-id: https://svn.apache.org/repos/asf/creadur/rat/trunk@1661803 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/apache-rat-api/pom.xml b/apache-rat-api/pom.xml
new file mode 100644
index 0000000..7ecfc3c
--- /dev/null
+++ b/apache-rat-api/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.rat</groupId>
+    <artifactId>apache-rat-project</artifactId>
+    <version>0.12-SNAPSHOT</version>
+  </parent>
+  <packaging>jar</packaging>
+
+  <artifactId>apache-rat-api</artifactId>
+
+  <name>Apache Creadur Rat::API</name>
+  <description>Shared beans and services.</description>
+
+  <dependencies>
+    <!-- Test Dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-library</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java b/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java
new file mode 100644
index 0000000..4d4ee4f
--- /dev/null
+++ b/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rat.api.domain;
+
+/**
+ * Licenses are grouped into families. Each family has similar legal semantics,
+ * though some small details may differ.
+ * <p/>
+ * For example, the <a href='http://opensource.org/licenses/BSD-3-Clause'>3
+ * clause BSD license</a> is in a family where members differ by &lt;OWNER&gt;,
+ * &lt;ORGANIZATION&gt; and &lt;YEAR&gt; parameters.
+ * 
+ */
+public final class LicenseFamily {
+
+    /**
+     * Further information associated with the license family. Human readable.
+     * Possibly null.
+     */
+    private final String notes;
+    /**
+     * Names of the category containing this license family. Choosing a suitable
+     * URI is recommended. Possibly null;
+     */
+    private final String category;
+    /**
+     * Uniquely identifies this family. Choosing a suitable URI is recommended.
+     * Not null.
+     */
+    private final String name;
+
+    /**
+     * Constructs an immutable license family.
+     * 
+     * @param name
+     *            the name uniquely identifying this family. Recommended that
+     *            this be an URI. Not null.
+     * @param category
+     *            the name of the category containing this license family.
+     *            Recommended that this be an URI. Possibly null.
+     * @param notes
+     *            further information associated with the license family. Human
+     *            readable. Possibly null.
+     */
+    public LicenseFamily(final String name, final String category,
+            final String notes) {
+        super();
+        this.notes = notes;
+        this.category = category;
+        this.name = name;
+    }
+
+    /**
+     * Gets further information associated with the license family. Human
+     * readable.
+     * 
+     * @return possibly null
+     */
+    public String getNotes() {
+        return this.notes;
+    }
+
+    /**
+     * Gets the name of the category containing this license family. Recommended
+     * that this be an URI.
+     * 
+     * @return possibly null
+     */
+    public String getCategory() {
+        return this.category;
+    }
+
+    /**
+     * Gets the name uniquely identifying this family. Recommended that this be
+     * an URI.
+     * 
+     * @return not null
+     */
+    public String getName() {
+        return this.name;
+    }
+
+}
diff --git a/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java b/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java
new file mode 100644
index 0000000..9d58a96
--- /dev/null
+++ b/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rat.api.domain;
+
+/**
+ * Builds {@link LicenseFamily} instances.
+ */
+public final class LicenseFamilyBuilder {
+
+    /**
+     * Begins to build a license family.
+     * 
+     * @return a builder for a license family, not null
+     */
+    public static LicenseFamilyBuilder aLicenseFamily() {
+        return new LicenseFamilyBuilder();
+    }
+
+    /** Further information associated with the license family. Human readable. */
+    private String notes;
+    /**
+     * Names of the category containing this license family. Recommended that
+     * this be an URI.
+     */
+    private String category;
+    /** Uniquely identifies this family. Choosing a suitable URI is recommended */
+    private String name;
+
+    /** Use {@link #aLicenseFamily()  */
+    private LicenseFamilyBuilder() {
+    }
+
+    /**
+     * Builds a family.
+     * 
+     * @return not null
+     */
+    public LicenseFamily build() {
+        return new LicenseFamily(this.name, this.category, this.notes);
+    }
+
+    /**
+     * Builds family with further information associated with the license
+     * family. Human readable.
+     * 
+     * @param notes
+     *            possibly null
+     * @return this instance, not null
+     */
+    public LicenseFamilyBuilder withNotes(final String notes) {
+        this.notes = notes;
+        return this;
+    }
+
+    /**
+     * Builds family with category containing this license family. Choosing a
+     * suitable URI is recommended
+     * 
+     * @param category
+     *            possible null
+     * @return this instance, not null
+     */
+    public LicenseFamilyBuilder withCategory(final String category) {
+        this.category = category;
+        return this;
+    }
+
+    /**
+     * 
+     * Uniquely identifies this family. Choosing a suitable URI is recommended.
+     * 
+     * @param name
+     *            not null
+     * @return this instance, not null
+     */
+    public LicenseFamilyBuilder withName(final String name) {
+        this.name = name;
+        return this;
+    }
+}
diff --git a/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java b/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
new file mode 100644
index 0000000..1a186bc
--- /dev/null
+++ b/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rat.api.domain;
+
+import static org.apache.rat.api.domain.LicenseFamilyBuilder.aLicenseFamily;
+
+/**
+ * Enumerates standard license families known to Rat.
+ */
+public enum RatLicenseFamily {
+
+	APACHE(
+			"Apache License Version 2.0",
+			"AL   ",
+			"Note that APACHE requires a NOTICE. All modifications require notes. See http://www.apache.org/licenses/LICENSE-2.0."),
+	GPL1(
+			"GNU General Public License, version 1",
+			"GPL1 ",
+			"Note that GPL1 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-1.0.html."),
+	GPL2(
+			"GNU General Public License, version 2",
+			"GPL2 ",
+			"Note that GPL2 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-2.0.html."),
+	GPL3(
+			"GNU General Public License, version 3",
+			"GPL3 ",
+			"Note that GPL3 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-3.0.html."),
+	MIT(
+			"The MIT License",
+			"MIT  ",
+			"Note that MIT requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/MIT."),
+	CDDL1(
+			"COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0",
+			"CDDL1",
+			"Note that CDDL1 requires a NOTICE. All modifications require notes. See https://oss.oracle.com/licenses/CDDL."),
+	OASIS(
+			"OASIS Open License",
+			"OASIS",
+			"Note that OASIS requires a NOTICE. All modifications require notes. See https://www.oasis-open.org/policies-guidelines/ipr."),
+	TMF854(
+			"Modified BSD License",
+			"TMF  ",
+			"Note that TMF854 requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/BSD-3-Clause."),
+	 DOJO(
+			"Modified BSD License",
+			"DOJO ",
+			"Note that DOJO requires a NOTICE. All modifications require notes. See http://dojotoolkit.org/community/licensing.shtml."),
+    W3C(
+            "W3C Software Copyright",
+            "W3C  ",
+            "Note that W3C requires a NOTICE. All modifications require notes. See http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231."),
+
+    W3C_DOCUMENTATION(
+            "W3C Document Copyright",
+            "W3CD ",
+            "Note that W3CD does not allow modifications. See http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231.");
+
+    /** @see LicenseFamily#getName() */
+    private final String name;
+    /** @see LicenseFamily#getCategory() */
+    private final String category;
+    /** @see LicenseFamily#getNotes() */
+    private final String notes;
+    /** Constructed from other data */
+    private final LicenseFamily licenseFamily;
+
+    /**
+     * Constructs an instance.
+     * 
+     * @param name
+     *            not null
+     * @param category
+     *            not null
+     * @param notes
+     *            not null
+     */
+    private RatLicenseFamily(final String name, final String category,
+            final String notes) {
+        this.name = name;
+        this.category = category;
+        this.notes = notes;
+        this.licenseFamily = aLicenseFamily().withCategory(getCategory())
+                .withName(getName()).withNotes(getNotes()).build();
+    }
+
+    /**
+     * @see LicenseFamily#getName()
+     * 
+     * @return not null
+     */
+    public String getName() {
+        return this.name;
+    }
+
+    /**
+     * @see LicenseFamily#getCategory()
+     * 
+     * @return possibly null
+     */
+    public String getCategory() {
+        return this.category;
+    }
+
+    /**
+     * @see LicenseFamily#getNotes()
+     * 
+     * @return possibly null
+     */
+    public String getNotes() {
+        return this.notes;
+    }
+
+    /**
+     * Gets a {@link LicenseFamily} representing this data.
+     * 
+     * @return not null
+     */
+    public LicenseFamily licenseFamily() {
+        return this.licenseFamily;
+    }
+}
diff --git a/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java b/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
new file mode 100644
index 0000000..739806c
--- /dev/null
+++ b/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rat.api.domain;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class LicenseFamilyBuilderTest {
+
+    @Test
+    public void testBuilderBuilds() {
+        final LicenseFamily family =
+                LicenseFamilyBuilder.aLicenseFamily().build();
+        assertNotNull("Builder should build", family);
+    }
+
+    @Test
+    public void testWithNotes() {
+        final String someNotes = "Some notes";
+        final LicenseFamily family =
+                LicenseFamilyBuilder.aLicenseFamily().withNotes(someNotes)
+                        .build();
+        assertThat(family.getNotes(), is(someNotes));
+    }
+
+    @Test
+    public void testWithCategory() {
+        final String someCategory = "Some license category";
+        final LicenseFamily family =
+                LicenseFamilyBuilder.aLicenseFamily()
+                        .withCategory(someCategory).build();
+        assertThat(family.getCategory(), is(someCategory));
+    }
+
+    @Test
+    public void testWithName() {
+        final String someName = "A name for a license";
+        final LicenseFamily family =
+                LicenseFamilyBuilder.aLicenseFamily().withName(someName)
+                        .build();
+        assertThat(family.getName(), is(someName));
+
+    }
+}
diff --git a/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java b/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
new file mode 100644
index 0000000..bf7c7bd
--- /dev/null
+++ b/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rat.api.domain;
+
+import static org.apache.rat.api.domain.RatLicenseFamily.APACHE;
+import static org.apache.rat.api.domain.RatLicenseFamily.CDDL1;
+import static org.apache.rat.api.domain.RatLicenseFamily.DOJO;
+import static org.apache.rat.api.domain.RatLicenseFamily.GPL1;
+import static org.apache.rat.api.domain.RatLicenseFamily.GPL2;
+import static org.apache.rat.api.domain.RatLicenseFamily.GPL3;
+import static org.apache.rat.api.domain.RatLicenseFamily.MIT;
+import static org.apache.rat.api.domain.RatLicenseFamily.OASIS;
+import static org.apache.rat.api.domain.RatLicenseFamily.TMF854;
+import static org.apache.rat.api.domain.RatLicenseFamily.W3C;
+import static org.apache.rat.api.domain.RatLicenseFamily.W3C_DOCUMENTATION;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class RatLicenseFamilyTest {
+
+    @Test
+    public void testW3CLicenseFamilyCategory() {
+        assertThat(W3C.getCategory(), is("W3C  "));
+    }
+
+    @Test
+    public void testW3CLicenseFamilyName() {
+        assertThat(W3C.getName(), is("W3C Software Copyright"));
+    }
+
+    @Test
+    public void testW3CLicenseFamilyNotes() {
+        assertThat(
+                W3C.getNotes(),
+                is("Note that W3C requires a NOTICE. All modifications require notes. See http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231."));
+    }
+
+    @Test
+    public void testW3CDocLicenseFamilyCategory() {
+        assertThat(W3C_DOCUMENTATION.getCategory(), is("W3CD "));
+    }
+
+    @Test
+    public void testW3CDocLicenseFamilyName() {
+        assertThat(W3C_DOCUMENTATION.getName(), is("W3C Document Copyright"));
+    }
+
+    @Test
+    public void testW3CDocLicenseFamilyNotes() {
+        assertThat(
+                W3C_DOCUMENTATION.getNotes(),
+                is("Note that W3CD does not allow modifications. See http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231."));
+    }
+
+	@Test
+	public void testAPACHELicenseFamilyCategory() {
+		assertThat(APACHE.getCategory(), is("AL   "));
+	}
+
+	@Test
+	public void testAPACHELicenseFamilyName() {
+		assertThat(APACHE.getName(), is("Apache License Version 2.0"));
+	}
+
+	@Test
+	public void testAPACHELicenseFamilyNotes() {
+		assertThat(
+				APACHE.getNotes(),
+				is("Note that APACHE requires a NOTICE. All modifications require notes. See http://www.apache.org/licenses/LICENSE-2.0."));
+	}
+
+	@Test
+	public void testGPL1LicenseFamilyCategory() {
+		assertThat(GPL1.getCategory(), is("GPL1 "));
+	}
+
+	@Test
+	public void testGPL1LicenseFamilyName() {
+		assertThat(GPL1.getName(), is("GNU General Public License, version 1"));
+	}
+
+	@Test
+	public void testGPL1LicenseFamilyNotes() {
+		assertThat(
+				GPL1.getNotes(),
+				is("Note that GPL1 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-1.0.html."));
+	}
+
+	@Test
+	public void testGPL2LicenseFamilyCategory() {
+		assertThat(GPL2.getCategory(), is("GPL2 "));
+	}
+
+	@Test
+	public void testGPL2LicenseFamilyName() {
+		assertThat(GPL2.getName(), is("GNU General Public License, version 2"));
+	}
+
+	@Test
+	public void testGPL2LicenseFamilyNotes() {
+		assertThat(
+				GPL2.getNotes(),
+				is("Note that GPL2 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-2.0.html."));
+	}
+
+	@Test
+	public void testGPL3LicenseFamilyCategory() {
+		assertThat(GPL3.getCategory(), is("GPL3 "));
+	}
+
+	@Test
+	public void testGPL3LicenseFamilyName() {
+		assertThat(GPL3.getName(), is("GNU General Public License, version 3"));
+	}
+
+	@Test
+	public void testGPL3LicenseFamilyNotes() {
+		assertThat(
+				GPL3.getNotes(),
+				is("Note that GPL3 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-3.0.html."));
+	}
+
+	@Test
+	public void testMITLicenseFamilyCategory() {
+		assertThat(MIT.getCategory(), is("MIT  "));
+	}
+
+	@Test
+	public void testMITLicenseFamilyName() {
+		assertThat(MIT.getName(), is("The MIT License"));
+	}
+
+	@Test
+	public void testMITLicenseFamilyNotes() {
+		assertThat(
+				MIT.getNotes(),
+				is("Note that MIT requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/MIT."));
+	}
+
+	@Test
+	public void testCDDL1LicenseFamilyCategory() {
+		assertThat(CDDL1.getCategory(), is("CDDL1"));
+	}
+
+	@Test
+	public void testCDDL1LicenseFamilyName() {
+		assertThat(CDDL1.getName(),
+				is("COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0"));
+	}
+
+	@Test
+	public void testCDDL1LicenseFamilyNotes() {
+		assertThat(
+				CDDL1.getNotes(),
+				is("Note that CDDL1 requires a NOTICE. All modifications require notes. See https://oss.oracle.com/licenses/CDDL."));
+	}
+
+	@Test
+	public void testOASISLicenseFamilyCategory() {
+		assertThat(OASIS.getCategory(), is("OASIS"));
+	}
+
+	@Test
+	public void testOASISLicenseFamilyName() {
+		assertThat(OASIS.getName(), is("OASIS Open License"));
+	}
+
+	@Test
+	public void testOASISLicenseFamilyNotes() {
+		assertThat(
+				OASIS.getNotes(),
+				is("Note that OASIS requires a NOTICE. All modifications require notes. See https://www.oasis-open.org/policies-guidelines/ipr."));
+	}
+	
+	@Test
+	public void testTMF854LicenseFamilyCategory() {
+		assertThat(TMF854.getCategory(), is("TMF  "));
+	}
+
+	@Test
+	public void testTMF854LicenseFamilyName() {
+		assertThat(TMF854.getName(), is("Modified BSD License"));
+	}
+
+	@Test
+	public void testTMF854LicenseFamilyNotes() {
+		assertThat(
+				TMF854.getNotes(),
+				is("Note that TMF854 requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/BSD-3-Clause."));
+	}
+	
+	@Test
+	public void testDOJOLicenseFamilyCategory() {
+		assertThat(DOJO.getCategory(), is("DOJO "));
+	}
+
+	@Test
+	public void testDOJOLicenseFamilyName() {
+		assertThat(DOJO.getName(), is("Modified BSD License"));
+	}
+
+	@Test
+	public void testDOJOLicenseFamilyNotes() {
+		assertThat(
+				DOJO.getNotes(),
+				is("Note that DOJO requires a NOTICE. All modifications require notes. See http://dojotoolkit.org/community/licensing.shtml."));
+	}
+}
diff --git a/apache-rat-core/pom.xml b/apache-rat-core/pom.xml
index e77fd6e..1516a60 100644
--- a/apache-rat-core/pom.xml
+++ b/apache-rat-core/pom.xml
@@ -75,6 +75,10 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.rat</groupId>
+      <artifactId>apache-rat-api</artifactId>
+    </dependency>
+    <dependency>
       <groupId>commons-collections</groupId>
       <artifactId>commons-collections</artifactId>
     </dependency>
diff --git a/apache-rat-core/src/main/java/org/apache/rat/Report.java b/apache-rat-core/src/main/java/org/apache/rat/Report.java
index 509ec69..6492577 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/Report.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/Report.java
@@ -332,7 +332,7 @@
      * Output a report in the default style and default licence
      * header matcher. 
      * 
-     * @param out - the output stream to recieve the styled report
+     * @param out - the output stream to receive the styled report
      * @param configuration the configuration to use
      * @throws Exception in case of errors.
      * @since Rat 0.8
@@ -375,7 +375,6 @@
      * @param style an input stream representing the stylesheet to use for styling the report
      * @param pConfiguration current report configuration.
      * 
-     * @throws FileNotFoundException in case of I/O errors.
      * @throws IOException in case of I/O errors.
      * @throws TransformerConfigurationException in case of XML errors.
      * @throws InterruptedException in case of threading errors.
@@ -385,7 +384,7 @@
      */
     public static ClaimStatistic report(Writer out, IReportable base, final InputStream style, 
             ReportConfiguration pConfiguration) 
-    throws IOException, TransformerConfigurationException, FileNotFoundException, InterruptedException, RatException {
+    throws IOException, TransformerConfigurationException, InterruptedException, RatException {
         PipedReader reader = new PipedReader();
         PipedWriter writer = new PipedWriter(reader);
         ReportTransformer transformer = new ReportTransformer(out, style, reader);
diff --git a/apache-rat-plugin/pom.xml b/apache-rat-plugin/pom.xml
index e07b0f2..31f60db 100644
--- a/apache-rat-plugin/pom.xml
+++ b/apache-rat-plugin/pom.xml
@@ -70,6 +70,7 @@
               <exclude>src/it/it1/src.apt</exclude>
               <exclude>src/test/resources/unit/it2/src.txt</exclude>
               <exclude>src/test/resources/unit/it3/src.apt</exclude>
+              <exclude>**/*.iml</exclude>
             </excludes>
           </configuration>
         </plugin>
diff --git a/apache-rat-plugin/src/it/it4_RAT-168/pom.xml b/apache-rat-plugin/src/it/it4_RAT-168/pom.xml
index bfc69b3..0a419e3 100644
--- a/apache-rat-plugin/src/it/it4_RAT-168/pom.xml
+++ b/apache-rat-plugin/src/it/it4_RAT-168/pom.xml
@@ -21,7 +21,7 @@
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.rat.test</groupId>
-  <artifactId>it1</artifactId>
+  <artifactId>it4rat168</artifactId>
   <version>1.0</version>
   <build>
     <plugins>
diff --git a/pom.xml b/pom.xml
index a85cb01..919f6e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,6 +83,11 @@
     <dependencies>
       <dependency>
         <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-api</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-core</artifactId>
         <version>${project.version}</version>
       </dependency>
@@ -126,11 +131,23 @@
       </dependency>
       <dependency>
         <groupId>org.mockito</groupId>
+        <artifactId>mockito-core</artifactId>
+        <version>1.9.5</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.mockito</groupId>
         <artifactId>mockito-all</artifactId>
         <version>1.9.5</version>
         <scope>test</scope>
       </dependency>
       <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-library</artifactId>
+        <version>1.2.1</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
         <groupId>org.apache.ant</groupId>
         <artifactId>ant</artifactId>
         <version>1.7.1</version>
@@ -568,6 +585,7 @@
     </site>
   </distributionManagement>
   <modules>
+    <module>apache-rat-api</module>
     <module>apache-rat-core</module>
     <module>apache-rat-plugin</module>
     <module>apache-rat-tasks</module>