1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.jsr168.business.portlet;
35
36 import fr.paris.lutece.plugins.jsr168.pluto.Button;
37 import fr.paris.lutece.plugins.jsr168.pluto.Buttons;
38 import fr.paris.lutece.plugins.jsr168.pluto.LuteceToPlutoConnector;
39 import fr.paris.lutece.portal.business.portlet.Portlet;
40 import fr.paris.lutece.util.xml.XmlUtil;
41
42 import java.util.Iterator;
43 import java.util.StringTokenizer;
44
45 import javax.servlet.http.HttpServletRequest;
46
47
48
49
50
51 public class Jsr168Portlet extends Portlet
52 {
53 private static final String TAG_HTML_PORTLET = "html-portlet";
54 private static final String TAG_HTML_PORTLET_CONTENT = "html-portlet-content";
55 private static final String XML_ELEMENT_PORTLET_BUTTONS = "portlet-buttons";
56 private static final String XML_ELEMENT_PORTLET_BUTTONS_MODES = "modes";
57 private static final String XML_ELEMENT_PORTLET_BUTTONS_STATES = "states";
58
59
60
61 private String _strJsr168Name;
62
63
64
65
66 public Jsr168Portlet( )
67 {
68 setPortletTypeId( Jsr168PortletHome.getInstance( ).getPortletTypeId( ) );
69 }
70
71
72
73
74
75
76 public void setJsr168Name( String strJsr168Name )
77 {
78 _strJsr168Name = strJsr168Name;
79 }
80
81
82
83
84
85
86 public String getJsr168Name( )
87 {
88 return _strJsr168Name;
89 }
90
91
92
93
94
95
96
97 protected String addPortletTags( StringBuffer sbPortlet )
98 {
99 StringBuffer sbXml = new StringBuffer( );
100 XmlUtil.beginElement( sbXml, TAG_PORTLET );
101 XmlUtil.addElementHtml( sbXml, TAG_PORTLET_NAME, getName( ) );
102 XmlUtil.addElement( sbXml, TAG_PORTLET_ID, getId( ) );
103 XmlUtil.addElement( sbXml, TAG_PAGE_ID, getPageId( ) );
104 addPortletButtons( sbXml );
105 sbXml.append( sbPortlet );
106 XmlUtil.endElement( sbXml, TAG_PORTLET );
107
108 return sbXml.toString( );
109 }
110
111
112
113
114 public void remove( )
115 {
116 Jsr168PortletHome.getInstance( ).remove( this );
117 }
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152 public String getXml( HttpServletRequest request )
153 {
154 StringBuffer sbXml = new StringBuffer( );
155 XmlUtil.beginElement( sbXml, TAG_HTML_PORTLET );
156 XmlUtil.addElementHtml( sbXml, TAG_HTML_PORTLET_CONTENT,
157 LuteceToPlutoConnector.render( getId( ), getJsr168Name( ) ) );
158 XmlUtil.endElement( sbXml, TAG_HTML_PORTLET );
159
160 return addPortletTags( sbXml );
161 }
162
163
164
165
166
167
168
169 public String getXmlDocument( HttpServletRequest request )
170 {
171 return XmlUtil.getXmlHeader( ) + getXml( request );
172 }
173
174
175
176
177 public void update( )
178 {
179 Jsr168PortletHome.getInstance( ).update( this );
180 }
181
182
183
184
185
186
187
188
189
190
191 private void addPortletButtons( StringBuffer sbXml )
192 {
193
194 Buttons buttons = LuteceToPlutoConnector.getButtons( getId( ), getJsr168Name( ) );
195
196 XmlUtil.beginElement( sbXml, XML_ELEMENT_PORTLET_BUTTONS );
197
198
199 XmlUtil.beginElement( sbXml, XML_ELEMENT_PORTLET_BUTTONS_MODES );
200
201 for ( Iterator it = buttons.modes( ); it.hasNext( ); )
202 {
203 Button button = (Button) it.next( );
204 sbXml.append( "<button link=\"" ).append( protectAmp( button.getUrlRender( ) ) ).append( "\" image=\"" )
205 .append( button.getImagePath( ) ).append( "\"/>" );
206 }
207
208 XmlUtil.endElement( sbXml, XML_ELEMENT_PORTLET_BUTTONS_MODES );
209
210
211 XmlUtil.beginElement( sbXml, XML_ELEMENT_PORTLET_BUTTONS_STATES );
212
213 for ( Iterator it = buttons.states( ); it.hasNext( ); )
214 {
215 Button button = (Button) it.next( );
216 sbXml.append( "<button link=\"" ).append( protectAmp( button.getUrlRender( ) ) ).append( "\" image=\"" )
217 .append( button.getImagePath( ) ).append( "\"/>" );
218 }
219
220 XmlUtil.endElement( sbXml, XML_ELEMENT_PORTLET_BUTTONS_STATES );
221
222 XmlUtil.endElement( sbXml, XML_ELEMENT_PORTLET_BUTTONS );
223 }
224
225
226
227
228
229
230
231
232 private String protectAmp( String strSrc )
233 {
234 StringBuffer buf = new StringBuffer( strSrc.length( ) );
235
236 for ( StringTokenizer tokenizer = new StringTokenizer( strSrc, "&" ); tokenizer.hasMoreElements( ); )
237 {
238 String token = tokenizer.nextToken( );
239 buf.append( token );
240
241 if ( tokenizer.hasMoreElements( ) )
242 {
243 buf.append( "&" );
244 }
245 }
246
247 return buf.toString( );
248 }
249 }