Revision: 2106 http://archive-access.svn.sourceforge.net/archive-access/?rev=2106&view=rev Author: bradtofel Date: 2007-12-11 14:28:41 -0800 (Tue, 11 Dec 2007) Log Message: ----------- FEATURE: Now can create ARC/WARC Resources from URL + offset REFACTOR: moved common code into private methods Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourcestore/ResourceFactory.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourcestore/ResourceFactory.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourcestore/ResourceFactory.java 2007-12-11 22:27:08 UTC (rev 2105) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourcestore/ResourceFactory.java 2007-12-11 22:28:41 UTC (rev 2106) @@ -2,6 +2,7 @@ import java.io.File; import java.io.IOException; +import java.net.URL; import org.archive.io.ArchiveRecord; import org.archive.io.arc.ARCReader; @@ -13,42 +14,92 @@ import org.archive.wayback.core.Resource; import org.archive.wayback.exception.ResourceNotAvailableException; +/** + * Static factory class for constructing ARC/WARC Resources from + * File/URL + offset. + * + * @author brad + * @version $Date$, $Revision$ + */ public class ResourceFactory { - - public static Resource getResource(File file, long offset) - throws IOException, ResourceNotAvailableException { + public static Resource getResource(File file, long offset) + throws IOException, ResourceNotAvailableException { + Resource r = null; String name = file.getName(); - if(name.endsWith(LocalResourceStore.OPEN_EXTENSION)) { - name = name.substring(0, name.length() - - LocalResourceStore.OPEN_EXTENSION.length()); + if (name.endsWith(LocalResourceStore.OPEN_EXTENSION)) { + name = name.substring(0, name.length() + - LocalResourceStore.OPEN_EXTENSION.length()); } - if(name.endsWith(LocalResourceStore.ARC_EXTENSION) || - name.endsWith(LocalResourceStore.ARC_GZ_EXTENSION)) { + if (isArc(name)) { ARCReader reader = ARCReaderFactory.get(file); - ArchiveRecord rec = reader.get(offset); - if(!(rec instanceof ARCRecord)) { - throw new ResourceNotAvailableException("Bad ARCRecord format"); - } - ArcResource ar = new ArcResource((ARCRecord) rec, reader); - ar.parseHeaders(); - r = ar; + r = ARCArchiveRecordToResource(reader.get(offset),reader); - } else if(name.endsWith(LocalResourceStore.WARC_EXTENSION) || - name.endsWith(LocalResourceStore.WARC_GZ_EXTENSION)) { + } else if (isWarc(name)) { WARCReader reader = WARCReaderFactory.get(file); - ArchiveRecord rec = reader.get(offset); - if(!(rec instanceof WARCRecord)) { - throw new ResourceNotAvailableException("Bad WARCRecord format"); - } - WarcResource wr = new WarcResource((WARCRecord) rec, reader); - wr.parseHeaders(); - r = wr; - } - + r = WARCArchiveRecordToResource(reader.get(offset),reader); + + } else { + throw new ResourceNotAvailableException("Unknown extension"); + } + return r; } + + public static Resource getResource(URL url, long offset) + throws IOException, ResourceNotAvailableException { + Resource r = null; + String name = url.getFile(); + if (isArc(name)) { + + ARCReader reader = ARCReaderFactory.get(url, offset); + r = ARCArchiveRecordToResource(reader.get(),reader); + + } else if (isWarc(name)) { + + WARCReader reader = WARCReaderFactory.get(url, offset); + r = WARCArchiveRecordToResource(reader.get(),reader); + + } else { + throw new ResourceNotAvailableException("Unknown extension"); + } + return r; + } + + private static boolean isArc(final String name) { + + return (name.endsWith(LocalResourceStore.ARC_EXTENSION) + || name.endsWith(LocalResourceStore.ARC_GZ_EXTENSION)); + } + + private static boolean isWarc(final String name) { + + return (name.endsWith(LocalResourceStore.WARC_EXTENSION) + || name.endsWith(LocalResourceStore.WARC_GZ_EXTENSION)); + } + + private static Resource ARCArchiveRecordToResource(ArchiveRecord rec, + ARCReader reader) throws ResourceNotAvailableException, IOException { + + if (!(rec instanceof ARCRecord)) { + throw new ResourceNotAvailableException("Bad ARCRecord format"); + } + ArcResource ar = new ArcResource((ARCRecord) rec, reader); + ar.parseHeaders(); + return ar; + } + + private static Resource WARCArchiveRecordToResource(ArchiveRecord rec, + WARCReader reader) throws ResourceNotAvailableException, IOException { + + if (!(rec instanceof WARCRecord)) { + throw new ResourceNotAvailableException("Bad WARCRecord format"); + } + WarcResource wr = new WarcResource((WARCRecord) rec, reader); + wr.parseHeaders(); + return wr; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |