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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to