1 16 17 package org.pentaho.ui.component; 18 19 import java.util.ArrayList ; 20 import java.util.Iterator ; 21 import java.util.List ; 22 import java.util.Map ; 23 24 import org.dom4j.Document; 25 import org.dom4j.Element; 26 import org.pentaho.core.session.IPentahoSession; 27 import org.pentaho.core.system.PentahoSystem; 28 import org.pentaho.core.ui.IPentahoUrlFactory; 29 import org.pentaho.core.util.XForm; 30 import org.pentaho.core.util.XmlHelper; 31 import org.pentaho.messages.Messages; 32 import org.pentaho.util.logging.ILogger; 33 34 45 public class FilterPanel { 46 47 public static final boolean debug = PentahoSystem.debug; 48 49 ArrayList filterList; 50 51 String error; 52 53 String name; 54 55 IPentahoUrlFactory urlFactory; 56 57 ILogger logger; 58 59 public FilterPanel(IPentahoSession session, Document document, IPentahoUrlFactory urlFactory, ILogger logger) { 60 this.urlFactory = urlFactory; 61 this.logger = logger; 62 filterList = new ArrayList (); 63 if (document != null) { 64 List filterNodes = document.selectNodes("filters/filter"); name = document.selectSingleNode("filters/name").getText(); Iterator filtersIterator = filterNodes.iterator(); 68 while (filtersIterator.hasNext()) { 69 Element filterNode = (Element) filtersIterator.next(); 70 FilterDefinition filterDefinition = new FilterDefinition(filterNode, session, name, logger); 71 filterList.add(filterDefinition); 72 } 73 if (filterList.size() == 0) { 74 error = Messages.getString("FilterPanel.ERROR_0001_NO_FILTERS"); return; 76 } 77 78 } 79 } 80 81 public List getFilters() { 82 return filterList; 83 } 84 85 public boolean populate(Map parameterProviders, Map defaultValues) { 86 int ok = 0; 87 int fail = 0; 88 if (filterList != null) { 89 Iterator filtersIterator = filterList.iterator(); 90 while (filtersIterator.hasNext()) { 91 FilterDefinition filterDefinition = (FilterDefinition) filtersIterator.next(); 92 if (filterDefinition.populate(parameterProviders, (String []) defaultValues.get(filterDefinition.getName()))) { 93 ok++; 94 } else { 95 fail++; 96 } 97 } 98 } 99 return (fail == 0); 100 } 101 102 public Document getXForm() { 103 104 StringBuffer content = new StringBuffer (); 105 String actionUrl = urlFactory.getActionUrlBuilder().getUrl(); 106 107 content.append("<filters xmlns:xf=\"http://www.w3.org/2002/xforms\"><id></id><title><![CDATA[" + Messages.getEncodedString(name) + "]]></title><description></description><help></help>" + "<action><![CDATA[" + actionUrl + "]]></action>"); 111 if (error != null) { 112 content.append("<error>"); content.append(error); 114 content.append("</error>"); } else if (filterList == null) { 116 content.append("<error>"); content.append(Messages.getString("FilterPanel.ERROR_0003_NO_FILTER_VALUES")); content.append("</error>"); } else { 120 try { 121 Iterator filtersIterator = filterList.iterator(); 122 StringBuffer xformHeader = new StringBuffer (); 123 String formName = null; 124 while (filtersIterator.hasNext()) { 125 FilterDefinition filterDefinition = (FilterDefinition) filtersIterator.next(); 126 String filterName = filterDefinition.getName(); 127 if (formName == null) { 128 formName = filterName; 129 } 130 String title = filterDefinition.getTitle(); 131 StringBuffer xformBody = new StringBuffer (); 132 filterDefinition.getXForm(xformHeader, xformBody); 134 139 content.append("<filter><name><![CDATA[" + filterName + "]]></name>") .append("<title><![CDATA[" + title + "]]></title><control>") .append(xformBody).append("</control></filter>"); } 143 XForm.completeXFormHeader( formName, xformHeader ); 144 content.append( xformHeader ); 145 } catch (Exception e) { 146 logger.error(Messages.getErrorString("FilterPanel.ERROR_0004_COULD_NOT_CREATE_CONTENT"), e); } 148 149 } 150 content.append("</filters>"); if (debug) logger.debug( content.toString() ); 152 return XmlHelper.getDocFromString(content.toString()); 153 } 154 155 } 156 | Popular Tags |