You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@creadur.apache.org by rd...@apache.org on 2009/05/22 13:23:53 UTC

svn commit: r777475 - in /incubator/rat/main/trunk/apache-rat-core/src: main/java/org/apache/rat/analysis/generation/ main/java/org/apache/rat/analysis/license/ main/java/org/apache/rat/api/ main/java/org/apache/rat/report/analyser/ main/java/org/apach...

Author: rdonkin
Date: Fri May 22 11:23:53 2009
New Revision: 777475

URL: http://svn.apache.org/viewvc?rev=777475&view=rev
Log:
RAT-53 Store sample header in MetaData. https://issues.apache.org/jira/browse/RAT-53

Modified:
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/analyser/HeaderCheckWorker.java
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseFamilyClaim.java
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseHeaderClaim.java
    incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
    incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java Fri May 22 11:23:53 2009
@@ -80,8 +80,7 @@
 
     private void reportOnLicense(IDocument subject, IClaimReporter reporter) throws RatHeaderAnalysisException {
         try {
-            reporter.claim(new LicenseHeaderClaim(subject, LicenseFamilyCode.GENERATED,
-                    "Generated files do not required license headers"));
+            reporter.claim(new LicenseHeaderClaim(subject, LicenseFamilyCode.GENERATED));
         } catch (RatReportFailedException e) {
             throw new RatHeaderAnalysisException("Cannot write claims", e);
         }

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java Fri May 22 11:23:53 2009
@@ -48,8 +48,7 @@
 
     private void reportOnLicense(IDocument subject, IClaimReporter reporter) throws RatHeaderAnalysisException {
         try {
-            reporter.claim(new LicenseHeaderClaim(subject, LicenseFamilyCode.GENERATED,
-                    "JavaDocs are generated and so license header is optional"));
+            reporter.claim(new LicenseHeaderClaim(subject, LicenseFamilyCode.GENERATED));
         } catch (RatReportFailedException e) {
             throw new RatHeaderAnalysisException("Cannot write claims", e);
         }

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java Fri May 22 11:23:53 2009
@@ -19,6 +19,7 @@
 package org.apache.rat.analysis.license;
 
 import org.apache.rat.analysis.RatHeaderAnalysisException;
+import org.apache.rat.api.MetaData;
 import org.apache.rat.document.IDocument;
 import org.apache.rat.report.RatReportFailedException;
 import org.apache.rat.report.claim.IClaimReporter;
@@ -42,8 +43,9 @@
         final LicenseFamilyName name = getName();
         final LicenseFamilyCode code = getCode();
         final String notes = getNotes();
+        subject.getMetaData().set(new MetaData.Datum(MetaData.RAT_URL_HEADER_SAMPLE, notes));
         try {
-            reporter.claim(new LicenseFamilyClaim(subject, name, code, notes));
+            reporter.claim(new LicenseFamilyClaim(subject, name, code));
         } catch (RatReportFailedException e) {
             // Cannot recover
             throw new RatHeaderAnalysisException("Cannot report on license information", e);

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java Fri May 22 11:23:53 2009
@@ -40,7 +40,7 @@
     public static final String RAT_DOCUMENT_CATEGORY_VALUE_NOTICE = "notice";
     public static final String RAT_DOCUMENT_CATEGORY_VALUE_BINARY = "binary";
     public static final String RAT_DOCUMENT_CATEGORY_VALUE_STANDARD = "standard";
-    public static final String RAT_DOCUMENT_CATEGORY_URL = RAT_BASE_URL + "#FileCategory";
+    public static final String RAT_URL_DOCUMENT_CATEGORY = RAT_BASE_URL + "#FileCategory";
     
     // License Family Categories
     public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GEN = "GEN  ";
@@ -51,7 +51,7 @@
     public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3C = "W3C  ";
     public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_DOJO = "DOJO ";
     public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_TMF = "TMF  ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_URL= RAT_BASE_URL + "LicenseFamilyCategory";
+    public static final String RAT_URL_LICENSE_FAMILY_CATEGORY= RAT_BASE_URL + "LicenseFamilyCategory";
 
     // License Family Standard Names
     public static final String RAT_LICENSE_FAMILY_NAME_VALUE_W3C_SOFTWARE_COPYRIGHT = "W3C Software Copyright";
@@ -61,7 +61,10 @@
     public static final String RAT_LICENSE_FAMILY_NAME_VALUE_APACHE_LICENSE_VERSION_2_0 = "Apache License Version 2.0";
     public static final String RAT_LICENSE_FAMILY_NAME_VALUE_ACADEMIC_FREE_LICENSE_VERSION_2_1 = "Academic Free License, Version 2.1";
     public static final String RAT_LICENSE_FAMILY_NAME_VALUE_UNKNOWN = "?????";
-    public static final String RAT_LICENSE_FAMILY_NAME_URL= RAT_BASE_URL + "LicenseFamilyName";
+    public static final String RAT_URL_LICENSE_FAMILY_NAME= RAT_BASE_URL + "LicenseFamilyName";
+    
+    // Header sample
+    public static final String RAT_URL_HEADER_SAMPLE = RAT_BASE_URL + "HeaderSample";
     
     private ContentType contentType;
     /** 
@@ -108,7 +111,7 @@
      * Adds a new datum.
      * Existing data with the same name are not replaced.
      * @param datum
-     * @see #put(org.apache.rat.api.MetaData.Datum)
+     * @see #set(org.apache.rat.api.MetaData.Datum)
      */
     public void add(final Datum datum) {
        data.add(datum); 
@@ -120,8 +123,27 @@
      * @param datum not null
      * @see #add(org.apache.rat.api.MetaData.Datum)
      */
-    public void put(final Datum datum) {
+    public void set(final Datum datum) {
        clear(datum.getName()); 
+       add(datum);
+    }
+    
+    /**
+     * Gets the first datum matching the given name.
+     * @param name not null
+     * @return the matching datum first added when there is any matching data,
+     * null otherwise
+     */
+    public Datum get(final String name) {
+        Datum result = null;
+        for (final Iterator/*<Datum>*/ it=data.iterator();it.hasNext();) {
+            final Datum next = (Datum) it.next();
+            if (name.equals(next.getName())) {
+                result = next;
+                break;
+            }
+        }
+        return result;
     }
     
     /**

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/analyser/HeaderCheckWorker.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/analyser/HeaderCheckWorker.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/analyser/HeaderCheckWorker.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/analyser/HeaderCheckWorker.java Fri May 22 11:23:53 2009
@@ -24,6 +24,7 @@
 
 import org.apache.rat.analysis.IHeaderMatcher;
 import org.apache.rat.analysis.RatHeaderAnalysisException;
+import org.apache.rat.api.MetaData;
 import org.apache.rat.document.IDocument;
 import org.apache.rat.report.RatReportFailedException;
 import org.apache.rat.report.claim.IClaimReporter;
@@ -43,7 +44,7 @@
 	private final BufferedReader reader;
 	private final IHeaderMatcher matcher;
 	private final IClaimReporter reporter;
-    private final IDocument name;
+    private final IDocument subject;
     
 	private boolean match = false;
 	
@@ -77,7 +78,7 @@
 		this.numberOfRetainedHeaderLines = numberOfRetainedHeaderLine;
 		this.matcher = matcher;
         this.reporter = reporter;
-        this.name = name;
+        this.subject = name;
 	}
 
 	public boolean isFinished() {
@@ -92,12 +93,13 @@
 				while(readLine(headers));
 				if (!match) {
 					final String notes = headers.toString();
-					reporter.claim(new LicenseFamilyClaim(name, LicenseFamilyName.UNKNOWN_LICENSE_FAMILY, LicenseFamilyCode.UNKNOWN, notes));
+                    subject.getMetaData().set(new MetaData.Datum(MetaData.RAT_URL_HEADER_SAMPLE, notes));
+					reporter.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.UNKNOWN_LICENSE_FAMILY, LicenseFamilyCode.UNKNOWN));
 				}
 			} catch (IOException e) {
-                throw new RatHeaderAnalysisException("Cannot read header for " + name, e);
+                throw new RatHeaderAnalysisException("Cannot read header for " + subject, e);
 			} catch (RatReportFailedException e) {
-                throw new RatHeaderAnalysisException("Cannot write claim for " + name, e);
+                throw new RatHeaderAnalysisException("Cannot write claim for " + subject, e);
             }
 			try {
 				reader.close();
@@ -117,7 +119,7 @@
 				headers.append(line);
 				headers.append('\n');
 			}
-            match = matcher.match(name, line, reporter);
+            match = matcher.match(subject, line, reporter);
 			result = !match;
 		}
 		return result;

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseFamilyClaim.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseFamilyClaim.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseFamilyClaim.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseFamilyClaim.java Fri May 22 11:23:53 2009
@@ -17,8 +17,8 @@
      * the given license family name.
      */
     public LicenseFamilyClaim(IDocument pSubject, LicenseFamilyName pName,
-            LicenseFamilyCode pCode, String pHeaderSample) {
-        super(pSubject, pCode, pHeaderSample);
+            LicenseFamilyCode pCode) {
+        super(pSubject, pCode);
         licenseFamilyName = pName;
     }
 

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseHeaderClaim.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseHeaderClaim.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseHeaderClaim.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/LicenseHeaderClaim.java Fri May 22 11:23:53 2009
@@ -12,16 +12,14 @@
  */
 public class LicenseHeaderClaim extends AbstractClaim {
     private final LicenseFamilyCode licenseFamilyCode;
-    private final String headerSample;
 
     /**
      * Creates a new instance with the given subject, license
      * family code, and header sample.
      */
-    public LicenseHeaderClaim(IDocument pSubject, LicenseFamilyCode pCode, String pHeaderSample) {
+    public LicenseHeaderClaim(IDocument pSubject, LicenseFamilyCode pCode) {
         super(pSubject);
         licenseFamilyCode = pCode;
-        headerSample = pHeaderSample;
     }
 
     /**
@@ -30,11 +28,4 @@
     public LicenseFamilyCode getLicenseFamilyCode() {
         return licenseFamilyCode;
     }
-
-    /**
-     * Returns the header sample.
-     */
-    public String getHeaderSample() {
-        return headerSample;
-    }
 }

Modified: incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java Fri May 22 11:23:53 2009
@@ -20,6 +20,7 @@
 
 import java.io.IOException;
 
+import org.apache.rat.api.MetaData;
 import org.apache.rat.document.IDocument;
 import org.apache.rat.report.RatReportFailedException;
 import org.apache.rat.report.claim.IClaim;
@@ -44,6 +45,7 @@
     private final IXmlWriter writer;
     private IDocument lastSubject;
     private IDocument subject;
+    private boolean writtenDocumentClaims = false;
     
     public SimpleXmlClaimReporter(final IXmlWriter writer) {
         this.writer = writer;
@@ -67,7 +69,6 @@
 
     protected void handleClaim(LicenseHeaderClaim pClaim)
             throws IOException, RatReportFailedException {
-        writeClaim(HEADER_SAMPLE_PREDICATE, pClaim.getHeaderSample(), true);
         writeClaim(HEADER_TYPE_PREDICATE, pClaim.getLicenseFamilyCode().getName(), false);
     }
 
@@ -112,6 +113,10 @@
 
     public void claim(IClaim pClaim) throws RatReportFailedException {
         try {
+            if(!writtenDocumentClaims) {
+                writeDocumentClaims(subject);
+                writtenDocumentClaims = true;
+            }
             handleClaim(pClaim);
         } catch (IOException e) {
             throw new RatReportFailedException("XML writing failure: " + e.getMessage()
@@ -126,8 +131,12 @@
             if (!(subject.equals(lastSubject))) {
                 if (lastSubject != null) {
                     writer.closeElement();
+                    if(!writtenDocumentClaims) {
+                        writeDocumentClaims(lastSubject);
+                    }
                 }
                 writer.openElement("resource").attribute(NAME, subject.getName());
+                writtenDocumentClaims = false;
             }
             lastSubject = subject;
         } catch (IOException e) {
@@ -136,4 +145,15 @@
         }
     }
 
+    private void writeDocumentClaims(final IDocument subject) throws IOException, RatReportFailedException {
+        final MetaData metaData = subject.getMetaData();
+        final MetaData.Datum sampleDatum = metaData.get(MetaData.RAT_URL_HEADER_SAMPLE);
+        if (sampleDatum != null) {
+            final String sample = sampleDatum.getValue();
+            if (sample != null) {
+                writeClaim(HEADER_SAMPLE_PREDICATE, sample, true);
+            }
+        }
+    }
+
 }

Modified: incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java?rev=777475&r1=777474&r2=777475&view=diff
==============================================================================
--- incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java (original)
+++ incubator/rat/main/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java Fri May 22 11:23:53 2009
@@ -56,7 +56,7 @@
 
     public void testASLFamily() throws Exception {
         final IDocument subject = new MockLocation("subject");
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.APACHE_SOFTWARE_LICENSE_NAME, LicenseFamilyCode.ASL_CODE, ""));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.APACHE_SOFTWARE_LICENSE_NAME, LicenseFamilyCode.ASL_CODE));
         assertEquals("Approved claim", 1, reporter.claims.size());
         assertApproval(true);
     }
@@ -77,28 +77,28 @@
     
     public void testOASISFamily() throws Exception {
         final IDocument subject = new MockLocation("subject");
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.OASIS_OPEN_LICENSE_NAME, LicenseFamilyCode.OASIS_CODE, ""));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.OASIS_OPEN_LICENSE_NAME, LicenseFamilyCode.OASIS_CODE));
         assertEquals("Approved claim", 1, reporter.claims.size());
         assertApproval(true);
     }
     
     public void testW3CFamily() throws Exception {
         final IDocument subject = new MockLocation("subject");
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_SOFTWARE_COPYRIGHT_NAME, LicenseFamilyCode.W3C_CODE, ""));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_SOFTWARE_COPYRIGHT_NAME, LicenseFamilyCode.W3C_CODE));
         assertEquals("Approved claim", 1, reporter.claims.size());
         assertApproval(true);
     }
     
     public void testW3CDocFamily() throws Exception {
         final IDocument subject = new MockLocation("subject");
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_DOCUMENT_COPYRIGHT_NAME, LicenseFamilyCode.W3CD_CODE, ""));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_DOCUMENT_COPYRIGHT_NAME, LicenseFamilyCode.W3CD_CODE));
         assertEquals("Approved claim", 1, reporter.claims.size());
         assertApproval(true);
     }
     
     public void testUnknownFamily() throws Exception {
         final IDocument subject = new MockLocation("subject");
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.UNKNOWN_LICENSE_FAMILY, LicenseFamilyCode.UNKNOWN, ""));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.UNKNOWN_LICENSE_FAMILY, LicenseFamilyCode.UNKNOWN));
         assertEquals("Approved claim", 1, reporter.claims.size());
         assertApproval(false);
     }
