001 package org.shiftone.jrat.core.criteria; 002 003 004 import org.shiftone.jrat.util.log.Logger; 005 006 import java.util.ArrayList; 007 import java.util.Collection; 008 import java.util.Collections; 009 import java.util.List; 010 011 012 /** 013 * @author jeff@shiftone.org (Jeff Drost) 014 */ 015 public abstract class CompositeMethodCriteria implements MethodCriteria { 016 017 private static final Logger LOG = Logger.getLogger(CompositeMethodCriteria.class); 018 private List criterion = new ArrayList(); 019 020 public void addCriteria(MethodCriteria criteria) { 021 criterion.add(criteria); 022 } 023 024 025 public int size() { 026 return criterion.size(); 027 } 028 029 030 public boolean isEmpty() { 031 return criterion.isEmpty(); 032 } 033 034 035 public void clear() { 036 criterion.clear(); 037 } 038 039 040 public Collection getCriterion() { 041 return Collections.unmodifiableCollection(criterion); 042 } 043 044 045 private MethodCriteria optimize() { 046 047 if (criterion.size() == 0) { 048 return ConstantMethodCriteria.ALL; 049 } else if (criterion.size() == 1) { 050 return (MethodCriteria) criterion.get(0); 051 } 052 053 return this; 054 } 055 056 057 protected abstract String getTag(); 058 059 060 public String toString() { 061 062 StringBuffer sb = new StringBuffer(); 063 064 sb.append("<" + getTag() + " size='" + criterion.size() + "'>"); 065 066 for (int i = 0; i < criterion.size(); i++) { 067 MethodCriteria criteria = (MethodCriteria) criterion.get(i); 068 069 sb.append(criteria.toString()); 070 } 071 072 sb.append("</" + getTag() + ">"); 073 074 return sb.toString(); 075 } 076 }