You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2021/05/31 10:54:22 UTC

[maven-doxia-linkcheck] 01/01: remove dependency on Modello

This is an automated email from the ASF dual-hosted git repository.

elharo pushed a commit to branch nomdo
in repository https://gitbox.apache.org/repos/asf/maven-doxia-linkcheck.git

commit 6ef64f51afb1348ef7b137ec2b50c76d776bfd47
Author: Elliotte Rusty Harold <el...@ibiblio.org>
AuthorDate: Mon May 31 06:54:03 2021 -0400

    remove dependency on Modello
---
 pom.xml                                            |  36 -
 .../org/apache/maven/doxia/linkcheck/HttpBean.java | 484 ++++++++++++
 .../maven/doxia/linkcheck/model/LinkcheckFile.java | 340 ++++++++
 .../doxia/linkcheck/model/LinkcheckFileResult.java | 246 ++++++
 .../doxia/linkcheck/model/LinkcheckModel.java      | 173 +++++
 .../model/io/xpp3/LinkcheckModelXpp3Reader.java    | 859 +++++++++++++++++++++
 .../model/io/xpp3/LinkcheckModelXpp3Writer.java    | 200 +++++
 src/main/mdo/httpbean.mdo                          | 173 -----
 src/main/mdo/linkcheck.mdo                         | 274 -------
 9 files changed, 2302 insertions(+), 483 deletions(-)

diff --git a/pom.xml b/pom.xml
index 205bcaf..3942b8b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -112,41 +112,5 @@ under the License.
         </plugin>
       </plugins>
     </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.modello</groupId>
-        <artifactId>modello-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>linkcheck</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>java</goal>
-              <goal>xpp3-reader</goal>
-              <goal>xpp3-writer</goal>
-            </goals>
-            <configuration>
-              <models>
-                <model>src/main/mdo/linkcheck.mdo</model>
-              </models>
-              <version>1.0.0</version>
-            </configuration>
-          </execution>
-          <execution>
-            <id>httpbean</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>java</goal>
-            </goals>
-            <configuration>
-              <models>
-                <model>src/main/mdo/httpbean.mdo</model>
-              </models>
-              <version>1.0.0</version>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
   </build>
 </project>