@@ -108,16 +108,16 @@
         LicenseFamilyName[] custom = {new LicenseFamilyName("Example")};
         policy = new DefaultPolicy(reporter, custom);
         final IDocument subject = new MockLocation("subject");
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.UNKNOWN_LICENSE_FAMILY, LicenseFamilyCode.UNKNOWN, ""));
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_DOCUMENT_COPYRIGHT_NAME, LicenseFamilyCode.W3CD_CODE, ""));
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_SOFTWARE_COPYRIGHT_NAME, LicenseFamilyCode.W3C_CODE, ""));
-        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.APACHE_SOFTWARE_LICENSE_NAME, LicenseFamilyCode.ASL_CODE, ""));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.UNKNOWN_LICENSE_FAMILY, LicenseFamilyCode.UNKNOWN));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_DOCUMENT_COPYRIGHT_NAME, LicenseFamilyCode.W3CD_CODE));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.W3C_SOFTWARE_COPYRIGHT_NAME, LicenseFamilyCode.W3C_CODE));
+        policy.claim(new LicenseFamilyClaim(subject, LicenseFamilyName.APACHE_SOFTWARE_LICENSE_NAME, LicenseFamilyCode.ASL_CODE));
         assertEquals("Four unapproved claims", 4, reporter.claims.size());
         assertApproval(false, (IClaim) reporter.claims.get(0));
         assertApproval(false, (IClaim) reporter.claims.get(1));
         assertApproval(false, (IClaim) reporter.claims.get(2));
         assertApproval(false, (IClaim) reporter.claims.get(3));
-        policy.claim(new LicenseFamilyClaim(subject, custom[0], new LicenseFamilyCode("EXAMP"), ""));
+        policy.claim(new LicenseFamilyClaim(subject, custom[0], new LicenseFamilyCode("EXAMP")));
         assertEquals("Approved claim", 5, reporter.claims.size());
         assertApproval(true, (IClaim) reporter.claims.get(4));
     }