KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jahia > views > engines > versioning > revisionsdetail > actions > RevisionEntrySetDetailAction


1 package org.jahia.views.engines.versioning.revisionsdetail.actions;
2
3 import java.io.IOException JavaDoc;
4 import java.util.ArrayList JavaDoc;
5 import java.util.Properties JavaDoc;
6 import java.util.Set JavaDoc;
7
8 import javax.servlet.ServletException JavaDoc;
9 import javax.servlet.http.HttpServletRequest JavaDoc;
10 import javax.servlet.http.HttpServletResponse JavaDoc;
11 import javax.swing.JTree JavaDoc;
12 import javax.swing.tree.DefaultMutableTreeNode JavaDoc;
13
14 import org.apache.struts.action.ActionForm;
15 import org.apache.struts.action.ActionForward;
16 import org.apache.struts.action.ActionMapping;
17 import org.apache.struts.action.ActionMessage;
18 import org.apache.struts.action.ActionMessages;
19
20 import org.jahia.content.ContentObject;
21 import org.jahia.data.fields.JahiaField;
22 import org.jahia.data.fields.LoadFlags;
23 import org.jahia.exceptions.JahiaException;
24 import org.jahia.params.ParamBean;
25 import org.jahia.registries.ServicesRegistry;
26 import org.jahia.services.fields.ContentField;
27 import org.jahia.services.version.ContentObjectEntryState;
28 import org.jahia.services.version.EntryLoadRequest;
29 import org.jahia.services.version.RevisionEntry;
30 import org.jahia.services.version.RevisionEntrySet;
31 import org.jahia.utils.GUITreeTools;
32 import org.jahia.utils.LanguageCodeConverters;
33 import org.jahia.utils.textdiff.HunkTextDiffVisitor;
34 import org.jahia.views.engines.JahiaEngineButtonsHelper;
35 import org.jahia.views.engines.JahiaEngineCommonData;
36 import org.jahia.views.engines.JahiaEngineViewHelper;
37 import org.jahia.content.JahiaObject;
38
39 /**
40  *
41  * <p>Title: RevisionEntrySet Dispatch Action</p>
42  * <p>Description: </p>
43  * <p>Copyright: Copyright (c) 2003</p>
44  * <p>Company: Jahia</p>
45  * @author Khue Nguyen
46  * @version 1.0
47  */

