001/* 002 * #%L 003 * Netarchivesuite - common 004 * %% 005 * Copyright (C) 2005 - 2014 The Royal Danish Library, the Danish State and University Library, 006 * the National Library of France and the Austrian National Library. 007 * %% 008 * This program is free software: you can redistribute it and/or modify 009 * it under the terms of the GNU Lesser General Public License as 010 * published by the Free Software Foundation, either version 2.1 of the 011 * License, or (at your option) any later version. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Lesser Public License for more details. 017 * 018 * You should have received a copy of the GNU General Lesser Public 019 * License along with this program. If not, see 020 * <http://www.gnu.org/licenses/lgpl-2.1.html>. 021 * #L% 022 */ 023 024package dk.netarkivet.common.utils.cdx; 025 026import java.util.regex.Matcher; 027import java.util.regex.Pattern; 028 029import dk.netarkivet.common.exceptions.ArgumentNotValid; 030 031/** 032 * A filter to use in CDXReader when finding CDXRecords matching a filename-pattern. 033 */ 034@SuppressWarnings({"serial"}) 035public class ARCFilenameCDXRecordFilter extends SimpleCDXRecordFilter { 036 037 private String arcfilenamepattern; 038 private Pattern p; 039 040 /** 041 * Class constructor. 042 * 043 * @param arcfilenamepattern The filename pattern to be used by this filter 044 * @param filtername The name of this filter 045 * @throws ArgumentNotValid If any argument are null or an empty string. 046 */ 047 public ARCFilenameCDXRecordFilter(String arcfilenamepattern, String filtername) throws ArgumentNotValid { 048 super(filtername); 049 ArgumentNotValid.checkNotNullOrEmpty(arcfilenamepattern, "arcfilenamepattern"); 050 this.arcfilenamepattern = arcfilenamepattern; 051 this.p = Pattern.compile(arcfilenamepattern); 052 } 053 054 /** 055 * Get the filename pattern used by this filter. 056 * 057 * @return the filename pattern used by this filter. 058 */ 059 public String getFilenamePattern() { 060 return this.arcfilenamepattern; 061 } 062 063 /* 064 * (non-Javadoc) 065 * 066 * @see dk.netarkivet.common.utils.cdx.SimpleCDXRecordFilter#process( dk.netarkivet.common.utils.cdx.CDXRecord) 067 */ 068 public boolean process(CDXRecord cdxrec) { 069 ArgumentNotValid.checkNotNull(cdxrec, "CDXRecord cdxrec"); 070 Matcher m = p.matcher(cdxrec.getArcfile()); 071 if (m.matches()) { 072 return true; 073 } 074 return false; 075 } 076 077}