KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > beehive > netui > databinding > datagrid > runtime > rendering > cell > SortedCellDecorator


1 /*
2  * Copyright 2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * $Header:$
17  */

18 package org.apache.beehive.netui.databinding.datagrid.runtime.rendering.cell;
19
20 import org.apache.beehive.netui.util.internal.InternalStringBuilder;
21
22 import java.util.Map JavaDoc;
23 import java.net.URISyntaxException JavaDoc;
24 import javax.servlet.jsp.JspContext JavaDoc;
25 import javax.servlet.http.HttpServletRequest JavaDoc;
26
27 import org.apache.beehive.netui.databinding.datagrid.api.exceptions.CellDecoratorException;
28 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortModel;
29 import org.apache.beehive.netui.databinding.datagrid.api.sort.SortDirection;
30 import org.apache.beehive.netui.databinding.datagrid.api.rendering.CellModel;
31 import org.apache.beehive.netui.databinding.datagrid.api.rendering.DataGridTagModel;
32 import org.apache.beehive.netui.databinding.datagrid.api.rendering.CellDecorator;
33 import org.apache.beehive.netui.databinding.datagrid.runtime.model.cell.HeaderCellModel;
34 import org.apache.beehive.netui.databinding.datagrid.runtime.util.JspUtil;
35 import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
36 import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
37 import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
38 import org.apache.beehive.netui.tags.rendering.AnchorTag;
39 import org.apache.beehive.netui.tags.rendering.ImageTag;
40 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
41 import org.apache.beehive.netui.tags.html.HtmlConstants;
42 import org.apache.beehive.netui.util.logging.Logger;
43 import org.apache.beehive.netui.util.Bundle;
44
45 /**
46  *
47  */

48 public final class SortedCellDecorator
49     extends CellDecorator {
50
51     private static final Logger LOGGER = Logger.getInstance(SortedCellDecorator.class);
52
53     public SortedCellDecorator(CellDecorator decorator) {
54         super(decorator);
55     }
56
57     public void decorate(JspContext JavaDoc jspContext, AbstractRenderAppender appender, CellModel cellModel)
58             throws CellDecoratorException {
59
60         assert cellModel instanceof HeaderCellModel;
61         HeaderCellModel headerCellModel = (HeaderCellModel)cellModel;
62
63         assert getNestedDecorator() != null : "SortedCellDecorator did not find a nested decorator and requires one";
64
65         getNestedDecorator().decorate(jspContext, appender, cellModel);
66
67         if(headerCellModel.isSortable()) {
68             String JavaDoc sortLink = buildSortLink(jspContext, headerCellModel);
69             appender.append(" ");
70             appender.append(sortLink);
71         }
72     }
73
74     protected String JavaDoc buildSortLink(JspContext JavaDoc jspContext, HeaderCellModel cellModel) {
75         HttpServletRequest JavaDoc request = JspUtil.getRequest(jspContext);
76         DataGridTagModel dgm = cellModel.getDataGridTagModel();
77         assert dgm != null;
78
79         SortModel sortModel = dgm.getState().getSortModel();
80
81         InternalStringBuilder builder = new InternalStringBuilder();
82         AbstractRenderAppender appender = new StringBuilderRenderAppender(builder);
83
84         TagRenderingBase imageRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.IMAGE_TAG, request);
85         TagRenderingBase anchorRenderer = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, request);
86
87         AnchorTag.State aTag = new AnchorTag.State();
88         ImageTag.State imgTag = new ImageTag.State();
89
90         SortDirection sortDirection = sortModel.getSortDirection(cellModel.getSortExpression());
91
92         /* build icon for existing sort */
93         if(sortModel.isSorted(cellModel.getSortExpression()))
94             imgTag.src = dgm.getResourcePath() + dgm.getSortImagePath(sortDirection);
95         else
96             imgTag.src = dgm.getResourcePath() + dgm.getDefaultSortImagePath();
97
98         imgTag.registerAttribute(AbstractHtmlState.ATTR_GENERAL, HtmlConstants.BORDER, "false");
99
100         Map JavaDoc queryParams = dgm.getUrlBuilder().buildSortQueryParamsMap(cellModel.getSortExpression());
101
102         String JavaDoc href = null;
103         try {
104             href = JspUtil.createURL(cellModel.getSortHref(),
105                     cellModel.getSortAction(),
106                     null,
107                     cellModel.getScopeId(),
108                     queryParams,
109                     dgm.getJspContext());
110         }
111         catch(URISyntaxException JavaDoc use) {
112             String JavaDoc message = Bundle.getErrorString("Rendering_URLException", new Object JavaDoc[]{cellModel.getSortHref(), cellModel.getSortAction()});
113             if(LOGGER.isErrorEnabled())
114                 LOGGER.error(message, use);
115             throw new CellDecoratorException(message, use);
116         }
117
118         aTag.href = href;
119
120         anchorRenderer.doStartTag(appender, aTag);
121         imageRenderer.doStartTag(appender, imgTag);
122         imageRenderer.doEndTag(appender);
123         anchorRenderer.doEndTag(appender);
124
125         return builder.toString();
126     }
127 }
128
Popular Tags