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