Jon Cox f8fd96b1e1 Point checkin. Rough cut at href merge op (don't use it yet though).
Also included abort() method on progress object.

 What's left:
   o put incremental update in looping thread(s) to let system bootstrap from nothing
   o deal with store/webapp going away
   o deal with virt server down
   o Switch to using virtualized snapshot instead of HEAD in staging
   o testing... and lots of it



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6063 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2007-06-22 05:32:58 +00:00

199 lines
8.7 KiB
Java

/*-----------------------------------------------------------------------------
* Copyright 2007 Alfresco Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. As a special
* exception to the terms and conditions of version 2.0 of the GPL, you may
* redistribute this Program in connection with Free/Libre and Open Source
* Software ("FLOSS") applications as described in Alfresco's FLOSS exception.
* You should have received a copy of the text describing the FLOSS exception,
* and it is also available here: http://www.alfresco.com/legal/licensing
*
*
* Author Jon Cox <jcox@alfresco.com>
* File LinkValidationService.java
*----------------------------------------------------------------------------*/
package org.alfresco.linkvalidation;
import java.util.List;
import org.alfresco.service.cmr.avm.AVMNotFoundException;
import org.alfresco.util.NameMatcher;
public interface LinkValidationService
{
/**
* Updates href status and href file dependencies for path.
*
*
* @param storeNameOrWebappPath
* The store name or path to webapp
*
* @param incremental
* If true, updates information incrementally, based on the
* files that have changed and prior calculations regarding
* url-to-file dependencies. If false, first deletes all URL
* info associated with the store/webapp (if any), then does
* a full rescan to update info.
*
* @param connectTimeout
* Amount of time in milliseconds that this function will wait
* before declaring that the connection has failed
* (e.g.: 10000 ms).
*
* @param readTimeout
* time in milliseconds that this function will wait before
* declaring that a read on the connection has failed
* (e.g.: 30000 ms).
*
* @param nthreads
* Number of threads to use when fetching URLs (e.g.: 5)
*
* @param status
* While updateHrefInfo() is a synchronous function,
* 'status' may be polled in a separate thread to
* observe its progress.
*/
public void updateHrefInfo( String storeNameOrWebappPath,
boolean incremental,
int connectTimeout,
int readTimeout,
int nthreads,
HrefValidationProgress progress
)
throws AVMNotFoundException;
/**
* Fetches information on broken hrefs within a store name or path
* to a webapp. This function is just a convenience wrapper for calling
* getHrefConcordance with statusGTE=400 and statusLTE=599.
*/
public List<HrefConcordanceEntry> getBrokenHrefConcordanceEntries(
String storeNameOrWebappPath
) throws AVMNotFoundException;
/**
* Returns information regarding the hrefs within storeNameOrWebappPath
* whose return status is greater than or equal to 'statusGTE', and
* less than or equal to 'statusLTE'. The List<HrefConcordanceEntry>
* is sorted in increasing lexicographic order by href. Within each
* HrefConcordanceEntry, the files retrieved via getLocations()
* are also sorted in increasing lexicographic order.
*
* <p>
* Example 1:<br>
* The following parameters will fetch all the broken links
* within the ROOT webapp in the staging area of the 'mysite' web project:
* <ul>
* <li> storeNameOrWebappPath="mysite:/www/avm_webapps/ROOT"
* <li> statusGTE=400
* <li> statusLTE=599
* </ul>
* <p>
* Example 2:<br>
* The following parameters will fetch all the links whose return status
* is "successful" (2xx) for all webapps contained by the staging area of
* the 'mysite' web project:
* <ul>
* <li> storeNameOrWebappPath="mysite"
* <li> statusGTE=200
* <li> statusLTE=299
* </ul>
* <p>
* Example 3:<br>
* The following parameters will fetch all the links whose return status
* is 200 (OK) within the ROOT webapp in the staging area of the 'mysite'
* web project:
* <ul>
* <li> storeNameOrWebappPath="mysite:/www/avm_webapps/ROOT"
* <li> statusGTE=200
* <li> statusLTE=200
* </ul>
* <p>
* For details regarding HTTP status codes, see:
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
*
*/
public List<HrefConcordanceEntry> getHrefConcordanceEntries(
String storeNameOrWebappPath,
int statusGTE,
int statusLTE
) throws AVMNotFoundException;
/**
* This function is just a convenience wrapper for calling
* getHrefManifestEntries with statusGTE=400 and statusLTE=599.
*/
public List<HrefManifestEntry> getBrokenHrefManifestEntries(
String storeNameOrWebappPath
) throws AVMNotFoundException;
/**
* Returns a manifest consisting of just the broken hrefs
* within each file containing one or more broken href.
* The HrefManifestEntry list is sorted in increasing lexicographic
* order by file name. The hrefs within each HrefManifestEntry
* are also sorted in increasing lexicographic order.
*/
public List<HrefManifestEntry> getHrefManifestEntries(
String storeNameOrWebappPath,
int statusGTE,
int statusLTE) throws
AVMNotFoundException;
/**
* Fetch all hyperlinks that rely upon the existence of the file specified
* by 'path', directly or indirectly. The list of hrefs returnd is
* sorted in increasing lexicographic order. For example, in
* alfresco-sample-website.war, the hrefs dependent upon
* <code>mysite:/www/avm_webapps/ROOT/assets/footer.html</code> are:
* <pre>
* http://mysite.www--sandbox.version--v-1.127-0-0-1.ip.alfrescodemo.net:8180/
* http://mysite.www--sandbox.version--v-1.127-0-0-1.ip.alfrescodemo.net:8180/assets/footer.html
* http://mysite.www--sandbox.version--v-1.127-0-0-1.ip.alfrescodemo.net:8180/index.jsp
* http://mysite.www--sandbox.version--v-1.127-0-0-1.ip.alfrescodemo.net:8180/media/releases/index.jsp
* </pre>
* Note that this list may contain links that are functionally equivalent
* (e.g.: the first and third links), and may also contain links that
* don't actually appear an any web page, but are implicitly present
* in the site because any asset can be "dead reckoned".
*
*
*/
public List<String> getHrefsDependentUponFile(String path);
public HrefDifference getHrefDifference(
String srcWebappPath,
String dstWebappPath,
int connectTimeout,
int readTimeout,
int nthreads,
HrefValidationProgress progress)
throws AVMNotFoundException,
LinkValidationAbortedException;
public HrefManifest getHrefManifestBrokenByDelete(HrefDifference hdiff);
public HrefManifest getHrefManifestBrokenByNewOrMod(HrefDifference hdiff);
/**
* Merges an HrefDifference into the master href info table.
*/
public void mergeHrefDiff( HrefDifference hdiff);
}