48 public class RevisionEntrySetDetailAction extends org.apache.struts.actions.DispatchAction {
49
50     private static org.apache.log4j.Logger logger =
51             org.apache.log4j.Logger.getLogger(RevisionEntrySetDetailAction.class);
52
53     private static final String JavaDoc ENGINE_TITLE = "Revisions Detail";
54
55     private static final String JavaDoc ENGINE_VIEW_HELPER =
56             RevisionEntrySetDetailAction.class + " ENGINE_VIEW_HELPER";
57
58     public static final String JavaDoc ENGINE_VIEW_HELPER_SESSION_ATTRIBUTE
59             = RevisionEntrySetDetailAction.class + "_"
60             + JahiaEngineViewHelper.ENGINE_VIEW_HELPER;
61
62     public static final String JavaDoc REVISIONS_TREE =
63             RevisionEntrySetDetailAction.class + "_RevisionTree";
64
65     public static final String JavaDoc REVISIONENTRYSET =
66             RevisionEntrySetDetailAction.class + "_RevisionEntrySet";
67
68     public static final String JavaDoc REVISIONENTRY =
69             RevisionEntrySetDetailAction.class + "_RevisionEntry";
70
71     public static final String JavaDoc ACTION_URL_REQUEST_ATTRIBUTE = "ActionURL";
72
73     /**
74      * Init Engine Data
75      *
76      * @param request
77      * @return
78      */

79     private void init(ActionMapping mapping, HttpServletRequest JavaDoc request)
80     throws JahiaException {
81
82         try {
83
84             // test whether the data already exists in session or should be created
85
String JavaDoc engineView = request.getParameter ("engineview");
86             String JavaDoc reloaded = request.getParameter("reloaded");
87
88             JTree JavaDoc tree = null;
89             RevisionEntrySet revisionEntrySet = null;
90             ArrayList JavaDoc flatRevisionsList = null;
91
92             // engine view Helper
93
JahiaEngineViewHelper engineViewHelper = null;
94             if ( engineView != null && !"yes".equals(reloaded) ){
95                 // try to retrieve engine data from session
96
try {
97                     engineViewHelper =
98                         (JahiaEngineViewHelper)request.getSession()
99                         .getAttribute(ENGINE_VIEW_HELPER);
100                     tree = (JTree JavaDoc)request.getSession()
101                         .getAttribute(REVISIONS_TREE);
102                     revisionEntrySet = (RevisionEntrySet)request.getSession()
103                                      .getAttribute(REVISIONENTRYSET);
104                 }catch(Throwable JavaDoc t){
105                 }
106             }
107             if ( tree == null ){
108                 // try to get them from request
109
tree = (JTree JavaDoc)request.getAttribute(REVISIONS_TREE);
110                 revisionEntrySet = (RevisionEntrySet)request
111                                  .getAttribute(REVISIONENTRYSET);
112                 // store in session
113
request.getSession().setAttribute(REVISIONS_TREE,tree);
114                 request.getSession().setAttribute(REVISIONENTRYSET,revisionEntrySet);
115             }
116
117             GUITreeTools.updateGUITree(tree,request);
118
119             if ( tree != null ){
120                 DefaultMutableTreeNode JavaDoc rootNode =
121                         (DefaultMutableTreeNode JavaDoc)tree.getModel().getRoot();
122                 if ( rootNode != null ){
123                     flatRevisionsList = GUITreeTools.getFlatTree(tree,rootNode);
124                 }
125             }
126
127             // For JSP Output
128
request.setAttribute("flatRevisionsList",flatRevisionsList);
129
130             // engine common data
131
JahiaEngineCommonData engineCommonData =
132                     new JahiaEngineCommonData(request);
133             engineCommonData.setEngineTitle(ENGINE_TITLE);
134
135             // Prepare engine buttons helper
136
JahiaEngineButtonsHelper jahiaEngineButtonsHelper =
137                     new JahiaEngineButtonsHelper();
138             jahiaEngineButtonsHelper.addOkButton();
139             jahiaEngineButtonsHelper.addCancelButton();
140
141             request.setAttribute(JahiaEngineButtonsHelper.JAHIA_ENGINE_BUTTONS_HELPER,
142                                  jahiaEngineButtonsHelper);
143
144             if ( engineViewHelper == null ){
145                 // Prepage a new engine view helper
146
engineViewHelper =
147                         new JahiaEngineViewHelper(engineCommonData);
148
149                 // store engine data in session
150
request.getSession().setAttribute(ENGINE_VIEW_HELPER,
151                                      engineViewHelper);
152             }
153             request.setAttribute(JahiaEngineCommonData.JAHIA_ENGINE_COMMON_DATA,
154                                  engineCommonData);
155
156             request.setAttribute(ENGINE_VIEW_HELPER,
157                                  engineViewHelper);
158
159             // JSP attributes
160
// store in session
161
request.setAttribute(REVISIONS_TREE,tree);
162             request.setAttribute(REVISIONENTRYSET,revisionEntrySet);
163
164             // Prepare the Action URL for this Action Dispatcher
165
String JavaDoc actionURL = composeActionURL(engineCommonData.getParamBean(),
166                     mapping.getPath(),null,null);
167             request.setAttribute(ACTION_URL_REQUEST_ATTRIBUTE,actionURL);
168             engineCommonData.setEngineURL(actionURL);
169
170         } catch ( Throwable JavaDoc t ){
171             logger.debug("Error occurred",t);
172             throw new JahiaException("Exception occured initializing engine's objects",
173                                      "Exception occured initializing engine's objects",
174                                      JahiaException.ENGINE_ERROR,
175                                      JahiaException.ENGINE_ERROR);
176         }
177     }
178
179     /**
180      * Forward to revision detail.
181      *
182      * @param mapping
183      * @param form
184      * @param request
185      * @param response
186      * @return
187      * @throws IOException
188      * @throws ServletException
189      */

190     public ActionForward revisionsDetail(ActionMapping mapping,
191                                      ActionForm form,
192                                      HttpServletRequest JavaDoc request,
193                                      HttpServletResponse JavaDoc response)
194     throws IOException JavaDoc, ServletException JavaDoc {
195
196         ActionForward forward = mapping.findForward("revisionsDetail");
197         ActionMessages errors = new ActionMessages();
198         JahiaEngineViewHelper engineViewHelper = null;
199         JahiaEngineCommonData engineCommonData = null;
200
201         try {
202             init(mapping,request);
203             engineViewHelper = (JahiaEngineViewHelper)
204                     request.getAttribute(ENGINE_VIEW_HELPER);
205             engineCommonData = (JahiaEngineCommonData)
206                     request.getAttribute(JahiaEngineCommonData.JAHIA_ENGINE_COMMON_DATA);
207             ParamBean jParams = engineCommonData.getParamBean();
208
209             // Retrieve selected revisionEntry
210
RevisionEntry revisionEntry = null;
211             String JavaDoc revisionEntryKey = request.getParameter("revisionEntry");
212             revisionEntry = RevisionEntry.getRevisionEntry(revisionEntryKey);
213             if ( revisionEntry != null ){
214                 // retrieve the complete instance
215
RevisionEntrySet revisionEntrySet = (RevisionEntrySet)
216                         request.getAttribute(REVISIONENTRYSET);
217                 if ( revisionEntrySet != null ){
218                     ArrayList JavaDoc revisions = new ArrayList JavaDoc(revisionEntrySet.getRevisions());
219                     int revIndex = revisions.indexOf(revisionEntry);
220                     if ( revIndex != -1 ){
221                         revisionEntry = (RevisionEntry)revisions.get(revIndex);
222                     }
223                 }
224             }
225
226             String JavaDoc oldValue = "";
227             String JavaDoc newValue = "";
228             boolean isStagingValue = false;
229
230             if ( revisionEntry != null ){
231                 ContentObject contentObject = (ContentObject)
232                         JahiaObject.getInstance(revisionEntry.getObjectKey());
233
234                 Set JavaDoc stagingLangs = contentObject.getStagingLanguages(false,true);
235                 isStagingValue = stagingLangs.contains(revisionEntry.getLanguageCode());
236
237                 if ( contentObject instanceof ContentField ){
238                     ContentField contentField = (ContentField)contentObject;
239                     EntryLoadRequest loadRequest =
240                             new EntryLoadRequest(revisionEntry.getEntryState());
241                     loadRequest.setWithDeleted(true);
242                     loadRequest.setWithMarkedForDeletion(true);
243
244                     EntryLoadRequest jParamsLoadRequest =
245                             jParams.getEntryLoadRequest();
246
247                     // Old Value
248
JahiaField jahiaField =
249                             ServicesRegistry.getInstance().getJahiaFieldService()
250                             .contentFieldToJahiaField(contentField,loadRequest);
251                     if ( jahiaField != null ){
252                         // load field value
253
jParams.setSubstituteEntryLoadRequest(loadRequest);
254                         jahiaField.load(LoadFlags.ALL,jParams);
255                         oldValue = jahiaField.getValue();
256                     }
257
258                     // New Value ( Active or Staging )
259
loadRequest =
260                             new EntryLoadRequest(ContentObjectEntryState.WORKFLOW_STATE_START_STAGING,
261                             0, new ArrayList JavaDoc());
262                     loadRequest.setWithDeleted(true);
263                     loadRequest.setWithMarkedForDeletion(true);
264
265                     loadRequest.getLocales().add(LanguageCodeConverters.languageCodeToLocale(revisionEntry.getLanguageCode()));
266                     jahiaField =
267                             ServicesRegistry.getInstance().getJahiaFieldService()
268                             .contentFieldToJahiaField(contentField,loadRequest);
269                     if ( jahiaField != null ){
270                         // load field value
271
jParams.setSubstituteEntryLoadRequest(loadRequest);
272                         jahiaField.load(LoadFlags.ALL,jParams);
273                         newValue = jahiaField.getValue();
274                     }
275
276                     // restore loadRequest
277
jParams.setSubstituteEntryLoadRequest(jParamsLoadRequest);
278                 }
279             }
280
281             // Highlight text diff
282
HunkTextDiffVisitor hunkTextDiffV =
283                     new HunkTextDiffVisitor(oldValue,newValue);
284             hunkTextDiffV.highLightDiff();
285
286             request.setAttribute("oldValue",hunkTextDiffV.getHighlightedOldText());
287             request.setAttribute("newValue",hunkTextDiffV.getHighlightedNewText());
288             request.setAttribute("mergedValue",hunkTextDiffV.getMergedDiffText());
289             request.setAttribute("isStagingValue",new Boolean JavaDoc(isStagingValue));
290             request.setAttribute(REVISIONENTRY,revisionEntry);
291
292         } catch ( Throwable JavaDoc t ){
293             logger.debug("Error occurred",t);
294             errors.add(ActionMessages.GLOBAL_MESSAGE,
295                        new ActionMessage("Exception processing show restore version test result"));
296         }
297         request.setAttribute("engineView","revisionsDetail");
298         return continueForward(mapping,request,errors,forward);
299     }
300     /**
301      * Forward to errors if any or to continueForward
302      *
303      * @param mapping
304      * @param request
305      * @param errors
306      * @param continueForward
307      * @return
308      */

309     private ActionForward continueForward(
310             ActionMapping mapping,
311             HttpServletRequest JavaDoc request,
312             ActionMessages errors,
313             ActionForward continueForward){
314
315         if(errors != null && !errors.isEmpty()){
316             saveErrors(request,errors);
317             return mapping.findForward("EnginesErrors");
318         }
319         return continueForward;
320     }
321
322
323     /**
324      * Generate a valid url for this Struts Action
325      *
326      * @param jParams
327      * @param strutsAction
328      * @param properties
329      * @param params
330      * @return
331      * @throws JahiaException
332      */

333     public static String JavaDoc composeActionURL(ParamBean jParams,
334                                           String JavaDoc strutsAction,
335                                           Properties JavaDoc properties,
336                                           String JavaDoc params)
337     throws JahiaException {
338         // Prepare this struts action Mapping url
339
if ( properties == null ){
340             properties = new Properties JavaDoc();
341         }
342         String JavaDoc url = jParams.composeStrutsUrl(strutsAction,properties,params);
343         return url;
344     }
345 }
346
Popular Tags