1 20 package org.enhydra.barracuda.contrib.sam.models; 21 22 import org.enhydra.barracuda.core.comp.*; 23 import org.apache.log4j.*; 24 import java.util.*; 25 26 33 public class IterativeSubModel extends IteratorModel { 34 35 protected static Logger logger = Logger.getLogger(IterativeSubModel.class); 36 37 38 protected TemplateModel enclosing; 39 protected String key; 40 41 45 public IterativeSubModel(String name, String key, TemplateModel enclosing) { 46 super(name); 47 this.enclosing = enclosing; 48 this.key = key; 49 } 50 51 public void preIterate() { 52 if (enclosing==null) { 53 logger.error("you didn't specify a valid enclosing model"); 54 return; 55 } 56 Object referenceMain = enclosing.getItem(new TemplateDirective(null, null, key, null)); 57 61 62 Collection coll = null; 64 if (referenceMain instanceof Collection) { 65 logger.debug("List: " + (Collection)referenceMain); 66 coll = (Collection)referenceMain; 67 } else { 68 logger.info("the enclosing model (type: " + enclosing.getClass().getName() + ") doesn't deliver a Collection, so call getListFromReference"); 69 coll = getListFromReference(referenceMain); 70 } 71 if (coll == null) { 72 logger.error("could not get a list from model " + enclosing.getClass().getName()); 73 } else { 74 setIterator( coll.iterator() ); 75 } 76 super.preIterate(); 77 } 78 79 80 protected Collection getListFromReference(Object ref) { 81 throw new UnsupportedOperationException ("getListFromReference is not yet implemented"); 82 } 83 84 public Object getItem(String key) { 85 logger.debug("getting key : " + key); 86 return _current; 87 } 88 } 89 | Popular Tags |