\ No newline at end of file
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/HttpBean.java b/src/main/java/org/apache/maven/doxia/linkcheck/HttpBean.java
new file mode 100644
index 0000000..21112fc
--- /dev/null
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/HttpBean.java
@@ -0,0 +1,484 @@
+package org.apache.maven.doxia.linkcheck;
+
+/*
+ * 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.
+ */
+
+/**
+ * Http bean to encapsulate the supported HTTP parameters.
+ *          @see org.apache.commons.httpclient.HttpMethod.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class HttpBean
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *      The HTTP method to use. Currently supported are "GET"
+     * and "HEAD".
+     *      <dl>
+     *      <dt>HTTP GET</dt>
+     *      <dd>
+     *      The HTTP GET method is defined in section 9.3 of
+     *      <a
+     * HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
+     *      <blockquote>
+     *      The GET method means retrieve whatever information (in
+     * the form of an
+     *      entity) is identified by the Request-URI.
+     *      </blockquote>
+     *      </dd>
+     *      <dt>HTTP HEAD</dt>
+     *      <dd>
+     *      The HTTP HEAD method is defined in section 9.4 of
+     *      <a
+     * HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
+     *      <blockquote>
+     *      The HEAD method is identical to GET except that the
+     * server MUST NOT
+     *      return a message-body in the response.
+     *      </blockquote>
+     *      </dd>
+     *      </dl>
+     */
+    private String method = "head";
+
+    /**
+     * 
+     *      if the HTTP method should automatically follow HTTP
+     * redirects
+     *      (status code 302, etc.), <tt>false</tt> otherwise.
+     */
+    private boolean followRedirects = false;
+
+    /**
+     * The proxy host.
+     */
+    private String proxyHost;
+
+    /**
+     * The proxy port.
+     */
+    private int proxyPort = 0;
+
+    /**
+     * The proxy user.
+     */
+    private String proxyUser;
+
+    /**
+     * The proxy password.
+     */
+    private String proxyPassword;
+
+    /**
+     * The proxy NTLM (NT Lan Manager) host.
+     */
+    private String proxyNtlmHost;
+
+    /**
+     * The proxy NTLM (NT Lan Manager) domain.
+     */
+    private String proxyNtlmDomain;
+
+    /**
+     * The timeout to be used. A value of zero means the timeout is
+     * not used.
+     *             Default value is 2000.
+     */
+    private int timeout = 2000;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method equals.
+     * 
+     * @param other
+     * @return boolean
+     */
+    public boolean equals( Object other )
+    {
+        if ( this == other )
+        {
+            return true;
+        }
+
+        if ( !( other instanceof HttpBean ) )
+        {
+            return false;
+        }
+
+        HttpBean that = (HttpBean) other;
+        boolean result = true;
+
+        result = result && ( getMethod() == null ? that.getMethod() == null : getMethod().equals( that.getMethod() ) );
+        result = result && followRedirects == that.followRedirects;
+        result = result && ( getProxyHost() == null ? that.getProxyHost() == null : getProxyHost().equals( that.getProxyHost() ) );
+        result = result && proxyPort == that.proxyPort;
+        result = result && ( getProxyUser() == null ? that.getProxyUser() == null : getProxyUser().equals( that.getProxyUser() ) );
+        result = result && ( getProxyPassword() == null ? that.getProxyPassword() == null : getProxyPassword().equals( that.getProxyPassword() ) );
+        result = result && ( getProxyNtlmHost() == null ? that.getProxyNtlmHost() == null : getProxyNtlmHost().equals( that.getProxyNtlmHost() ) );
+        result = result && ( getProxyNtlmDomain() == null ? that.getProxyNtlmDomain() == null : getProxyNtlmDomain().equals( that.getProxyNtlmDomain() ) );
+        result = result && timeout == that.timeout;
+
+        return result;
+    } //-- boolean equals( Object )
+
+    /**
+     * Get the HTTP method to use. Currently supported are "GET"
+     * and "HEAD".
+     *      <dl>
+     *      <dt>HTTP GET</dt>
+     *      <dd>
+     *      The HTTP GET method is defined in section 9.3 of
+     *      <a
+     * HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
+     *      <blockquote>
+     *      The GET method means retrieve whatever information (in
+     * the form of an
+     *      entity) is identified by the Request-URI.
+     *      </blockquote>
+     *      </dd>
+     *      <dt>HTTP HEAD</dt>
+     *      <dd>
+     *      The HTTP HEAD method is defined in section 9.4 of
+     *      <a
+     * HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
+     *      <blockquote>
+     *      The HEAD method is identical to GET except that the
+     * server MUST NOT
+     *      return a message-body in the response.
+     *      </blockquote>
+     *      </dd>
+     *      </dl>
+     * 
+     * @return String
+     */
+    public String getMethod()
+    {
+        return this.method;
+    } //-- String getMethod()
+
+    /**
+     * Get the proxy host.
+     * 
+     * @return String
+     */
+    public String getProxyHost()
+    {
+        return this.proxyHost;
+    } //-- String getProxyHost()
+
+    /**
+     * Get the proxy NTLM (NT Lan Manager) domain.
+     * 
+     * @return String
+     */
+    public String getProxyNtlmDomain()
+    {
+        return this.proxyNtlmDomain;
+    } //-- String getProxyNtlmDomain()
+
+    /**
+     * Get the proxy NTLM (NT Lan Manager) host.
+     * 
+     * @return String
+     */
+    public String getProxyNtlmHost()
+    {
+        return this.proxyNtlmHost;
+    } //-- String getProxyNtlmHost()
+
+    /**
+     * Get the proxy password.
+     * 
+     * @return String
+     */
+    public String getProxyPassword()
+    {
+        return this.proxyPassword;
+    } //-- String getProxyPassword()
+
+    /**
+     * Get the proxy port.
+     * 
+     * @return int
+     */
+    public int getProxyPort()
+    {
+        return this.proxyPort;
+    } //-- int getProxyPort()
+
+    /**
+     * Get the proxy user.
+     * 
+     * @return String
+     */
+    public String getProxyUser()
+    {
+        return this.proxyUser;
+    } //-- String getProxyUser()
+
+    /**
+     * Get the timeout to be used. A value of zero means the
+     * timeout is not used.
+     *             Default value is 2000.
+     * 
+     * @return int
+     */
+    public int getTimeout()
+    {
+        return this.timeout;
+    } //-- int getTimeout()
+
+    /**
+     * Method hashCode.
+     * 
+     * @return int
+     */
+    public int hashCode()
+    {
+        int result = 17;
+
+        result = 37 * result + ( method != null ? method.hashCode() : 0 );
+        result = 37 * result + ( followRedirects ? 0 : 1 );
+        result = 37 * result + ( proxyHost != null ? proxyHost.hashCode() : 0 );
+        result = 37 * result + (int) proxyPort;
+        result = 37 * result + ( proxyUser != null ? proxyUser.hashCode() : 0 );
+        result = 37 * result + ( proxyPassword != null ? proxyPassword.hashCode() : 0 );
+        result = 37 * result + ( proxyNtlmHost != null ? proxyNtlmHost.hashCode() : 0 );
+        result = 37 * result + ( proxyNtlmDomain != null ? proxyNtlmDomain.hashCode() : 0 );
+        result = 37 * result + (int) timeout;
+
+        return result;
+    } //-- int hashCode()
+
+    /**
+     * Get if the HTTP method should automatically follow HTTP
+     * redirects
+     *      (status code 302, etc.), <tt>false</tt> otherwise.
+     * 
+     * @return boolean
+     */
+    public boolean isFollowRedirects()
+    {
+        return this.followRedirects;
+    } //-- boolean isFollowRedirects()
+
+    /**
+     * Set if the HTTP method should automatically follow HTTP
+     * redirects
+     *      (status code 302, etc.), <tt>false</tt> otherwise.
+     * 
+     * @param followRedirects
+     */
+    public void setFollowRedirects( boolean followRedirects )
+    {
+        this.followRedirects = followRedirects;
+    } //-- void setFollowRedirects( boolean )
+
+    /**
+     * Set the HTTP method to use. Currently supported are "GET"
+     * and "HEAD".
+     *      <dl>
+     *      <dt>HTTP GET</dt>
+     *      <dd>
+     *      The HTTP GET method is defined in section 9.3 of
+     *      <a
+     * HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
+     *      <blockquote>
+     *      The GET method means retrieve whatever information (in
+     * the form of an
+     *      entity) is identified by the Request-URI.
+     *      </blockquote>
+     *      </dd>
+     *      <dt>HTTP HEAD</dt>
+     *      <dd>
+     *      The HTTP HEAD method is defined in section 9.4 of
+     *      <a
+     * HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
+     *      <blockquote>
+     *      The HEAD method is identical to GET except that the
+     * server MUST NOT
+     *      return a message-body in the response.
+     *      </blockquote>
+     *      </dd>
+     *      </dl>
+     * 
+     * @param method
+     */
+    public void setMethod( String method )
+    {
+        this.method = method;
+    } //-- void setMethod( String )
+
+    /**
+     * Set the proxy host.
+     * 
+     * @param proxyHost
+     */
+    public void setProxyHost( String proxyHost )
+    {
+        this.proxyHost = proxyHost;
+    } //-- void setProxyHost( String )
+
+    /**
+     * Set the proxy NTLM (NT Lan Manager) domain.
+     * 
+     * @param proxyNtlmDomain
+     */
+    public void setProxyNtlmDomain( String proxyNtlmDomain )
+    {
+        this.proxyNtlmDomain = proxyNtlmDomain;
+    } //-- void setProxyNtlmDomain( String )
+
+    /**
+     * Set the proxy NTLM (NT Lan Manager) host.
+     * 
+     * @param proxyNtlmHost
+     */
+    public void setProxyNtlmHost( String proxyNtlmHost )
+    {
+        this.proxyNtlmHost = proxyNtlmHost;
+    } //-- void setProxyNtlmHost( String )
+
+    /**
+     * Set the proxy password.
+     * 
+     * @param proxyPassword
+     */
+    public void setProxyPassword( String proxyPassword )
+    {
+        this.proxyPassword = proxyPassword;
+    } //-- void setProxyPassword( String )
+
+    /**
+     * Set the proxy port.
+     * 
+     * @param proxyPort
+     */
+    public void setProxyPort( int proxyPort )
+    {
+        this.proxyPort = proxyPort;
+    } //-- void setProxyPort( int )
+
+    /**
+     * Set the proxy user.
+     * 
+     * @param proxyUser
+     */
+    public void setProxyUser( String proxyUser )
+    {
+        this.proxyUser = proxyUser;
+    } //-- void setProxyUser( String )
+
+    /**
+     * Method toString.
+     * 
+     * @return String
+     */
+    public java.lang.String toString()
+    {
+        StringBuilder buf = new StringBuilder( 128 );
+
+        buf.append( "method = '" );
+        buf.append( getMethod() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "followRedirects = '" );
+        buf.append( isFollowRedirects() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "proxyHost = '" );
+        buf.append( getProxyHost() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "proxyPort = '" );
+        buf.append( getProxyPort() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "proxyUser = '" );
+        buf.append( getProxyUser() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "proxyPassword = '" );
+        buf.append( getProxyPassword() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "proxyNtlmHost = '" );
+        buf.append( getProxyNtlmHost() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "proxyNtlmDomain = '" );
+        buf.append( getProxyNtlmDomain() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "timeout = '" );
+        buf.append( getTimeout() );
+        buf.append( "'" );
+
+        return buf.toString();
+    } //-- java.lang.String toString()
+
+    
+          
+    /**
+     * Set the timeout to be used. A value of zero means the timeout is not used.
+     *
+     * @param timeout positive int
+     */
+    public void setTimeout( int timeout )
+    {
+        if ( timeout < 0 )
+        {
+            throw new IllegalArgumentException( timeout + " should be 0 or positive." );
+        }
+        this.timeout = timeout;
+    }
+
+    private java.util.Properties httpClientParameters;
+
+    /**
+     * @return the extra HttpClient parameters
+     * @see http://hc.apache.org/httpclient-3.x/preference-api.html
+     */
+    public java.util.Properties getHttpClientParameters()
+    {
+        return httpClientParameters;
+    }
+
+    /**
+     * @param httpClientParameters the extra HttpClient parameters to set
+     * @see http://hc.apache.org/httpclient-3.x/preference-api.html
+     */
+    public void setHttpClientParameters( java.util.Properties httpClientParameters )
+    {
+        this.httpClientParameters = httpClientParameters;
+    }
+          
+}
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckFile.java b/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckFile.java
new file mode 100644
index 0000000..dba2213
--- /dev/null
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckFile.java
@@ -0,0 +1,340 @@
+package org.apache.maven.doxia.linkcheck.model;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The <code>&lt;file&gt;</code> to be checked.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LinkcheckFile
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The file to check as String Object.
+     *           
+     */
+    private String absolutePath;
+
+    /**
+     * 
+     *             The relative path of the file.
+     *           
+     */
+    private String relativePath;
+
+    /**
+     * 
+     *             The number of successful links in this file.
+     *           
+     */
+    private int successful = -1;
+
+    /**
+     * 
+     *             The number of unsuccessful links in this file.
+     *           
+     */
+    private int unsuccessful = -1;
+
+    /**
+     * Field results.
+     */
+    private java.util.List<LinkcheckFileResult> results;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addResult.
+     * 
+     * @param linkcheckFileResult
+     */
+    public void addResult( LinkcheckFileResult linkcheckFileResult )
+    {
+        getResults().add( linkcheckFileResult );
+    } //-- void addResult( LinkcheckFileResult )
+
+    /**
+     * Method equals.
+     * 
+     * @param other
+     * @return boolean
+     */
+    public boolean equals( Object other )
+    {
+        if ( this == other )
+        {
+            return true;
+        }
+
+        if ( !( other instanceof LinkcheckFile ) )
+        {
+            return false;
+        }
+
+        LinkcheckFile that = (LinkcheckFile) other;
+        boolean result = true;
+
+        result = result && ( getAbsolutePath() == null ? that.getAbsolutePath() == null : getAbsolutePath().equals( that.getAbsolutePath() ) );
+        result = result && ( getRelativePath() == null ? that.getRelativePath() == null : getRelativePath().equals( that.getRelativePath() ) );
+        result = result && successful == that.successful;
+        result = result && unsuccessful == that.unsuccessful;
+        result = result && ( getResults() == null ? that.getResults() == null : getResults().equals( that.getResults() ) );
+
+        return result;
+    } //-- boolean equals( Object )
+
+    /**
+     * Get the file to check as String Object.
+     * 
+     * @return String
+     */
+    public String getAbsolutePath()
+    {
+        return this.absolutePath;
+    } //-- String getAbsolutePath()
+
+    /**
+     * Get the relative path of the file.
+     * 
+     * @return String
+     */
+    public String getRelativePath()
+    {
+        return this.relativePath;
+    } //-- String getRelativePath()
+
+    /**
+     * Method getResults.
+     * 
+     * @return List
+     */
+    public java.util.List<LinkcheckFileResult> getResults()
+    {
+        if ( this.results == null )
+        {
+            this.results = new java.util.ArrayList<LinkcheckFileResult>();
+        }
+
+        return this.results;
+    } //-- java.util.List<LinkcheckFileResult> getResults()
+
+    /**
+     * Get the number of successful links in this file.
+     * 
+     * @return int
+     */
+    public int getSuccessful()
+    {
+        return this.successful;
+    } //-- int getSuccessful()
+
+    /**
+     * Get the number of unsuccessful links in this file.
+     * 
+     * @return int
+     */
+    public int getUnsuccessful()
+    {
+        return this.unsuccessful;
+    } //-- int getUnsuccessful()
+
+    /**
+     * Method hashCode.
+     * 
+     * @return int
+     */
+    public int hashCode()
+    {
+        int result = 17;
+
+        result = 37 * result + ( absolutePath != null ? absolutePath.hashCode() : 0 );
+        result = 37 * result + ( relativePath != null ? relativePath.hashCode() : 0 );
+        result = 37 * result + (int) successful;
+        result = 37 * result + (int) unsuccessful;
+        result = 37 * result + ( results != null ? results.hashCode() : 0 );
+
+        return result;
+    } //-- int hashCode()
+
+    /**
+     * Method removeResult.
+     * 
+     * @param linkcheckFileResult
+     */
+    public void removeResult( LinkcheckFileResult linkcheckFileResult )
+    {
+        getResults().remove( linkcheckFileResult );
+    } //-- void removeResult( LinkcheckFileResult )
+
+    /**
+     * Set the file to check as String Object.
+     * 
+     * @param absolutePath
+     */
+    public void setAbsolutePath( String absolutePath )
+    {
+        this.absolutePath = absolutePath;
+    } //-- void setAbsolutePath( String )
+
+    /**
+     * Set the relative path of the file.
+     * 
+     * @param relativePath
+     */
+    public void setRelativePath( String relativePath )
+    {
+        this.relativePath = relativePath;
+    } //-- void setRelativePath( String )
+
+    /**
+     * Set all error details in this file.
+     * 
+     * @param results
+     */
+    public void setResults( java.util.List<LinkcheckFileResult> results )
+    {
+        this.results = results;
+    } //-- void setResults( java.util.List )
+
+    /**
+     * Set the number of successful links in this file.
+     * 
+     * @param successful
+     */
+    public void setSuccessful( int successful )
+    {
+        this.successful = successful;
+    } //-- void setSuccessful( int )
+
+    /**
+     * Set the number of unsuccessful links in this file.
+     * 
+     * @param unsuccessful
+     */
+    public void setUnsuccessful( int unsuccessful )
+    {
+        this.unsuccessful = unsuccessful;
+    } //-- void setUnsuccessful( int )
+
+    /**
+     * Method toString.
+     * 
+     * @return String
+     */
+    public java.lang.String toString()
+    {
+        StringBuilder buf = new StringBuilder( 128 );
+
+        buf.append( "absolutePath = '" );
+        buf.append( getAbsolutePath() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "relativePath = '" );
+        buf.append( getRelativePath() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "successful = '" );
+        buf.append( getSuccessful() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "unsuccessful = '" );
+        buf.append( getUnsuccessful() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "results = '" );
+        buf.append( getResults() );
+        buf.append( "'" );
+
+        return buf.toString();
+    } //-- java.lang.String toString()
+
+    
+            
+    /**
+     * Get the number of links for this file depending the level wanted.
+     *
+     * {@link LinkcheckFileResult#ERROR_LEVEL}
+     * {@link LinkcheckFileResult#UNKNOWN_LEVEL}
+     * {@link LinkcheckFileResult#VALID_LEVEL}
+     * {@link LinkcheckFileResult#WARNING_LEVEL}
+     *
+     * @param level the restricted level
+     * @return the number of links for the restrict level, -1 if the level is not a valid one
+     * or no results was found.
+     * @throws UnsupportedOperationException if the level is unsupported.
+     */
+    public int getNumberOfLinks( int level )
+    {
+        if ( results == null )
+        {
+            return -1;
+        }
+
+        if ( !( level == LinkcheckFileResult.ERROR_LEVEL || level == LinkcheckFileResult.WARNING_LEVEL
+            || level == LinkcheckFileResult.VALID_LEVEL || level == LinkcheckFileResult.UNKNOWN_LEVEL ) )
+        {
+            throw new UnsupportedOperationException( "This level [" + level + "] is unsupported." );
+        }
+
+        int number = 0;
+        for ( java.util.Iterator it = results.iterator(); it.hasNext(); )
+        {
+            LinkcheckFileResult linkcheckFileResult = (LinkcheckFileResult) it.next();
+
+            if ( linkcheckFileResult.getStatusLevel() == level )
+            {
+                number++;
+            }
+        }
+
+        return number;
+    }
+
+    /**
+     * Get the number of links for this file.
+     *
+     * @param level
+     * @return
+     */
+    public int getNumberOfLinks()
+    {
+        if ( results == null )
+        {
+            return -1;
+        }
+
+        return results.size();
+    }
+            
+          
+}
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckFileResult.java b/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckFileResult.java
new file mode 100644
index 0000000..f7c1b30
--- /dev/null
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckFileResult.java
@@ -0,0 +1,246 @@
+package org.apache.maven.doxia.linkcheck.model;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ * A class containing the results of a single check of a link.      
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LinkcheckFileResult
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The target URL.
+     *           
+     */
+    private String target;
+
+    /**
+     * 
+     *             The status.
+     *           
+     */
+    private String status;
+
+    /**
+     * 
+     *             The error message.
+     *           
+     */
+    private String errorMessage;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method equals.
+     * 
+     * @param other
+     * @return boolean
+     */
+    public boolean equals( Object other )
+    {
+        if ( this == other )
+        {
+            return true;
+        }
+
+        if ( !( other instanceof LinkcheckFileResult ) )
+        {
+            return false;
+        }
+
+        LinkcheckFileResult that = (LinkcheckFileResult) other;
+        boolean result = true;
+
+        result = result && ( getTarget() == null ? that.getTarget() == null : getTarget().equals( that.getTarget() ) );
+        result = result && ( getStatus() == null ? that.getStatus() == null : getStatus().equals( that.getStatus() ) );
+        result = result && ( getErrorMessage() == null ? that.getErrorMessage() == null : getErrorMessage().equals( that.getErrorMessage() ) );
+
+        return result;
+    } //-- boolean equals( Object )
+
+    /**
+     * Get the error message.
+     * 
+     * @return String
+     */
+    public String getErrorMessage()
+    {
+        return this.errorMessage;
+    } //-- String getErrorMessage()
+
+    /**
+     * Get the status.
+     * 
+     * @return String
+     */
+    public String getStatus()
+    {
+        return this.status;
+    } //-- String getStatus()
+
+    /**
+     * Get the target URL.
+     * 
+     * @return String
+     */
+    public String getTarget()
+    {
+        return this.target;
+    } //-- String getTarget()
+
+    /**
+     * Method hashCode.
+     * 
+     * @return int
+     */
+    public int hashCode()
+    {
+        int result = 17;
+
+        result = 37 * result + ( target != null ? target.hashCode() : 0 );
+        result = 37 * result + ( status != null ? status.hashCode() : 0 );
+        result = 37 * result + ( errorMessage != null ? errorMessage.hashCode() : 0 );
+
+        return result;
+    } //-- int hashCode()
+
+    /**
+     * Set the error message.
+     * 
+     * @param errorMessage
+     */
+    public void setErrorMessage( String errorMessage )
+    {
+        this.errorMessage = errorMessage;
+    } //-- void setErrorMessage( String )
+
+    /**
+     * Set the status.
+     * 
+     * @param status
+     */
+    public void setStatus( String status )
+    {
+        this.status = status;
+    } //-- void setStatus( String )
+
+    /**
+     * Set the target URL.
+     * 
+     * @param target
+     */
+    public void setTarget( String target )
+    {
+        this.target = target;
+    } //-- void setTarget( String )
+
+    /**
+     * Method toString.
+     * 
+     * @return String
+     */
+    public java.lang.String toString()
+    {
+        StringBuilder buf = new StringBuilder( 128 );
+
+        buf.append( "target = '" );
+        buf.append( getTarget() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "status = '" );
+        buf.append( getStatus() );
+        buf.append( "'" );
+        buf.append( "\n" ); 
+        buf.append( "errorMessage = '" );
+        buf.append( getErrorMessage() );
+        buf.append( "'" );
+
+        return buf.toString();
+    } //-- java.lang.String toString()
+
+    
+            
+    /** The vm line separator. */
+    private static final String EOL = System.getProperty( "line.separator" );
+
+    /** Validation result level: error. */
+    public static final int ERROR_LEVEL = 1;
+
+    /** Validation result level: warning. */
+    public static final int WARNING_LEVEL = 2;
+
+    /** Validation result level: valid. */
+    public static final int VALID_LEVEL = 3;
+
+    /** Validation result level: unknown. */
+    public static final int UNKNOWN_LEVEL = 4;
+
+    /** Validation result: error. */
+    public static final String ERROR = "error";
+
+    /** Validation result: warning. */
+    public static final String WARNING = "warning";
+
+    /** Validation result: valid. */
+    public static final String VALID = "valid";
+
+    /** Validation result: unknown. */
+    public static final String UNKNOWN = "unknown";
+
+    /**
+     * Returns the status as an integer.
+     *
+     * @return One of ERROR, WARNING, VALID or UNKNOWN.
+     */
+    public int getStatusLevel()
+    {
+        int level = UNKNOWN_LEVEL;
+
+        if ( VALID.equals( getStatus() ) )
+        {
+            level = VALID_LEVEL;
+        }
+        else if ( WARNING.equals( getStatus() ) )
+        {
+            level = WARNING_LEVEL;
+        }
+        else if ( ERROR.equals( getStatus() ) )
+        {
+            level = ERROR_LEVEL;
+        }
+
+        return level;
+    }
+            
+          
+}
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckModel.java b/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckModel.java
new file mode 100644
index 0000000..19c9a8b
--- /dev/null
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/model/LinkcheckModel.java
@@ -0,0 +1,173 @@
+package org.apache.maven.doxia.linkcheck.model;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ * The <code>&lt;linkcheck&gt;</code> element is the root of the linkcheck descriptor.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LinkcheckModel
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field files.
+     */
+    private java.util.List<LinkcheckFile> files;
+
+    /**
+     * Field modelEncoding.
+     */
+    private String modelEncoding = "UTF-8";
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addFile.
+     * 
+     * @param linkcheckFile
+     */
+    public void addFile( LinkcheckFile linkcheckFile )
+    {
+        getFiles().add( linkcheckFile );
+    } //-- void addFile( LinkcheckFile )
+
+    /**
+     * Method equals.
+     * 
+     * @param other
+     * @return boolean
+     */
+    public boolean equals( Object other )
+    {
+        if ( this == other )
+        {
+            return true;
+        }
+
+        if ( !( other instanceof LinkcheckModel ) )
+        {
+            return false;
+        }
+
+        LinkcheckModel that = (LinkcheckModel) other;
+        boolean result = true;
+
+        result = result && ( getFiles() == null ? that.getFiles() == null : getFiles().equals( that.getFiles() ) );
+
+        return result;
+    } //-- boolean equals( Object )
+
+    /**
+     * Method getFiles.
+     * 
+     * @return List
+     */
+    public java.util.List<LinkcheckFile> getFiles()
+    {
+        if ( this.files == null )
+        {
+            this.files = new java.util.ArrayList<LinkcheckFile>();
+        }
+
+        return this.files;
+    } //-- java.util.List<LinkcheckFile> getFiles()
+
+    /**
+     * Get the modelEncoding field.
+     * 
+     * @return String
+     */
+    public String getModelEncoding()
+    {
+        return this.modelEncoding;
+    } //-- String getModelEncoding()
+
+    /**
+     * Method hashCode.
+     * 
+     * @return int
+     */
+    public int hashCode()
+    {
+        int result = 17;
+
+        result = 37 * result + ( files != null ? files.hashCode() : 0 );
+
+        return result;
+    } //-- int hashCode()
+
+    /**
+     * Method removeFile.
+     * 
+     * @param linkcheckFile
+     */
+    public void removeFile( LinkcheckFile linkcheckFile )
+    {
+        getFiles().remove( linkcheckFile );
+    } //-- void removeFile( LinkcheckFile )
+
+    /**
+     * Set list of <code>&lt;file&gt;</code> elements.
+     * 
+     * @param files
+     */
+    public void setFiles( java.util.List<LinkcheckFile> files )
+    {
+        this.files = files;
+    } //-- void setFiles( java.util.List )
+
+    /**
+     * Set the modelEncoding field.
+     * 
+     * @param modelEncoding
+     */
+    public void setModelEncoding( String modelEncoding )
+    {
+        this.modelEncoding = modelEncoding;
+    } //-- void setModelEncoding( String )
+
+    /**
+     * Method toString.
+     * 
+     * @return String
+     */
+    public java.lang.String toString()
+    {
+        StringBuilder buf = new StringBuilder( 128 );
+
+        buf.append( "files = '" );
+        buf.append( getFiles() );
+        buf.append( "'" );
+
+        return buf.toString();
+    } //-- java.lang.String toString()
+
+}
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/model/io/xpp3/LinkcheckModelXpp3Reader.java b/src/main/java/org/apache/maven/doxia/linkcheck/model/io/xpp3/LinkcheckModelXpp3Reader.java
new file mode 100644
index 0000000..831c576
--- /dev/null
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/model/io/xpp3/LinkcheckModelXpp3Reader.java
@@ -0,0 +1,859 @@
+package org.apache.maven.doxia.linkcheck.model.io.xpp3;
+
+/*
+ * 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.
+ */
+
+  //---------------------------------/
+ //- Imported classes and packages -/
+//---------------------------------/
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.text.DateFormat;
+import org.apache.maven.doxia.linkcheck.model.LinkcheckFile;
+import org.apache.maven.doxia.linkcheck.model.LinkcheckFileResult;
+import org.apache.maven.doxia.linkcheck.model.LinkcheckModel;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.pull.EntityReplacementMap;
+import org.codehaus.plexus.util.xml.pull.MXParser;
+import org.codehaus.plexus.util.xml.pull.XmlPullParser;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Class LinkcheckModelXpp3Reader.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LinkcheckModelXpp3Reader
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * If set the parser will be loaded with all single characters
+     * from the XHTML specification.
+     * The entities used:
+     * <ul>
+     * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</li>
+     * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</li>
+     * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</li>
+     * </ul>
+     */
+    private boolean addDefaultEntities = true;
+
+    /**
+     * Field contentTransformer.
+     */
+    public final ContentTransformer contentTransformer;
+
+
+      //----------------/
+     //- Constructors -/
+    //----------------/
+
+    public LinkcheckModelXpp3Reader()
+    {
+        this( new ContentTransformer()
+        {
+            public String transform( String source, String fieldName )
+            {
+                return source;
+            }
+        } );
+    } //-- org.apache.maven.doxia.linkcheck.model.io.xpp3.LinkcheckModelXpp3Reader()
+
+    public LinkcheckModelXpp3Reader(ContentTransformer contentTransformer)
+    {
+        this.contentTransformer = contentTransformer;
+    } //-- org.apache.maven.doxia.linkcheck.model.io.xpp3.LinkcheckModelXpp3Reader(ContentTransformer)
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method checkFieldWithDuplicate.
+     * 
+     * @param parser
+     * @param parsed
+     * @param alias
+     * @param tagName
+     * @throws XmlPullParserException
+     * @return boolean
+     */
+    private boolean checkFieldWithDuplicate( XmlPullParser parser, String tagName, String alias, java.util.Set parsed )
+        throws XmlPullParserException
+    {
+        if ( !( parser.getName().equals( tagName ) || parser.getName().equals( alias ) ) )
+        {
+            return false;
+        }
+        if ( !parsed.add( tagName ) )
+        {
+            throw new XmlPullParserException( "Duplicated tag: '" + tagName + "'", parser, null );
+        }
+        return true;
+    } //-- boolean checkFieldWithDuplicate( XmlPullParser, String, String, java.util.Set )
+
+    /**
+     * Method checkUnknownAttribute.
+     * 
+     * @param parser
+     * @param strict
+     * @param tagName
+     * @param attribute
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private void checkUnknownAttribute( XmlPullParser parser, String attribute, String tagName, boolean strict )
+        throws XmlPullParserException, IOException
+    {
+        // strictXmlAttributes = true for model: if strict == true, not only elements are checked but attributes too
+        if ( strict )
+        {
+            throw new XmlPullParserException( "Unknown attribute '" + attribute + "' for tag '" + tagName + "'", parser, null );
+        }
+    } //-- void checkUnknownAttribute( XmlPullParser, String, String, boolean )
+
+    /**
+     * Method checkUnknownElement.
+     * 
+     * @param parser
+     * @param strict
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    private void checkUnknownElement( XmlPullParser parser, boolean strict )
+        throws XmlPullParserException, IOException
+    {
+        if ( strict )
+        {
+            throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
+        }
+
+        for ( int unrecognizedTagCount = 1; unrecognizedTagCount > 0; )
+        {
+            int eventType = parser.next();
+            if ( eventType == XmlPullParser.START_TAG )
+            {
+                unrecognizedTagCount++;
+            }
+            else if ( eventType == XmlPullParser.END_TAG )
+            {
+                unrecognizedTagCount--;
+            }
+        }
+    } //-- void checkUnknownElement( XmlPullParser, boolean )
+
+    /**
+     * Returns the state of the "add default entities" flag.
+     * 
+     * @return boolean
+     */
+    public boolean getAddDefaultEntities()
+    {
+        return addDefaultEntities;
+    } //-- boolean getAddDefaultEntities()
+
+    /**
+     * Method getBooleanValue.
+     * 
+     * @param s
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return boolean
+     */
+    private boolean getBooleanValue( String s, String attribute, XmlPullParser parser )
+        throws XmlPullParserException
+    {
+        return getBooleanValue( s, attribute, parser, null );
+    } //-- boolean getBooleanValue( String, String, XmlPullParser )
+
+    /**
+     * Method getBooleanValue.
+     * 
+     * @param s
+     * @param defaultValue
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return boolean
+     */
+    private boolean getBooleanValue( String s, String attribute, XmlPullParser parser, String defaultValue )
+        throws XmlPullParserException
+    {
+        if ( s != null && s.length() != 0 )
+        {
+            return Boolean.valueOf( s ).booleanValue();
+        }
+        if ( defaultValue != null )
+        {
+            return Boolean.valueOf( defaultValue ).booleanValue();
+        }
+        return false;
+    } //-- boolean getBooleanValue( String, String, XmlPullParser, String )
+
+    /**
+     * Method getByteValue.
+     * 
+     * @param s
+     * @param strict
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return byte
+     */
+    private byte getByteValue( String s, String attribute, XmlPullParser parser, boolean strict )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            try
+            {
+                return Byte.valueOf( s ).byteValue();
+            }
+            catch ( NumberFormatException nfe )
+            {
+                if ( strict )
+                {
+                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a byte", parser, nfe );
+                }
+            }
+        }
+        return 0;
+    } //-- byte getByteValue( String, String, XmlPullParser, boolean )
+
+    /**
+     * Method getCharacterValue.
+     * 
+     * @param s
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return char
+     */
+    private char getCharacterValue( String s, String attribute, XmlPullParser parser )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            return s.charAt( 0 );
+        }
+        return 0;
+    } //-- char getCharacterValue( String, String, XmlPullParser )
+
+    /**
+     * Method getDateValue.
+     * 
+     * @param s
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return Date
+     */
+    private java.util.Date getDateValue( String s, String attribute, XmlPullParser parser )
+        throws XmlPullParserException
+    {
+        return getDateValue( s, attribute, null, parser );
+    } //-- java.util.Date getDateValue( String, String, XmlPullParser )
+
+    /**
+     * Method getDateValue.
+     * 
+     * @param s
+     * @param parser
+     * @param dateFormat
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return Date
+     */
+    private java.util.Date getDateValue( String s, String attribute, String dateFormat, XmlPullParser parser )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            String effectiveDateFormat = dateFormat;
+            if ( dateFormat == null )
+            {
+                effectiveDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";
+            }
+            if ( "long".equals( effectiveDateFormat ) )
+            {
+                try
+                {
+                    return new java.util.Date( Long.parseLong( s ) );
+                }
+                catch ( NumberFormatException e )
+                {
+                    throw new XmlPullParserException( e.getMessage(), parser, e );
+                }
+            }
+            else
+            {
+                try
+                {
+                    DateFormat dateParser = new java.text.SimpleDateFormat( effectiveDateFormat, java.util.Locale.US );
+                    return dateParser.parse( s );
+                }
+                catch ( java.text.ParseException e )
+                {
+                    throw new XmlPullParserException( e.getMessage(), parser, e );
+                }
+            }
+        }
+        return null;
+    } //-- java.util.Date getDateValue( String, String, String, XmlPullParser )
+
+    /**
+     * Method getDoubleValue.
+     * 
+     * @param s
+     * @param strict
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return double
+     */
+    private double getDoubleValue( String s, String attribute, XmlPullParser parser, boolean strict )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            try
+            {
+                return Double.valueOf( s ).doubleValue();
+            }
+            catch ( NumberFormatException nfe )
+            {
+                if ( strict )
+                {
+                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe );
+                }
+            }
+        }
+        return 0;
+    } //-- double getDoubleValue( String, String, XmlPullParser, boolean )
+
+    /**
+     * Method getFloatValue.
+     * 
+     * @param s
+     * @param strict
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return float
+     */
+    private float getFloatValue( String s, String attribute, XmlPullParser parser, boolean strict )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            try
+            {
+                return Float.valueOf( s ).floatValue();
+            }
+            catch ( NumberFormatException nfe )
+            {
+                if ( strict )
+                {
+                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe );
+                }
+            }
+        }
+        return 0;
+    } //-- float getFloatValue( String, String, XmlPullParser, boolean )
+
+    /**
+     * Method getIntegerValue.
+     * 
+     * @param s
+     * @param strict
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return int
+     */
+    private int getIntegerValue( String s, String attribute, XmlPullParser parser, boolean strict )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            try
+            {
+                return Integer.valueOf( s ).intValue();
+            }
+            catch ( NumberFormatException nfe )
+            {
+                if ( strict )
+                {
+                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be an integer", parser, nfe );
+                }
+            }
+        }
+        return 0;
+    } //-- int getIntegerValue( String, String, XmlPullParser, boolean )
+
+    /**
+     * Method getLongValue.
+     * 
+     * @param s
+     * @param strict
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return long
+     */
+    private long getLongValue( String s, String attribute, XmlPullParser parser, boolean strict )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            try
+            {
+                return Long.valueOf( s ).longValue();
+            }
+            catch ( NumberFormatException nfe )
+            {
+                if ( strict )
+                {
+                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a long integer", parser, nfe );
+                }
+            }
+        }
+        return 0;
+    } //-- long getLongValue( String, String, XmlPullParser, boolean )
+
+    /**
+     * Method getRequiredAttributeValue.
+     * 
+     * @param s
+     * @param strict
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return String
+     */
+    private String getRequiredAttributeValue( String s, String attribute, XmlPullParser parser, boolean strict )
+        throws XmlPullParserException
+    {
+        if ( s == null )
+        {
+            if ( strict )
+            {
+                throw new XmlPullParserException( "Missing required value for attribute '" + attribute + "'", parser, null );
+            }
+        }
+        return s;
+    } //-- String getRequiredAttributeValue( String, String, XmlPullParser, boolean )
+
+    /**
+     * Method getShortValue.
+     * 
+     * @param s
+     * @param strict
+     * @param parser
+     * @param attribute
+     * @throws XmlPullParserException
+     * @return short
+     */
+    private short getShortValue( String s, String attribute, XmlPullParser parser, boolean strict )
+        throws XmlPullParserException
+    {
+        if ( s != null )
+        {
+            try
+            {
+                return Short.valueOf( s ).shortValue();
+            }
+            catch ( NumberFormatException nfe )
+            {
+                if ( strict )
+                {
+                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a short integer", parser, nfe );
+                }
+            }
+        }
+        return 0;
+    } //-- short getShortValue( String, String, XmlPullParser, boolean )
+
+    /**
+     * Method getTrimmedValue.
+     * 
+     * @param s
+     * @return String
+     */
+    private String getTrimmedValue( String s )
+    {
+        if ( s != null )
+        {
+            s = s.trim();
+        }
+        return s;
+    } //-- String getTrimmedValue( String )
+
+    /**
+     * Method interpolatedTrimmed.
+     * 
+     * @param value
+     * @param context
+     * @return String
+     */
+    private String interpolatedTrimmed( String value, String context )
+    {
+        return getTrimmedValue( contentTransformer.transform( value, context ) );
+    } //-- String interpolatedTrimmed( String, String )
+
+    /**
+     * Method nextTag.
+     * 
+     * @param parser
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return int
+     */
+    private int nextTag( XmlPullParser parser )
+        throws IOException, XmlPullParserException
+    {
+        int eventType = parser.next();
+        if ( eventType == XmlPullParser.TEXT )
+        {
+            eventType = parser.next();
+        }
+        if ( eventType != XmlPullParser.START_TAG && eventType != XmlPullParser.END_TAG )
+        {
+            throw new XmlPullParserException( "expected START_TAG or END_TAG not " + XmlPullParser.TYPES[eventType], parser, null );
+        }
+        return eventType;
+    } //-- int nextTag( XmlPullParser )
+
+    /**
+     * @see ReaderFactory#newXmlReader
+     * 
+     * @param reader
+     * @param strict
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckModel
+     */
+    public LinkcheckModel read( Reader reader, boolean strict )
+        throws IOException, XmlPullParserException
+    {
+        XmlPullParser parser = addDefaultEntities ? new MXParser(EntityReplacementMap.defaultEntityReplacementMap) : new MXParser( );
+
+        parser.setInput( reader );
+
+
+        return read( parser, strict );
+    } //-- LinkcheckModel read( Reader, boolean )
+
+    /**
+     * @see ReaderFactory#newXmlReader
+     * 
+     * @param reader
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckModel
+     */
+    public LinkcheckModel read( Reader reader )
+        throws IOException, XmlPullParserException
+    {
+        return read( reader, true );
+    } //-- LinkcheckModel read( Reader )
+
+    /**
+     * Method read.
+     * 
+     * @param in
+     * @param strict
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckModel
+     */
+    public LinkcheckModel read( InputStream in, boolean strict )
+        throws IOException, XmlPullParserException
+    {
+        return read( ReaderFactory.newXmlReader( in ), strict );
+    } //-- LinkcheckModel read( InputStream, boolean )
+
+    /**
+     * Method read.
+     * 
+     * @param in
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckModel
+     */
+    public LinkcheckModel read( InputStream in )
+        throws IOException, XmlPullParserException
+    {
+        return read( ReaderFactory.newXmlReader( in ) );
+    } //-- LinkcheckModel read( InputStream )
+
+    /**
+     * Method parseLinkcheckFile.
+     * 
+     * @param parser
+     * @param strict
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckFile
+     */
+    private LinkcheckFile parseLinkcheckFile( XmlPullParser parser, boolean strict )
+        throws IOException, XmlPullParserException
+    {
+        String tagName = parser.getName();
+        LinkcheckFile linkcheckFile = new LinkcheckFile();
+        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
+        {
+            String name = parser.getAttributeName( i );
+            String value = parser.getAttributeValue( i );
+
+            if ( name.indexOf( ':' ) >= 0 )
+            {
+                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
+            }
+            else
+            {
+                checkUnknownAttribute( parser, name, tagName, strict );
+            }
+        }
+        java.util.Set parsed = new java.util.HashSet();
+        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
+        {
+            if ( checkFieldWithDuplicate( parser, "absolutePath", null, parsed ) )
+            {
+                linkcheckFile.setAbsolutePath( interpolatedTrimmed( parser.nextText(), "absolutePath" ) );
+            }
+            else if ( checkFieldWithDuplicate( parser, "relativePath", null, parsed ) )
+            {
+                linkcheckFile.setRelativePath( interpolatedTrimmed( parser.nextText(), "relativePath" ) );
+            }
+            else if ( checkFieldWithDuplicate( parser, "successful", null, parsed ) )
+            {
+                linkcheckFile.setSuccessful( getIntegerValue( interpolatedTrimmed( parser.nextText(), "successful" ), "successful", parser, strict ) );
+            }
+            else if ( checkFieldWithDuplicate( parser, "unsuccessful", null, parsed ) )
+            {
+                linkcheckFile.setUnsuccessful( getIntegerValue( interpolatedTrimmed( parser.nextText(), "unsuccessful" ), "unsuccessful", parser, strict ) );
+            }
+            else if ( checkFieldWithDuplicate( parser, "results", null, parsed ) )
+            {
+                java.util.List<LinkcheckFileResult> results = new java.util.ArrayList<LinkcheckFileResult>();
+                linkcheckFile.setResults( results );
+                while ( parser.nextTag() == XmlPullParser.START_TAG )
+                {
+                    if ( "result".equals( parser.getName() ) )
+                    {
+                        results.add( parseLinkcheckFileResult( parser, strict ) );
+                    }
+                    else
+                    {
+                        checkUnknownElement( parser, strict );
+                    }
+                }
+            }
+            else
+            {
+                checkUnknownElement( parser, strict );
+            }
+        }
+        return linkcheckFile;
+    } //-- LinkcheckFile parseLinkcheckFile( XmlPullParser, boolean )
+
+    /**
+     * Method parseLinkcheckFileResult.
+     * 
+     * @param parser
+     * @param strict
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckFileResult
+     */
+    private LinkcheckFileResult parseLinkcheckFileResult( XmlPullParser parser, boolean strict )
+        throws IOException, XmlPullParserException
+    {
+        String tagName = parser.getName();
+        LinkcheckFileResult linkcheckFileResult = new LinkcheckFileResult();
+        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
+        {
+            String name = parser.getAttributeName( i );
+            String value = parser.getAttributeValue( i );
+
+            if ( name.indexOf( ':' ) >= 0 )
+            {
+                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
+            }
+            else
+            {
+                checkUnknownAttribute( parser, name, tagName, strict );
+            }
+        }
+        java.util.Set parsed = new java.util.HashSet();
+        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
+        {
+            if ( checkFieldWithDuplicate( parser, "target", null, parsed ) )
+            {
+                linkcheckFileResult.setTarget( interpolatedTrimmed( parser.nextText(), "target" ) );
+            }
+            else if ( checkFieldWithDuplicate( parser, "status", null, parsed ) )
+            {
+                linkcheckFileResult.setStatus( interpolatedTrimmed( parser.nextText(), "status" ) );
+            }
+            else if ( checkFieldWithDuplicate( parser, "errorMessage", null, parsed ) )
+            {
+                linkcheckFileResult.setErrorMessage( interpolatedTrimmed( parser.nextText(), "errorMessage" ) );
+            }
+            else
+            {
+                checkUnknownElement( parser, strict );
+            }
+        }
+        return linkcheckFileResult;
+    } //-- LinkcheckFileResult parseLinkcheckFileResult( XmlPullParser, boolean )
+
+    /**
+     * Method parseLinkcheckModel.
+     * 
+     * @param parser
+     * @param strict
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckModel
+     */
+    private LinkcheckModel parseLinkcheckModel( XmlPullParser parser, boolean strict )
+        throws IOException, XmlPullParserException
+    {
+        String tagName = parser.getName();
+        LinkcheckModel linkcheckModel = new LinkcheckModel();
+        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
+        {
+            String name = parser.getAttributeName( i );
+            String value = parser.getAttributeValue( i );
+
+            if ( name.indexOf( ':' ) >= 0 )
+            {
+                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
+            }
+            else if ( "xmlns".equals( name ) )
+            {
+                // ignore xmlns attribute in root class, which is a reserved attribute name
+            }
+            else
+            {
+                checkUnknownAttribute( parser, name, tagName, strict );
+            }
+        }
+        java.util.Set parsed = new java.util.HashSet();
+        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
+        {
+            if ( checkFieldWithDuplicate( parser, "files", null, parsed ) )
+            {
+                java.util.List<LinkcheckFile> files = new java.util.ArrayList<LinkcheckFile>();
+                linkcheckModel.setFiles( files );
+                while ( parser.nextTag() == XmlPullParser.START_TAG )
+                {
+                    if ( "file".equals( parser.getName() ) )
+                    {
+                        files.add( parseLinkcheckFile( parser, strict ) );
+                    }
+                    else
+                    {
+                        checkUnknownElement( parser, strict );
+                    }
+                }
+            }
+            else
+            {
+                checkUnknownElement( parser, strict );
+            }
+        }
+        return linkcheckModel;
+    } //-- LinkcheckModel parseLinkcheckModel( XmlPullParser, boolean )
+
+    /**
+     * Method read.
+     * 
+     * @param parser
+     * @param strict
+     * @throws IOException
+     * @throws XmlPullParserException
+     * @return LinkcheckModel
+     */
+    private LinkcheckModel read( XmlPullParser parser, boolean strict )
+        throws IOException, XmlPullParserException
+    {
+        LinkcheckModel linkcheckModel = null;
+        int eventType = parser.getEventType();
+        boolean parsed = false;
+        while ( eventType != XmlPullParser.END_DOCUMENT )
+        {
+            if ( eventType == XmlPullParser.START_TAG )
+            {
+                if ( strict && ! "linkcheckModel".equals( parser.getName() ) )
+                {
+                    throw new XmlPullParserException( "Expected root element 'linkcheckModel' but found '" + parser.getName() + "'", parser, null );
+                }
+                else if ( parsed )
+                {
+                    // fallback, already expected a XmlPullParserException due to invalid XML
+                    throw new XmlPullParserException( "Duplicated tag: 'linkcheckModel'", parser, null );
+                }
+                linkcheckModel = parseLinkcheckModel( parser, strict );
+                linkcheckModel.setModelEncoding( parser.getInputEncoding() );
+                parsed = true;
+            }
+            eventType = parser.next();
+        }
+        if ( parsed )
+        {
+            return linkcheckModel;
+        }
+        throw new XmlPullParserException( "Expected root element 'linkcheckModel' but found no element at all: invalid XML document", parser, null );
+    } //-- LinkcheckModel read( XmlPullParser, boolean )
+
+    /**
+     * Sets the state of the "add default entities" flag.
+     * 
+     * @param addDefaultEntities
+     */
+    public void setAddDefaultEntities( boolean addDefaultEntities )
+    {
+        this.addDefaultEntities = addDefaultEntities;
+    } //-- void setAddDefaultEntities( boolean )
+
+    public static interface ContentTransformer
+{
+    /**
+     * Interpolate the value read from the xpp3 document
+     * @param source The source value
+     * @param fieldName A description of the field being interpolated. The implementation may use this to
+     *                           log stuff.
+     * @return The interpolated value.
+     */
+    String transform( String source, String fieldName );
+}
+
+}
diff --git a/src/main/java/org/apache/maven/doxia/linkcheck/model/io/xpp3/LinkcheckModelXpp3Writer.java b/src/main/java/org/apache/maven/doxia/linkcheck/model/io/xpp3/LinkcheckModelXpp3Writer.java
new file mode 100644
index 0000000..b1e92b4
--- /dev/null
+++ b/src/main/java/org/apache/maven/doxia/linkcheck/model/io/xpp3/LinkcheckModelXpp3Writer.java
@@ -0,0 +1,200 @@
+package org.apache.maven.doxia.linkcheck.model.io.xpp3;
+
+/*
+ * 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.
+ */
+
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.Iterator;
+import org.apache.maven.doxia.linkcheck.model.LinkcheckFile;
+import org.apache.maven.doxia.linkcheck.model.LinkcheckFileResult;
+import org.apache.maven.doxia.linkcheck.model.LinkcheckModel;
+import org.codehaus.plexus.util.xml.pull.MXSerializer;
+import org.codehaus.plexus.util.xml.pull.XmlSerializer;
+
+/**
+ * Class LinkcheckModelXpp3Writer.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LinkcheckModelXpp3Writer
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field NAMESPACE.
+     */
+    private static final String NAMESPACE = null;
+
+    /**
+     * Field fileComment.
+     */
+    private String fileComment = null;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method setFileComment.
+     * 
+     * @param fileComment
+     */
+    public void setFileComment( String fileComment )
+    {
+        this.fileComment = fileComment;
+    } //-- void setFileComment( String )
+
+    /**
+     * Method write.
+     * 
+     * @param writer
+     * @param linkcheckModel
+     * @throws java.io.IOException
+     */
+    public void write( Writer writer, LinkcheckModel linkcheckModel )
+        throws java.io.IOException
+    {
+        XmlSerializer serializer = new MXSerializer();
+        serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", "  " );
+        serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
+        serializer.setOutput( writer );
+        serializer.startDocument( linkcheckModel.getModelEncoding(), null );
+        writeLinkcheckModel( linkcheckModel, "linkcheckModel", serializer );
+        serializer.endDocument();
+    } //-- void write( Writer, LinkcheckModel )
+
+    /**
+     * Method write.
+     * 
+     * @param stream
+     * @param linkcheckModel
+     * @throws java.io.IOException
+     */
+    public void write( OutputStream stream, LinkcheckModel linkcheckModel )
+        throws java.io.IOException
+    {
+        XmlSerializer serializer = new MXSerializer();
+        serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", "  " );
+        serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
+        serializer.setOutput( stream, linkcheckModel.getModelEncoding() );
+        serializer.startDocument( linkcheckModel.getModelEncoding(), null );
+        writeLinkcheckModel( linkcheckModel, "linkcheckModel", serializer );
+        serializer.endDocument();
+    } //-- void write( OutputStream, LinkcheckModel )
+
+    /**
+     * Method writeLinkcheckFile.
+     * 
+     * @param linkcheckFile
+     * @param serializer
+     * @param tagName
+     * @throws java.io.IOException
+     */
+    private void writeLinkcheckFile( LinkcheckFile linkcheckFile, String tagName, XmlSerializer serializer )
+        throws java.io.IOException
+    {
+        serializer.startTag( NAMESPACE, tagName );
+        if ( linkcheckFile.getAbsolutePath() != null )
+        {
+            serializer.startTag( NAMESPACE, "absolutePath" ).text( linkcheckFile.getAbsolutePath() ).endTag( NAMESPACE, "absolutePath" );
+        }
+        if ( linkcheckFile.getRelativePath() != null )
+        {
+            serializer.startTag( NAMESPACE, "relativePath" ).text( linkcheckFile.getRelativePath() ).endTag( NAMESPACE, "relativePath" );
+        }
+        if ( linkcheckFile.getSuccessful() != -1 )
+        {
+            serializer.startTag( NAMESPACE, "successful" ).text( String.valueOf( linkcheckFile.getSuccessful() ) ).endTag( NAMESPACE, "successful" );
+        }
+        if ( linkcheckFile.getUnsuccessful() != -1 )
+        {
+            serializer.startTag( NAMESPACE, "unsuccessful" ).text( String.valueOf( linkcheckFile.getUnsuccessful() ) ).endTag( NAMESPACE, "unsuccessful" );
+        }
+        if ( ( linkcheckFile.getResults() != null ) && ( linkcheckFile.getResults().size() > 0 ) )
+        {
+            serializer.startTag( NAMESPACE, "results" );
+            for ( Iterator iter = linkcheckFile.getResults().iterator(); iter.hasNext(); )
+            {
+                LinkcheckFileResult o = (LinkcheckFileResult) iter.next();
+                writeLinkcheckFileResult( o, "result", serializer );
+            }
+            serializer.endTag( NAMESPACE, "results" );
+        }
+        serializer.endTag( NAMESPACE, tagName );
+    } //-- void writeLinkcheckFile( LinkcheckFile, String, XmlSerializer )
+
+    /**
+     * Method writeLinkcheckFileResult.
+     * 
+     * @param linkcheckFileResult
+     * @param serializer
+     * @param tagName
+     * @throws java.io.IOException
+     */
+    private void writeLinkcheckFileResult( LinkcheckFileResult linkcheckFileResult, String tagName, XmlSerializer serializer )
+        throws java.io.IOException
+    {
+        serializer.startTag( NAMESPACE, tagName );
+        if ( linkcheckFileResult.getTarget() != null )
+        {
+            serializer.startTag( NAMESPACE, "target" ).text( linkcheckFileResult.getTarget() ).endTag( NAMESPACE, "target" );
+        }
+        if ( linkcheckFileResult.getStatus() != null )
+        {
+            serializer.startTag( NAMESPACE, "status" ).text( linkcheckFileResult.getStatus() ).endTag( NAMESPACE, "status" );
+        }
+        if ( linkcheckFileResult.getErrorMessage() != null )
+        {
+            serializer.startTag( NAMESPACE, "errorMessage" ).text( linkcheckFileResult.getErrorMessage() ).endTag( NAMESPACE, "errorMessage" );
+        }
+        serializer.endTag( NAMESPACE, tagName );
+    } //-- void writeLinkcheckFileResult( LinkcheckFileResult, String, XmlSerializer )
+
+    /**
+     * Method writeLinkcheckModel.
+     * 
+     * @param linkcheckModel
+     * @param serializer
+     * @param tagName
+     * @throws java.io.IOException
+     */
+    private void writeLinkcheckModel( LinkcheckModel linkcheckModel, String tagName, XmlSerializer serializer )
+        throws java.io.IOException
+    {
+        serializer.startTag( NAMESPACE, tagName );
+        if ( ( linkcheckModel.getFiles() != null ) && ( linkcheckModel.getFiles().size() > 0 ) )
+        {
+            serializer.startTag( NAMESPACE, "files" );
+            for ( Iterator iter = linkcheckModel.getFiles().iterator(); iter.hasNext(); )
+            {
+                LinkcheckFile o = (LinkcheckFile) iter.next();
+                writeLinkcheckFile( o, "file", serializer );
+            }
+            serializer.endTag( NAMESPACE, "files" );
+        }
+        serializer.endTag( NAMESPACE, tagName );
+    } //-- void writeLinkcheckModel( LinkcheckModel, String, XmlSerializer )
+
+}
diff --git a/src/main/mdo/httpbean.mdo b/src/main/mdo/httpbean.mdo
deleted file mode 100644
index dc9fcb0..0000000
--- a/src/main/mdo/httpbean.mdo
+++ /dev/null
@@ -1,173 +0,0 @@
-<?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.
--->
-
-<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.0.0.xsd">
-  <id>http</id>
-  <name>HttpBean</name>
-  <description>Bean for supported HTTP parameters.</description>
-  <defaults>
-    <default>
-      <key>package</key>
-      <value>org.apache.maven.doxia.linkcheck</value>
-    </default>
-  </defaults>
-  <classes>
-    <class>
-      <name>HttpBean</name>
-      <description>Http bean to encapsulate the supported HTTP parameters.
-         @see org.apache.commons.httpclient.HttpMethod</description>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>method</name>
-          <description><![CDATA[
-     The HTTP method to use. Currently supported are "GET" and "HEAD".
-     <dl>
-     <dt>HTTP GET</dt>
-     <dd>
-     The HTTP GET method is defined in section 9.3 of
-     <a HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
-     <blockquote>
-     The GET method means retrieve whatever information (in the form of an
-     entity) is identified by the Request-URI.
-     </blockquote>
-     </dd>
-     <dt>HTTP HEAD</dt>
-     <dd>
-     The HTTP HEAD method is defined in section 9.4 of
-     <a HREF="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a>:
-     <blockquote>
-     The HEAD method is identical to GET except that the server MUST NOT
-     return a message-body in the response.
-     </blockquote>
-     </dd>
-     </dl>]]></description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>String</type>
-          <defaultValue>head</defaultValue>
-        </field>
-        <field>
-          <name>followRedirects</name>
-          <description><![CDATA[
-     if the HTTP method should automatically follow HTTP redirects
-     (status code 302, etc.), <tt>false</tt> otherwise.]]></description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>boolean</type>
-        </field>
-        <field>
-          <name>proxyHost</name>
-          <description>The proxy host.</description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>String</type>
-        </field>
-        <field>
-          <name>proxyPort</name>
-          <description>The proxy port.</description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>int</type>
-          <defaultValue>0</defaultValue>
-        </field>
-        <field>
-          <name>proxyUser</name>
-          <description>The proxy user.</description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>String</type>
-        </field>
-        <field>
-          <name>proxyPassword</name>
-          <description>The proxy password.</description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>String</type>
-        </field>
-        <field>
-          <name>proxyNtlmHost</name>
-          <description>The proxy NTLM (NT Lan Manager) host.</description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>String</type>
-        </field>
-        <field>
-          <name>proxyNtlmDomain</name>
-          <description>The proxy NTLM (NT Lan Manager) domain.</description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>String</type>
-        </field>
-        <field java.setter="false">
-          <name>timeout</name>
-          <description>The timeout to be used. A value of zero means the timeout is not used.
-            Default value is 2000.</description>
-          <version>1.0.0</version>
-          <identifier>true</identifier>
-          <type>int</type>
-          <defaultValue>2000</defaultValue>
-        </field>
-      </fields>
-      <codeSegments>
-        <codeSegment>
-          <version>1.0.0</version>
-          <code>
-          <![CDATA[
-    /**
-     * Set the timeout to be used. A value of zero means the timeout is not used.
-     *
-     * @param timeout positive int
-     */
-    public void setTimeout( int timeout )
-    {
-        if ( timeout < 0 )
-        {
-            throw new IllegalArgumentException( timeout + " should be 0 or positive." );
-        }
-        this.timeout = timeout;
-    }
-
-    private java.util.Properties httpClientParameters;
-
-    /**
-     * @return the extra HttpClient parameters
-     * @see http://hc.apache.org/httpclient-3.x/preference-api.html
-     */
-    public java.util.Properties getHttpClientParameters()
-    {
-        return httpClientParameters;
-    }
-
-    /**
-     * @param httpClientParameters the extra HttpClient parameters to set
-     * @see http://hc.apache.org/httpclient-3.x/preference-api.html
-     */
-    public void setHttpClientParameters( java.util.Properties httpClientParameters )
-    {
-        this.httpClientParameters = httpClientParameters;
-    }]]>
-          </code>
-        </codeSegment>
-      </codeSegments>
-    </class>
-  </classes>
-</model>
diff --git a/src/main/mdo/linkcheck.mdo b/src/main/mdo/linkcheck.mdo
deleted file mode 100644
index bb6bb2d..0000000
--- a/src/main/mdo/linkcheck.mdo
+++ /dev/null
@@ -1,274 +0,0 @@
-<?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.
--->
-
-<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.0.0.xsd">
-  <id>linkcheck</id>
-  <name>LinkcheckModel</name>
-  <description>Model for the linkcheck report.</description>
-  <defaults>
-    <default>
-      <key>package</key>
-      <value>org.apache.maven.doxia.linkcheck.model</value>
-    </default>
-  </defaults>
-  <classes>
-    <class rootElement="true">
-      <name>LinkcheckModel</name>
-      <description><![CDATA[
-         The <code>&lt;linkcheck&gt;</code> element is the root of the linkcheck descriptor.
-      ]]></description>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>files</name>
-          <description><![CDATA[
-            List of <code>&lt;file&gt;</code> elements.
-          ]]></description>
-          <version>1.0.0</version>
-          <association>
-            <type>LinkcheckFile</type>
-            <multiplicity>*</multiplicity>
-          </association>
-          <identifier>true</identifier>
-        </field>
-      </fields>
-    </class>
-    <class>
-      <name>LinkcheckFile</name>
-      <description><![CDATA[
-        The <code>&lt;file&gt;</code> to be checked.
-      ]]></description>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>absolutePath</name>
-          <version>1.0.0</version>
-          <description><![CDATA[
-            The file to check as String Object.
-          ]]></description>
-          <type>String</type>
-          <identifier>true</identifier>
-        </field>
-        <field>
-          <name>relativePath</name>
-          <version>1.0.0</version>
-          <description><![CDATA[
-            The relative path of the file.
-          ]]></description>
-          <type>String</type>
-          <identifier>true</identifier>
-        </field>
-        <field>
-          <name>successful</name>
-          <version>1.0.0</version>
-          <description><![CDATA[
-            The number of successful links in this file.
-          ]]></description>
-          <type>int</type>
-          <identifier>true</identifier>
-          <defaultValue>-1</defaultValue>
-        </field>
-        <field>
-          <name>unsuccessful</name>
-          <version>1.0.0</version>
-          <description><![CDATA[
-            The number of unsuccessful links in this file.
-          ]]></description>
-          <type>int</type>
-          <identifier>true</identifier>
-          <defaultValue>-1</defaultValue>
-        </field>
-        <field>
-          <name>results</name>
-          <version>1.0.0</version>
-          <description><![CDATA[
-            All error details in this file.
-          ]]></description>
-          <association>
-            <type>LinkcheckFileResult</type>
-            <multiplicity>*</multiplicity>
-          </association>
-          <identifier>true</identifier>
-        </field>
-      </fields>
-      <codeSegments>
-        <codeSegment>
-          <version>1.0.0</version>
-          <code>
-            <![CDATA[
-    /**
-     * Get the number of links for this file depending the level wanted.
-     *
-     * {@link LinkcheckFileResult#ERROR_LEVEL}
-     * {@link LinkcheckFileResult#UNKNOWN_LEVEL}
-     * {@link LinkcheckFileResult#VALID_LEVEL}
-     * {@link LinkcheckFileResult#WARNING_LEVEL}
-     *
-     * @param level the restricted level
-     * @return the number of links for the restrict level, -1 if the level is not a valid one
-     * or no results was found.
-     * @throws UnsupportedOperationException if the level is unsupported.
-     */
-    public int getNumberOfLinks( int level )
-    {
-        if ( results == null )
-        {
-            return -1;
-        }
-
-        if ( !( level == LinkcheckFileResult.ERROR_LEVEL || level == LinkcheckFileResult.WARNING_LEVEL
-            || level == LinkcheckFileResult.VALID_LEVEL || level == LinkcheckFileResult.UNKNOWN_LEVEL ) )
-        {
-            throw new UnsupportedOperationException( "This level [" + level + "] is unsupported." );
-        }
-
-        int number = 0;
-        for ( java.util.Iterator it = results.iterator(); it.hasNext(); )
-        {
-            LinkcheckFileResult linkcheckFileResult = (LinkcheckFileResult) it.next();
-
-            if ( linkcheckFileResult.getStatusLevel() == level )
-            {
-                number++;
-            }
-        }
-
-        return number;
-    }
-
-    /**
-     * Get the number of links for this file.
-     *
-     * @param level
-     * @return
-     */
-    public int getNumberOfLinks()
-    {
-        if ( results == null )
-        {
-            return -1;
-        }
-
-        return results.size();
-    }
-            ]]>
-          </code>
-        </codeSegment>
-      </codeSegments>
-    </class>
-    <class>
-      <name>LinkcheckFileResult</name>
-      <description><![CDATA[
-        An class containing the results of a single check of a link.
-      ]]></description>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>target</name>
-          <description><![CDATA[
-            The target URL.
-          ]]></description>
-          <version>1.0.0</version>
-          <type>String</type>
-          <identifier>true</identifier>
-        </field>
-        <field>
-          <name>status</name>
-          <description><![CDATA[
-            The status.
-          ]]></description>
-          <version>1.0.0</version>
-          <type>String</type>
-          <identifier>true</identifier>
-        </field>
-        <field>
-          <name>errorMessage</name>
-          <description><![CDATA[
-            The error message.
-          ]]></description>
-          <version>1.0.0</version>
-          <type>String</type>
-          <identifier>true</identifier>
-        </field>
-      </fields>
-      <codeSegments>
-        <codeSegment>
-          <version>1.0.0</version>
-          <code>
-            <![CDATA[
-    /** The vm line separator. */
-    private static final String EOL = System.getProperty( "line.separator" );
-
-    /** Validation result level: error. */
-    public static final int ERROR_LEVEL = 1;
-
-    /** Validation result level: warning. */
-    public static final int WARNING_LEVEL = 2;
-
-    /** Validation result level: valid. */
-    public static final int VALID_LEVEL = 3;
-
-    /** Validation result level: unknown. */
-    public static final int UNKNOWN_LEVEL = 4;
-
-    /** Validation result: error. */
-    public static final String ERROR = "error";
-
-    /** Validation result: warning. */
-    public static final String WARNING = "warning";
-
-    /** Validation result: valid. */
-    public static final String VALID = "valid";
-
-    /** Validation result: unknown. */
-    public static final String UNKNOWN = "unknown";
-
-    /**
-     * Returns the status as an integer.
-     *
-     * @return One of ERROR, WARNING, VALID or UNKNOWN.
-     */
-    public int getStatusLevel()
-    {
-        int level = UNKNOWN_LEVEL;
-
-        if ( VALID.equals( getStatus() ) )
-        {
-            level = VALID_LEVEL;
-        }
-        else if ( WARNING.equals( getStatus() ) )
-        {
-            level = WARNING_LEVEL;
-        }
-        else if ( ERROR.equals( getStatus() ) )
-        {
-            level = ERROR_LEVEL;
-        }
-
-        return level;
-    }
-            ]]>
-          </code>
-        </codeSegment>
-      </codeSegments>
-    </class>
-  </classes>
-</model>