| 1 7 package fr.jayasoft.ivy.version; 8 9 import java.util.Collections ; 10 import java.util.Iterator ; 11 import java.util.LinkedList ; 12 import java.util.List ; 13 14 import fr.jayasoft.ivy.Ivy; 15 import fr.jayasoft.ivy.IvyAware; 16 import fr.jayasoft.ivy.ModuleDescriptor; 17 import fr.jayasoft.ivy.ModuleRevisionId; 18 19 public class ChainVersionMatcher extends AbstractVersionMatcher { 20 private List _matchers = new LinkedList (); 21 22 public ChainVersionMatcher() { 23 super("chain"); 24 } 25 26 public void add(VersionMatcher matcher) { 27 _matchers.add(0, matcher); 28 if (getIvy() != null && matcher instanceof IvyAware) { 29 ((IvyAware) matcher).setIvy(getIvy()); 30 } 31 } 32 33 public void setIvy(Ivy ivy) { 34 super.setIvy(ivy); 35 for (Iterator iter = _matchers.iterator(); iter.hasNext();) { 36 VersionMatcher matcher = (VersionMatcher) iter.next(); 37 if (matcher instanceof IvyAware) { 38 ((IvyAware) matcher).setIvy(ivy); 39 } 40 } 41 } 42 43 public List getMatchers() { 44 return Collections.unmodifiableList(_matchers); 45 } 46 47 48 public boolean isDynamic(ModuleRevisionId askedMrid) { 49 for (Iterator iter = _matchers.iterator(); iter.hasNext();) { 50 VersionMatcher matcher = (VersionMatcher)iter.next(); 51 if (matcher.isDynamic(askedMrid)) { 52 return true; 53 } 54 } 55 return false; 56 } 57 58 public boolean accept(ModuleRevisionId askedMrid, ModuleRevisionId foundMrid) { 59 for (Iterator iter = _matchers.iterator(); iter.hasNext();) { 60 VersionMatcher matcher = (VersionMatcher)iter.next(); 61 if (!iter.hasNext() || matcher.isDynamic(askedMrid)) { 62 return matcher.accept(askedMrid, foundMrid); 63 } 64 } 65 return false; 66 } 67 68 public boolean needModuleDescriptor(ModuleRevisionId askedMrid, ModuleRevisionId foundMrid) { 69 for (Iterator iter = _matchers.iterator(); iter.hasNext();) { 70 VersionMatcher matcher = (VersionMatcher)iter.next(); 71 if (!iter.hasNext() || matcher.isDynamic(askedMrid)) { 72 return matcher.needModuleDescriptor(askedMrid, foundMrid); 73 } 74 } 75 return false; 76 } 77 78 public boolean accept(ModuleRevisionId askedMrid, ModuleDescriptor foundMD) { 79 for (Iterator iter = _matchers.iterator(); iter.hasNext();) { 80 VersionMatcher matcher = (VersionMatcher)iter.next(); 81 if (!iter.hasNext() || matcher.isDynamic(askedMrid)) { 82 return matcher.accept(askedMrid, foundMD); 83 } 84 } 85 return false; 86 } 87 88 } 89 | Popular Tags |