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 }