1 package org.jahia.views.engines.versioning.revisionsdetail.actions; 2 3 import java.io.IOException ; 4 import java.util.ArrayList ; 5 import java.util.Properties ; 6 import java.util.Set ; 7 8 import javax.servlet.ServletException ; 9 import javax.servlet.http.HttpServletRequest ; 10 import javax.servlet.http.HttpServletResponse ; 11 import javax.swing.JTree ; 12 import javax.swing.tree.DefaultMutableTreeNode ; 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 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 ENGINE_TITLE = "Revisions Detail"; 54 55 private static final String ENGINE_VIEW_HELPER = 56 RevisionEntrySetDetailAction.class + " ENGINE_VIEW_HELPER"; 57 58 public static final String ENGINE_VIEW_HELPER_SESSION_ATTRIBUTE 59 = RevisionEntrySetDetailAction.class + "_" 60 + JahiaEngineViewHelper.ENGINE_VIEW_HELPER; 61 62 public static final String REVISIONS_TREE = 63 RevisionEntrySetDetailAction.class + "_RevisionTree"; 64 65 public static final String REVISIONENTRYSET = 66 RevisionEntrySetDetailAction.class + "_RevisionEntrySet"; 67 68 public static final String REVISIONENTRY = 69 RevisionEntrySetDetailAction.class + "_RevisionEntry"; 70 71 public static final String ACTION_URL_REQUEST_ATTRIBUTE = "ActionURL"; 72 73 79 private void init(ActionMapping mapping, HttpServletRequest request) 80 throws JahiaException { 81 82 try { 83 84 String engineView = request.getParameter ("engineview"); 86 String reloaded = request.getParameter("reloaded"); 87 88 JTree tree = null; 89 RevisionEntrySet revisionEntrySet = null; 90 ArrayList flatRevisionsList = null; 91 92 JahiaEngineViewHelper engineViewHelper = null; 94 if ( engineView != null && !"yes".equals(reloaded) ){ 95 try { 97 engineViewHelper = 98 (JahiaEngineViewHelper)request.getSession() 99 .getAttribute(ENGINE_VIEW_HELPER); 100 tree = (JTree )request.getSession() 101 .getAttribute(REVISIONS_TREE); 102 revisionEntrySet = (RevisionEntrySet)request.getSession() 103 .getAttribute(REVISIONENTRYSET); 104 }catch(Throwable t){ 105 } 106 } 107 if ( tree == null ){ 108 tree = (JTree )request.getAttribute(REVISIONS_TREE); 110 revisionEntrySet = (RevisionEntrySet)request 111 .getAttribute(REVISIONENTRYSET); 112 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 rootNode = 121 (DefaultMutableTreeNode )tree.getModel().getRoot(); 122 if ( rootNode != null ){ 123 flatRevisionsList = GUITreeTools.getFlatTree(tree,rootNode); 124 } 125 } 126 127 request.setAttribute("flatRevisionsList",flatRevisionsList); 129 130 JahiaEngineCommonData engineCommonData = 132 new JahiaEngineCommonData(request); 133 engineCommonData.setEngineTitle(ENGINE_TITLE); 134 135 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 engineViewHelper = 147 new JahiaEngineViewHelper(engineCommonData); 148 149 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 request.setAttribute(REVISIONS_TREE,tree); 162 request.setAttribute(REVISIONENTRYSET,revisionEntrySet); 163 164 String 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 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 190 public ActionForward revisionsDetail(ActionMapping mapping, 191 ActionForm form, 192 HttpServletRequest request, 193 HttpServletResponse response) 194 throws IOException , ServletException { 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 RevisionEntry revisionEntry = null; 211 String revisionEntryKey = request.getParameter("revisionEntry"); 212 revisionEntry = RevisionEntry.getRevisionEntry(revisionEntryKey); 213 if ( revisionEntry != null ){ 214 RevisionEntrySet revisionEntrySet = (RevisionEntrySet) 216 request.getAttribute(REVISIONENTRYSET); 217 if ( revisionEntrySet != null ){ 218 ArrayList revisions = new ArrayList (revisionEntrySet.getRevisions()); 219 int revIndex = revisions.indexOf(revisionEntry); 220 if ( revIndex != -1 ){ 221 revisionEntry = (RevisionEntry)revisions.get(revIndex); 222 } 223 } 224 } 225 226 String oldValue = ""; 227 String newValue = ""; 228 boolean isStagingValue = false; 229 230 if ( revisionEntry != null ){ 231 ContentObject contentObject = (ContentObject) 232 JahiaObject.getInstance(revisionEntry.getObjectKey()); 233 234 Set 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 JahiaField jahiaField = 249 ServicesRegistry.getInstance().getJahiaFieldService() 250 .contentFieldToJahiaField(contentField,loadRequest); 251 if ( jahiaField != null ){ 252 jParams.setSubstituteEntryLoadRequest(loadRequest); 254 jahiaField.load(LoadFlags.ALL,jParams); 255 oldValue = jahiaField.getValue(); 256 } 257 258 loadRequest = 260 new EntryLoadRequest(ContentObjectEntryState.WORKFLOW_STATE_START_STAGING, 261 0, new ArrayList ()); 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 jParams.setSubstituteEntryLoadRequest(loadRequest); 272 jahiaField.load(LoadFlags.ALL,jParams); 273 newValue = jahiaField.getValue(); 274 } 275 276 jParams.setSubstituteEntryLoadRequest(jParamsLoadRequest); 278 } 279 } 280 281 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 (isStagingValue)); 290 request.setAttribute(REVISIONENTRY,revisionEntry); 291 292 } catch ( Throwable 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 309 private ActionForward continueForward( 310 ActionMapping mapping, 311 HttpServletRequest 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 333 public static String composeActionURL(ParamBean jParams, 334 String strutsAction, 335 Properties properties, 336 String params) 337 throws JahiaException { 338 if ( properties == null ){ 340 properties = new Properties (); 341 } 342 String url = jParams.composeStrutsUrl(strutsAction,properties,params); 343 return url; 344 } 345 } 346 | Popular Tags |