1 25 package org.archive.crawler.framework; 26 27 import java.util.ArrayList ; 28 import java.util.HashMap ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 import java.util.Map ; 32 33 import javax.management.AttributeNotFoundException ; 34 import javax.management.MBeanException ; 35 import javax.management.ReflectionException ; 36 37 import org.archive.crawler.datamodel.CrawlOrder; 38 import org.archive.crawler.framework.exceptions.FatalConfigurationException; 39 import org.archive.crawler.settings.MapType; 40 41 42 46 public class ProcessorChainList { 47 private List <ProcessorChain> chainList = new ArrayList <ProcessorChain>(); 48 private Map <String ,ProcessorChain> chainMap 49 = new HashMap <String ,ProcessorChain>(); 50 51 58 public ProcessorChainList(CrawlOrder order) 59 throws FatalConfigurationException { 60 try { 61 addProcessorMap(CrawlOrder.ATTR_PRE_FETCH_PROCESSORS, 62 (MapType) order. 63 getAttribute(CrawlOrder.ATTR_PRE_FETCH_PROCESSORS)); 64 addProcessorMap(CrawlOrder.ATTR_FETCH_PROCESSORS, (MapType) order 65 .getAttribute(CrawlOrder.ATTR_FETCH_PROCESSORS)); 66 addProcessorMap(CrawlOrder.ATTR_EXTRACT_PROCESSORS, (MapType) order 67 .getAttribute(CrawlOrder.ATTR_EXTRACT_PROCESSORS)); 68 addProcessorMap(CrawlOrder.ATTR_WRITE_PROCESSORS, (MapType) order 69 .getAttribute(CrawlOrder.ATTR_WRITE_PROCESSORS)); 70 addProcessorMap(CrawlOrder.ATTR_POST_PROCESSORS, (MapType) order 71 .getAttribute(CrawlOrder.ATTR_POST_PROCESSORS)); 72 } catch (AttributeNotFoundException e) { 73 throw new FatalConfigurationException("Could not get processors" + 74 " from crawl order: " + e.getMessage()); 75 } catch (MBeanException e) { 76 throw new FatalConfigurationException("Could not get processors" + 77 " from crawl order: " + e.getMessage()); 78 } catch (ReflectionException e) { 79 throw new FatalConfigurationException("Could not get processors" + 80 " from crawl order: " + e.getMessage()); 81 } 82 83 if (processorCount() == 0) { throw new FatalConfigurationException( 84 "No processors defined"); } 85 } 86 87 94 public void addProcessorMap(String name, MapType processorMap) { 95 ProcessorChain processorChain = new ProcessorChain(processorMap); 96 ProcessorChain previousChain = getLastChain(); 97 if (previousChain != null) { 98 previousChain.setNextChain(processorChain); 99 } 100 chainList.add(processorChain); 101 chainMap.put(name, processorChain); 102 } 103 104 108 public ProcessorChain getFirstChain() { 109 return (ProcessorChain) chainList.get(0); 110 } 111 112 119 public ProcessorChain getLastChain() { 120 if (size() == 0) { 121 return null; 122 } else { 123 return (ProcessorChain) chainList.get(size() - 1); 124 } 125 } 126 127 131 public int processorCount() { 132 int processorCount = 0; 133 for (Iterator it = iterator(); it.hasNext();) { 134 processorCount += ((ProcessorChain) it.next()).size(); 135 } 136 return processorCount; 137 } 138 139 143 public Iterator iterator() { 144 return chainList.iterator(); 145 } 146 147 151 public int size() { 152 return chainList.size(); 153 } 154 155 160 public ProcessorChain getProcessorChain(int index) { 161 return (ProcessorChain) chainList.get(index); 162 } 163 164 169 public ProcessorChain getProcessorChain(String name) { 170 return (ProcessorChain) chainMap.get(name); 171 } 172 173 public void kickUpdate() { 174 for (ProcessorChain chain : chainList) { 175 chain.kickUpdate(); 176 } 177 } 178 179 } 180 | Popular Tags |