1 13 package org.pentaho.plugin.core; 14 15 import java.text.DecimalFormat ; 16 import java.text.Format ; 17 import java.text.SimpleDateFormat ; 18 import java.util.Set ; 19 20 import org.apache.commons.logging.Log; 21 import org.apache.commons.logging.LogFactory; 22 import org.pentaho.core.connection.IPentahoResultSet; 23 import org.pentaho.core.connection.PentahoDataTransmuter; 24 import org.pentaho.messages.Messages; 25 import org.pentaho.plugin.ComponentBase; 26 27 public class ResultSetCrosstabComponent extends ComponentBase { 28 29 private static final long serialVersionUID = -868492439427599791L; 30 private static final String RESULT_SET = "result_set"; private static final String PIVOT_COLUMN = "pivot_column"; private static final String MEASURES_COLUMN = "measures_column"; private static final String FORMAT_TYPE = "format_type"; private static final String FORMAT_STRING = "format_string"; private static final String ORDERED_MAPS = "ordered_maps"; private static final String TRANSFORM_SORTBYCOL = "sort_by_col"; private static final String SORT_FORMAT_TYPE = "sort_format_type"; private static final String SORT_FORMAT_STRING = "sort_format_string"; private static final String OLD_STYLE_CROSSTAB = "non_ordered"; private static final String UNIQUE_ROW_IDENTIFIER_COLUMN = "unique_row_identifier_column"; 42 public void done() { 43 45 } 46 47 protected boolean validateAction() { 48 if (!isDefinedInput(PIVOT_COLUMN)) { 49 error(Messages.getErrorString("ResultSetCrosstabComponent.ERROR_0001_PIVOT_COLUMN_IS_REQUIRED")); return false; 51 } 52 if (!isDefinedInput(MEASURES_COLUMN)) { 53 error(Messages.getErrorString("ResultSetCrosstabComponent.ERROR_0002_MEASURES_COLUMN_IS_REQUIRED")); return false; 55 } 56 if (isDefinedInput(FORMAT_TYPE)) { 57 if (!isDefinedInput(FORMAT_STRING)) { 58 error(Messages.getErrorString("ResultSetCrosstabComponent.ERROR_0003_FORMAT_PARAMETERS_BAD")); return false; 60 } 61 } 62 if (isDefinedInput(SORT_FORMAT_TYPE)) { 63 if (!isDefinedInput(SORT_FORMAT_STRING)) { 64 error(Messages.getErrorString("ResultSetCrosstabComponent.ERROR_0004_SORT_FORMAT_PARAMETERS_BAD")); return false; 66 } 67 } 68 return true; 69 } 70 71 protected boolean executeAction() throws Throwable { 72 Object resultSetObject = getInputValue(RESULT_SET); 73 String outputName = getResultOutputName(); 74 if (outputName == null) { 75 return false; 76 } 77 if (resultSetObject instanceof IPentahoResultSet) { 78 int columnToPivot = Integer.parseInt(getInputStringValue(PIVOT_COLUMN)); 79 int measuresColumn = Integer.parseInt(getInputStringValue(MEASURES_COLUMN)); 80 String formatType = null; 81 String formatString = null; 82 if (isDefinedInput(FORMAT_TYPE)) { 83 formatType = getInputStringValue(FORMAT_TYPE); 84 formatString = getInputStringValue(FORMAT_STRING); 85 } 86 Format format = null; 87 88 if (formatType != null && formatType.length() > 0) { 90 if (StandardSettings.DECIMAL_FORMAT_TYPE.equalsIgnoreCase(formatType)) { 91 format = new DecimalFormat (formatString); 92 } else if (StandardSettings.DATE_FORMAT_TYPE.equalsIgnoreCase(formatType)) { 93 format = new SimpleDateFormat (formatString); 94 } 95 } 96 String orderedMaps = getInputStringValue(ORDERED_MAPS); 98 boolean orderOutputColumns = "true".equalsIgnoreCase(orderedMaps); 100 int transformSortByColumn = 0; 102 String sortColumn = getInputStringValue(TRANSFORM_SORTBYCOL); 103 if (sortColumn != null) { 104 transformSortByColumn = Integer.parseInt(sortColumn); 105 } 106 107 int uniqueRowIdentifierColumn = -1; 112 if (isDefinedInput(UNIQUE_ROW_IDENTIFIER_COLUMN)) { 113 String tmp = getInputStringValue(UNIQUE_ROW_IDENTIFIER_COLUMN); 114 uniqueRowIdentifierColumn = Integer.parseInt(tmp); 115 } 116 117 String sortFormatType = null; 118 String sortFormatString = null; 119 if (isDefinedInput(SORT_FORMAT_TYPE)) { 120 sortFormatString = getInputStringValue(SORT_FORMAT_STRING); 121 sortFormatType = getInputStringValue(SORT_FORMAT_TYPE); 122 } 123 Format sortFormat = null; 124 if (sortFormatType != null && sortFormatType.length() > 0) { 125 if (StandardSettings.DECIMAL_FORMAT_TYPE.equalsIgnoreCase(sortFormatString)) { 126 sortFormat = new DecimalFormat (sortFormatString); 127 } else if (StandardSettings.DATE_FORMAT_TYPE.equalsIgnoreCase(sortFormatType)) { 128 sortFormat = new SimpleDateFormat (sortFormatString); 129 } 130 } 131 132 IPentahoResultSet rSet = null; 133 134 if (isDefinedInput(OLD_STYLE_CROSSTAB)) { 135 warn(Messages.getString("ResultSetCrosstabComponent.WARN_DEPRECATED")); rSet = PentahoDataTransmuter.crossTab((IPentahoResultSet)resultSetObject, columnToPivot - 1, measuresColumn - 1, transformSortByColumn - 1, format, sortFormat, orderOutputColumns); 137 } else { 138 rSet = PentahoDataTransmuter.crossTabOrdered((IPentahoResultSet)resultSetObject, columnToPivot - 1, measuresColumn - 1, transformSortByColumn - 1, format, sortFormat, orderOutputColumns, uniqueRowIdentifierColumn - 1); 139 } 140 setOutputValue(outputName, rSet); 142 143 return true; 144 145 } 146 return false; 147 } 148 149 public boolean init() { 150 return true; 152 } 153 154 protected boolean validateSystemSettings() { 155 return true; } 157 158 public Log getLogger() { 159 return LogFactory.getLog(ResultSetCrosstabComponent.class); 160 } 161 162 public String getResultOutputName() { 163 Set outputs = getOutputNames(); 164 if ((outputs == null) || (outputs.size() != 1)) { 165 error(Messages.getString("Template.ERROR_0002_OUTPUT_COUNT_WRONG")); return null; 167 } 168 String outputName = null; 169 try { 170 outputName = getInputStringValue(StandardSettings.OUTPUT_NAME); 171 } catch (Exception e) { 172 } 173 if (outputName == null) { outputName = (String ) outputs.iterator().next(); 175 } 176 return outputName; 177 } 178 179 180 } 181 | Popular Tags |