You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by df...@apache.org on 2004/06/22 15:51:46 UTC
cvs commit: jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table TableGenerator.java TableHandler.java
dflorey 2004/06/22 06:51:46
Modified: proposals/projector/src/java/org/apache/slide/projector/processor/table
TableGenerator.java TableHandler.java
Log:
Improved table generation (resizable columns)
Revision Changes Path
1.5 +60 -29 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableGenerator.java
Index: TableGenerator.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableGenerator.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TableGenerator.java 21 Jun 2004 16:00:25 -0000 1.4
+++ TableGenerator.java 22 Jun 2004 13:51:46 -0000 1.5
@@ -4,6 +4,7 @@
import org.apache.slide.projector.descriptor.BooleanValueDescriptor;
import org.apache.slide.projector.descriptor.MapValueDescriptor;
import org.apache.slide.projector.descriptor.ParameterDescriptor;
+import org.apache.slide.projector.descriptor.ResourceValueDescriptor;
import org.apache.slide.projector.descriptor.StringValueDescriptor;
import org.apache.slide.projector.engine.ProcessorManager;
import org.apache.slide.projector.util.StoreHelper;
@@ -36,10 +37,10 @@
final private static String COLUMN_FRAGMENT = "column";
final private static String HEADER_COLUMN_FRAGMENT = "header column";
- final private static String SORTABLE_HEADER_COLUMN_FRAGMENT = "sortable header column";
+ final private static String COLLAPSED_COLUMN_FRAGMENT = "collapsed column";
+ final private static String COLLAPSED_HEADER_COLUMN_FRAGMENT = "collapsed header column";
final private static String ASCENDING_HEADER_COLUMN_FRAGMENT = "ascending header column";
final private static String DESCENDING_HEADER_COLUMN_FRAGMENT = "descending header column";
- final private static String RESIZABLE_HEADER_COLUMN_FRAGMENT = "resizable header column";
final private static String COLUMNS_PARAMETER = "columns";
final private static String RESIZABLE = "resizable";
@@ -51,17 +52,17 @@
final private static String COLUMNS = "columns";
final private static String VALUE = "value";
- final private static String HANDLER = "handler";
+ final private static String SORTABLE_HANDLER = "sortableHandler";
+ final private static String RESIZABLE_HANDLER = "resizableHandler";
- private Template columnTemplate, headerColumnTemplate;
- private Template resizableHeaderColumnTemplate, sortableHeaderColumnTemplate;
+ private Template columnTemplate, collapsedColumnTemplate, headerColumnTemplate, collapsedHeaderColumnTemplate;
private Template ascendingHeaderColumnTemplate, descendingHeaderColumnTemplate;
private ParameterDescriptor []parameterDescriptors;
public TableGenerator() {
setRequiredFragments(new String[] { DEFAULT_FRAGMENT, COLUMN_FRAGMENT, HEADER_COLUMN_FRAGMENT });
- setOptionalFragments(new String[] { RESIZABLE_HEADER_COLUMN_FRAGMENT, SORTABLE_HEADER_COLUMN_FRAGMENT, ASCENDING_HEADER_COLUMN_FRAGMENT, DESCENDING_HEADER_COLUMN_FRAGMENT, EMPTY_FRAGMENT, HEADER_FRAGMENT, FOOTER_FRAGMENT, FIRST_FRAGMENT, LAST_FRAGMENT, EVEN_FRAGMENT });
+ setOptionalFragments(new String[] { COLLAPSED_HEADER_COLUMN_FRAGMENT, COLLAPSED_COLUMN_FRAGMENT, ASCENDING_HEADER_COLUMN_FRAGMENT, DESCENDING_HEADER_COLUMN_FRAGMENT, EMPTY_FRAGMENT, HEADER_FRAGMENT, FOOTER_FRAGMENT, FIRST_FRAGMENT, LAST_FRAGMENT, EVEN_FRAGMENT });
setRepeatedFragments(new String[] { FIRST_FRAGMENT, LAST_FRAGMENT, DEFAULT_FRAGMENT, EVEN_FRAGMENT });
}
@@ -73,18 +74,18 @@
for ( int i = 0; i < parentParameterDescriptors.length; i++ ) {
parameterDescriptorList.add(parentParameterDescriptors[i]);
}
+ List headerParameterDescriptors = getTemplateParameterDescriptor(new String[] { HEADER_COLUMN_FRAGMENT, COLLAPSED_HEADER_COLUMN_FRAGMENT });
+ headerParameterDescriptors.add(new ParameterDescriptor(HEADER, new ParameterMessage("tableGenerator/parameter/columns/header"), new StringValueDescriptor(), StringValue.EMPTY));
+ headerParameterDescriptors.add(new ParameterDescriptor(VALUE, new ParameterMessage("tableGenerator/parameter/columns/value"), new ResourceValueDescriptor(), NullValue.NULL));
+ headerParameterDescriptors.add(new ParameterDescriptor(KEY, new ParameterMessage("tableGenerator/parameter/columns/key"), new StringValueDescriptor(), NullValue.NULL));
+ headerParameterDescriptors.add(new ParameterDescriptor(RESIZABLE, new ParameterMessage("tableGenerator/parameter/columns/resizable"), new BooleanValueDescriptor(), BooleanValue.FALSE));
+ headerParameterDescriptors.add(new ParameterDescriptor(SORTABLE, new ParameterMessage("tableGenerator/parameter/columns/sortable"), new BooleanValueDescriptor(), BooleanValue.FALSE));
parameterDescriptorList.add(new ParameterDescriptor(COLUMNS_PARAMETER, new ParameterMessage("tableGenerator/parameter/columns"),
- new ArrayValueDescriptor(new MapValueDescriptor(
- new ParameterDescriptor[] {
- new ParameterDescriptor(HEADER, new ParameterMessage("tableGenerator/parameter/columns/header"), new StringValueDescriptor(), StringValue.EMPTY),
- new ParameterDescriptor(KEY, new ParameterMessage("tableGenerator/parameter/columns/key"), new StringValueDescriptor()),
- new ParameterDescriptor(RESIZABLE, new ParameterMessage("tableGenerator/parameter/columns/resizable"), new BooleanValueDescriptor(), BooleanValue.FALSE),
- new ParameterDescriptor(SORTABLE, new ParameterMessage("tableGenerator/parameter/columns/sortable"), new BooleanValueDescriptor(), BooleanValue.FALSE)
- }
- ))));
+ new ArrayValueDescriptor(new MapValueDescriptor((ParameterDescriptor [])headerParameterDescriptors.toArray(new ParameterDescriptor[headerParameterDescriptors.size()])))));
parameterDescriptorList.add(new ParameterDescriptor(PARAMETER, new ParameterMessage("tableGenerator/parameter/parameter"), new MapValueDescriptor(), new MapValue(new HashMap())));
parameterDescriptors = (ParameterDescriptor[] )parameterDescriptorList.toArray(new ParameterDescriptor[parameterDescriptorList.size()]);
- sortableHeaderColumnTemplate = getOptionalFragment(SORTABLE_HEADER_COLUMN_FRAGMENT);
+ collapsedColumnTemplate = getOptionalFragment(COLLAPSED_COLUMN_FRAGMENT);
+ collapsedHeaderColumnTemplate = getOptionalFragment(COLLAPSED_HEADER_COLUMN_FRAGMENT);
ascendingHeaderColumnTemplate = getOptionalFragment(ASCENDING_HEADER_COLUMN_FRAGMENT);
descendingHeaderColumnTemplate = getOptionalFragment(DESCENDING_HEADER_COLUMN_FRAGMENT);
try {
@@ -104,6 +105,7 @@
Map tableMap;
MapValue idResource = (MapValue)store.get(id);
String sortedBy = null, order = null;
+ Map size = null;
if ( idResource == null) {
tableMap = new HashMap();
MapValue tableState = new MapValue(tableMap);
@@ -114,6 +116,8 @@
if ( sortedByValue != null && sortedByValue != NullValue.NULL ) sortedBy = sortedByValue.toString();
Value orderValue = (Value)idResource.getMap().get(TableHandler.ORDER);
if ( orderValue != null && orderValue != NullValue.NULL ) order = orderValue.toString();
+ Value sizeValue = (Value)idResource.getMap().get(TableHandler.SIZE);
+ if ( sizeValue != null && sizeValue != NullValue.NULL ) size = ((MapValue)sizeValue).getMap();
}
// create headers and columns and call super...
StringBuffer headersBuffer = new StringBuffer(1024);
@@ -121,18 +125,24 @@
for ( int i = 0; i < columns.length; i++ ) {
Map columnMap = ((MapValue)columns[i]).getMap();
boolean sortable = ((BooleanValue)columnMap.get(SORTABLE)).booleanValue();
- if ( sortableHeaderColumnTemplate == null || ascendingHeaderColumnTemplate == null || descendingHeaderColumnTemplate == null ) sortable = false;
+ if ( ascendingHeaderColumnTemplate == null || descendingHeaderColumnTemplate == null ) sortable = false;
boolean resizable = ((BooleanValue)columnMap.get(RESIZABLE)).booleanValue();
Value header = (Value)columnMap.get(HEADER);
Map columnHeaderParameters = new HashMap();
columnHeaderParameters.putAll(parameter);
- columnHeaderParameters.put(HEADER, header);
+ columnHeaderParameters.putAll(columnMap);
Template template = headerColumnTemplate;
- if ( resizable ) {
- template = resizableHeaderColumnTemplate;
- } else if ( sortable ) {
- template = sortableHeaderColumnTemplate;
- String key = columnMap.get(KEY).toString();
+ String key = columnMap.get(KEY).toString();
+ template = headerColumnTemplate;
+ if ( resizable && collapsedColumnTemplate != null && collapsedHeaderColumnTemplate != null ) {
+ if ( size != null && TableHandler.COLLAPSED.equals(size.get(key))) {
+ createResizableHandler(key, TableHandler.EXPAND, handlerUrl, storeName, id, columnHeaderParameters, parameters);
+ template = collapsedHeaderColumnTemplate;
+ } else {
+ createResizableHandler(key, TableHandler.COLLAPSE, handlerUrl, storeName, id, columnHeaderParameters, parameters);
+ }
+ }
+ if ( sortable && template != collapsedHeaderColumnTemplate ) {
String requestedOrder = TableHandler.ASCENDING;
if ( sortedBy != null && sortedBy.equals(key) ) {
if ( order.equals(TableHandler.ASCENDING) ) {
@@ -143,7 +153,7 @@
requestedOrder = TableHandler.ASCENDING;
}
}
- createHandler(key, requestedOrder, handlerUrl, storeName, id, columnHeaderParameters, parameters);
+ createSortableHandler(key, requestedOrder, handlerUrl, storeName, id, columnHeaderParameters, parameters);
}
template.evaluate(headersBuffer, columnHeaderParameters);
}
@@ -155,11 +165,18 @@
for ( int j = 0; j < columns.length; j++ ) {
Map columnMap = ((MapValue)columns[j]).getMap();
String key = columnMap.get(KEY).toString();
- Value value = (Value)inputParameter.get(key);
+ Value value = (Value)columnMap.get(VALUE);
+ if ( value == null || value == NullValue.NULL ) {
+ value = (Value)inputParameter.get(key);
+ }
Map columnParameters = new HashMap();
columnParameters.putAll(parameter);
columnParameters.put(VALUE, value);
- columnTemplate.evaluate(columnsBuffer, columnParameters);
+ Template template = columnTemplate;
+ if ( size != null && TableHandler.COLLAPSED.equals(size.get(key))) {
+ template = collapsedColumnTemplate;
+ }
+ template.evaluate(columnsBuffer, columnParameters);
}
inputParameter.put(COLUMNS, new StringValue(columnsBuffer.toString()));
}
@@ -170,10 +187,24 @@
return parameterDescriptors;
}
- protected void createHandler(String sortedBy, String order, String handlerUrl, String storeName, String id, Map parameters, Map parameter) throws IOException {
+ protected void createSortableHandler(String column, String requestedOrder, String handlerUrl, String storeName, String id, Map parameters, Map parameter) throws IOException {
+ StringBuffer handlerBuffer = new StringBuffer(128);
+ handlerBuffer.append(handlerUrl).append('?').append(TableHandler.STORE).append('=').append(storeName).append('&').append(TableHandler.ID).append('=').append(id).
+ append('&').append(TableHandler.SORTED_BY).append('=').append(column).append('&').append(TableHandler.ORDER).append('=').append(requestedOrder);
+ for ( Iterator j = parameter.entrySet().iterator(); j.hasNext(); ) {
+ Map.Entry entry = (Map.Entry)j.next();
+ if ( entry.getValue() instanceof PrintableValue ) {
+ handlerBuffer.append('&').append(entry.getKey()).append('=');
+ ((PrintableValue)entry.getValue()).print(handlerBuffer);
+ }
+ }
+ parameters.put(SORTABLE_HANDLER, new StringValue(handlerBuffer.toString()));
+ }
+
+ protected void createResizableHandler(String column, String requestedSize, String handlerUrl, String storeName, String id, Map parameters, Map parameter) throws IOException {
StringBuffer handlerBuffer = new StringBuffer(128);
handlerBuffer.append(handlerUrl).append('?').append(TableHandler.STORE).append('=').append(storeName).append('&').append(TableHandler.ID).append('=').append(id).
- append('&').append(TableHandler.SORTED_BY).append('=').append(sortedBy).append('&').append(TableHandler.ORDER).append('=').append(order);
+ append('&').append(requestedSize).append('=').append(column);
for ( Iterator j = parameter.entrySet().iterator(); j.hasNext(); ) {
Map.Entry entry = (Map.Entry)j.next();
if ( entry.getValue() instanceof PrintableValue ) {
@@ -181,6 +212,6 @@
((PrintableValue)entry.getValue()).print(handlerBuffer);
}
}
- parameters.put(HANDLER, new StringValue(handlerBuffer.toString()));
+ parameters.put(RESIZABLE_HANDLER, new StringValue(handlerBuffer.toString()));
}
}
1.6 +27 -2 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableHandler.java
Index: TableHandler.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableHandler.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TableHandler.java 21 Jun 2004 16:00:25 -0000 1.5
+++ TableHandler.java 22 Jun 2004 13:51:46 -0000 1.6
@@ -31,6 +31,11 @@
final static String CURRENT_POSITION = "currentPosition";
final static String SORTED_BY= "sortedBy";
final static String ORDER= "order";
+ final static String SIZE= "size";
+ final static String EXPAND = "expand";
+ final static String EXPANDED = "expanded";
+ final static String COLLAPSE = "collapse";
+ final static String COLLAPSED = "collapsed";
final static String ASCENDING= "ascending";
final static String DESCENDING= "descending";
@@ -40,7 +45,9 @@
new ParameterDescriptor(TARGET_POSITION, new ParameterMessage("tableHandler/targetPosition"), new NumberValueDescriptor(), NullValue.NULL),
new ParameterDescriptor(SORTED_BY, new ParameterMessage("tableHandler/sortedBy"), new StringValueDescriptor(), NullValue.NULL),
new ParameterDescriptor(ORDER, new ParameterMessage("tableHandler/order"), new StringValueDescriptor(new String[] {ASCENDING, DESCENDING}), NullValue.NULL),
- new ParameterDescriptor(STORE, new ParameterMessage("tableHandler/store"), new StringValueDescriptor(Store.stores))
+ new ParameterDescriptor(STORE, new ParameterMessage("tableHandler/store"), new StringValueDescriptor(Store.stores)),
+ new ParameterDescriptor(EXPAND, new ParameterMessage("tableHandler/expand"), new StringValueDescriptor(), NullValue.NULL),
+ new ParameterDescriptor(COLLAPSE, new ParameterMessage("tableHandler/collapse"), new StringValueDescriptor(), NullValue.NULL)
};
public Result process(Map parameter, Context context) throws Exception {
@@ -50,6 +57,8 @@
Value targetPosition = (Value)parameter.get(TARGET_POSITION);
Value sortedBy = (Value)parameter.get(SORTED_BY);
Value order = (Value)parameter.get(ORDER);
+ Value expand = (Value)parameter.get(EXPAND);
+ Value collapse = (Value)parameter.get(COLLAPSE);
Map tableMap;
if ( idResource == null) {
tableMap = new HashMap();
@@ -66,6 +75,22 @@
}
if ( order != NullValue.NULL ) {
tableMap.put(ORDER, order);
+ }
+ if ( collapse != NullValue.NULL || expand != NullValue.NULL ) {
+ MapValue sizeValue = (MapValue)tableMap.get(SIZE);
+ Map size;
+ if ( sizeValue == null ) {
+ size = new HashMap();
+ tableMap.put(SIZE, new MapValue(size));
+ } else {
+ size = sizeValue.getMap();
+ }
+ if ( collapse != NullValue.NULL ) {
+ size.put(collapse.toString(), COLLAPSED);
+ }
+ if ( expand != NullValue.NULL ) {
+ size.put(expand.toString(), EXPANDED);
+ }
}
URI bookmark = (URI)context.getBookmark();
if ( bookmark != null ) {
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org