Author: xlawrence
Date: Wed Aug 16 16:20:32 2006
New Revision: 14917
URL: https://svndev.jahia.net/websvn/listing.php?sc=1&rev=14917&repname=jahia
Log:
Improve implementation of navigation bar. Resolve some issues regarding locks
Modified:
trunk/core/src/java/org/jahia/engines/addcontainer/AddContainer_Engine.java
trunk/core/src/java/org/jahia/engines/updatecontainer/UpdateContainer_Engine.java
trunk/core/src/webapp/jsp/jahia/engines/navigation.jsp
Modified:
trunk/core/src/java/org/jahia/engines/addcontainer/AddContainer_Engine.java
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/engines/addcontainer/AddContainer_Engine.java&rev=14917&repname=jahia
==============================================================================
--- trunk/core/src/java/org/jahia/engines/addcontainer/AddContainer_Engine.java
(original)
+++ trunk/core/src/java/org/jahia/engines/addcontainer/AddContainer_Engine.java
Wed Aug 16 16:20:32 2006
@@ -42,6 +42,7 @@
import org.jahia.engines.EngineToolBox;
import org.jahia.engines.JahiaEngine;
import org.jahia.engines.JahiaEngineTools;
+import org.jahia.engines.updatecontainer.UpdateContainer_Engine;
import org.jahia.engines.categories.ManageCategories;
import org.jahia.engines.importexport.ManageContentPicker;
import org.jahia.engines.importexport.ManageImportExport;
@@ -279,6 +280,34 @@
throw new JahiaForbiddenAccessException();
}
+ final String navigation = jParams.getParameter("navigation");
+ if (navigation != null && navigation.length() > 0 &&
!"new".equals(navigation)) {
+ final SessionState theSession = jParams.getSessionState();
+ theSession.setAttribute("Navigation", "Navigation");
+ if (jParams.settings().areLocksActivated()) {
+ final LockKey lockKey =
LockKey.composeLockKey(LockKey.ADD_CONTAINER_TYPE, theContainer.getListID(),
+ theContainer.getPageID());
+ final LockService lockRegistry =
ServicesRegistry.getInstance().getLockService();
+ lockRegistry.release(lockKey, user, user.getUserKey());
+ }
+ final String cid;
+ if ("first".equals(navigation)) {
+ cid = (jParams.getParameter("first"));
+ } else if ("previous".equals(navigation)) {
+ cid = (jParams.getParameter("previous"));
+ } else {
+ throw new IllegalArgumentException("Validation param is
unknow: " + navigation);
+ }
+
+ final UpdateContainer_Engine theEngine =
UpdateContainer_Engine.getInstance();
+ jParams.getParameterMap().clear();
+ jParams.setParameter("cid", cid);
+ logger.debug("SWITCHING ENGINES: Navigating to container cid=" +
cid);
+
+ theEngine.handleActions(jParams, jData);
+ return null;
+ }
+
// displays the screen
EngineToolBox.getInstance().displayScreen(jParams, engineMap);
@@ -305,8 +334,6 @@
public EngineValidationHelper processLastScreen(final ProcessingContext
jParams, final HashMap engineMap)
throws JahiaException,
JahiaForbiddenAccessException {
- logger.debug("Processing last screen...");
-
final EngineLanguageHelper elh = (EngineLanguageHelper)
engineMap.get(JahiaEngine.ENGINE_LANGUAGE_HELPER);
EngineValidationHelper evh = null;
@@ -320,6 +347,7 @@
// reset session var
jParams.getSessionState().removeAttribute("UpdateContainer");
}
+ logger.debug("Processing last screen..." + lastScreen);
// indicates to sub engines that we are processing last screen
int mode = JahiaEngine.UPDATE_MODE;
@@ -407,7 +435,11 @@
throws JahiaException,
JahiaForbiddenAccessException {
- logger.debug("Processing current screen...");
+ // gets the current screen
+ // screen = edit, rights, logs
+ String theScreen = (String) engineMap.get("screen");
+ logger.debug("Processing current screen... " + theScreen);
+
final EngineLanguageHelper elh = (EngineLanguageHelper)
engineMap.get(JahiaEngine.ENGINE_LANGUAGE_HELPER);
@@ -426,9 +458,7 @@
engineMap.put("theContainer", theContainer);
- // gets the current screen
- // screen = edit, rights, logs
- String theScreen = (String) engineMap.get("screen");
+
setDefaultWorkflowMode(theContainer, jParams, engineMap);
@@ -437,8 +467,7 @@
// #ifdef LOCK
final LockKey lockKey =
LockKey.composeLockKey(LockKey.ADD_CONTAINER_TYPE,
- theContainer.getListID(),
- theContainer.getPageID());
+ theContainer.getListID(), theContainer.getPageID());
// #endif
final JahiaUser user = jParams.getUser();
if (theScreen.equals("edit")) {
@@ -527,7 +556,7 @@
engineMap, list.getContentContainerList());
} else if (theScreen.equals("save")) { //|| theScreen.equals("apply"))
{
- logger.debug("processCurrentScreen > we are in save Mode");
+ logger.debug("processCurrentScreen > we are in save Mode,
navigation: " + jParams.getParameter("navigation"));
if (transactionTemplate == null) {
final SpringContextSingleton instance =
SpringContextSingleton.getInstance();
if (instance.isInitialized()) {
@@ -635,7 +664,17 @@
// protected void
doInTransactionWithoutResult(TransactionStatus status) {
// try {
// save the container info
- int containerParentID = ((Integer)
engineMap.get("containerParentID")).intValue();
+ int containerParentID = 0;
+ try {
+ containerParentID = ((Integer)
engineMap.get("containerParentID")).intValue();
+ } catch (Exception e) {
+ try {
+ containerParentID =
Integer.parseInt(jParams.getParameter("cparentid"));
+ engineMap.put("containerParentID", new
Integer(containerParentID));
+ } catch (Exception ee) {
+ logger.warn("Unable to set EngineMap value
'containerParentID'");
+ }
+ }
final int parentAclID;
if (containerParentID != 0) {
parentAclID =
ServicesRegistry.getInstance().getJahiaContainersService().
@@ -768,6 +807,7 @@
} catch (Exception e) {
try {
containerParentID =
Integer.parseInt(jParams.getParameter("cparentid"));
+ engineMap.put("containerParentID", new
Integer(containerParentID));
} catch (Exception ee) {
logger.warn("Unable to set EngineMap value
'containerParentID'");
}
@@ -894,11 +934,13 @@
ContainerFieldsEditHelper feh = null;
int lastFieldId = 0;
String theScreen = jParams.getParameter("screen");
+
logger.debug("Initializing engine map for screen [" + theScreen + "]");
// gets session values
//HttpSession theSession = jParams.getRequest().getSession( true );
final SessionState theSession = jParams.getSessionState();
+ final boolean isNavigation = theSession.getAttribute("Navigation") !=
null;
// flag for subEngine: means that is a call from AddContainer
theSession.setAttribute("AddContainer", "true");
@@ -922,10 +964,10 @@
final JahiaContentContainerFacade jahiaContentContainerFacade;
final HashMap engineMap;
- if (theScreen != null) {
+ if (theScreen != null && !isNavigation) {
+ logger.debug("The Screen is not null, load it from session: " +
theScreen);
// if no, load the container value from the session
- engineMap = (HashMap) theSession.getAttribute(
- "jahia_session_engineMap");
+ engineMap = (HashMap)
theSession.getAttribute("jahia_session_engineMap");
///////////////////////////////////////////////////////////////////////////////////////
// FIXME -Fulco-
@@ -944,6 +986,7 @@
.append(".").append(FieldsEditHelperAbstract.FIELDS_EDIT_HELPER_CONTEXTID)
.toString());
} else {
+ logger.debug("the Screen is null load from storage, Navigation: "
+ isNavigation);
// init engine map
engineMap = new HashMap();
org.jahia.engines.shared.Page_Field.resetPageBeanSession(jParams);
@@ -976,6 +1019,7 @@
theScreen = "edit";
engineMap.put("containerParentID", new Integer(parentID));
+ theSession.removeAttribute("Navigation");
}
// Init Engine Language Helper
@@ -990,7 +1034,7 @@
ensureContainerList(theContainer, engineMap, jParams);
- if (feh == null) {
+ if (feh == null || isNavigation) {
feh = new ContainerFieldsEditHelper(theContainer);
// create the edit view
final HashMap ctnListFieldAcls =
JahiaEngineTools.getCtnListFieldAclMap(theContainer, jParams);
Modified:
trunk/core/src/java/org/jahia/engines/updatecontainer/UpdateContainer_Engine.java
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/java/org/jahia/engines/updatecontainer/UpdateContainer_Engine.java&rev=14917&repname=jahia
==============================================================================
---
trunk/core/src/java/org/jahia/engines/updatecontainer/UpdateContainer_Engine.java
(original)
+++
trunk/core/src/java/org/jahia/engines/updatecontainer/UpdateContainer_Engine.java
Wed Aug 16 16:20:32 2006
@@ -238,27 +238,31 @@
if (theScreen.equals("apply")) {
final String navigation =
jParams.getParameter("navigation");
if (navigation != null && navigation.length() > 0) {
- final String newCID;
- if ("first".equals(navigation)) {
- newCID = jParams.getParameter("first");
- } else if ("previous".equals(navigation)) {
- newCID = jParams.getParameter("previous");
- } else if ("next".equals(navigation)) {
- newCID = jParams.getParameter("next");
- } else if ("last".equals(navigation)) {
- newCID = jParams.getParameter("last");
+ if ("new".equals(navigation)) {
+ return null;
} else {
- throw new IllegalArgumentException("Validation
param is unknow: " + navigation);
+ final String newCID;
+ if ("first".equals(navigation)) {
+ newCID = jParams.getParameter("first");
+ } else if ("previous".equals(navigation)) {
+ newCID = jParams.getParameter("previous");
+ } else if ("next".equals(navigation)) {
+ newCID = jParams.getParameter("next");
+ } else if ("last".equals(navigation)) {
+ newCID = jParams.getParameter("last");
+ } else {
+ throw new
IllegalArgumentException("Validation param is unknow: " + navigation);
+ }
+ final String newEngineURL =
jParams.composeEngineUrl(ENGINE_NAME, "?cid=" + newCID);
+ engineMap.put(ENGINE_URL_PARAM, newEngineURL);
+
+ final SessionState theSession =
jParams.getSessionState();
+ theSession.setAttribute("Navigation",
"Navigation");
+
+ logger.debug("reloading engineMap and
handleActions for navigation");
+ handleActions(jParams, jData, newCID, "edit");
+ return null;
}
- final String newEngineURL =
jParams.composeEngineUrl(ENGINE_NAME, "?cid=" + newCID);
- engineMap.put(ENGINE_URL_PARAM, newEngineURL);
-
- final SessionState theSession =
jParams.getSessionState();
- theSession.setAttribute("Navigation",
"Navigation");
-
- logger.debug("reloading engineMap and
handleActions for navigation");
- handleActions(jParams, jData, newCID, "edit");
- return null;
}
}
lockEngine.redirect(jParams, engineMap, lockKey);
@@ -274,27 +278,49 @@
if (theScreen.equals("apply")) {
final String navigation = jParams.getParameter("navigation");
if (navigation != null && navigation.length() > 0) {
- final String newEngineURL;
- if ("first".equals(navigation)) {
- newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("first"));
- } else if ("previous".equals(navigation)) {
- newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("previous"));
- } else if ("next".equals(navigation)) {
- newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("next"));
- } else if ("last".equals(navigation)) {
- newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("last"));
- } else {
- throw new IllegalArgumentException("Validation param is
unknow: " + navigation);
- }
- engineMap.put(ENGINE_URL_PARAM, newEngineURL);
+ final SessionState theSession = jParams.getSessionState();
+ theSession.setAttribute("Navigation", "Navigation");
if (jParams.settings().areLocksActivated()) {
final LockKey lockKey =
LockKey.composeLockKey(LockKey.UPDATE_CONTAINER_TYPE, theContainer.getID(),
theContainer.getPageID());
final LockService lockRegistry =
servicesRegistry.getLockService();
lockRegistry.release(lockKey, user, user.getUserKey());
}
- final SessionState theSession = jParams.getSessionState();
- theSession.setAttribute("Navigation", "Navigation");
+ final String newEngineURL;
+ if ("new".equals(navigation)) {
+ final AddContainer_Engine theEngine =
AddContainer_Engine.getInstance();
+ EntryLoadRequest loadVersion = EntryLoadRequest.CURRENT;
+ if
(servicesRegistry.getJahiaVersionService().isStagingEnabled(theContainer.getJahiaID()))
{
+ loadVersion = EntryLoadRequest.STAGED;
+ }
+ final JahiaContainerList theList =
servicesRegistry.getJahiaContainersService().
+ loadContainerListInfo(theContainer.getListID(),
loadVersion);
+ final String link = theEngine.renderLink(jParams, theList);
+ final String params = link.substring(link.indexOf("?") +
1);
+ final StringTokenizer tokenizer = new
StringTokenizer(params, "&");
+ jParams.getParameterMap().clear();
+ while (tokenizer.hasMoreTokens()) {
+ final String token = tokenizer.nextToken();
+ final int index = token.indexOf("=");
+ jParams.setParameter(token.substring(0, index),
token.substring(index + 1, token.length()));
+ }
+
+ theEngine.handleActions(jParams, jData);
+ return null;
+ } else {
+ if ("first".equals(navigation)) {
+ newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("first"));
+ } else if ("previous".equals(navigation)) {
+ newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("previous"));
+ } else if ("next".equals(navigation)) {
+ newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("next"));
+ } else if ("last".equals(navigation)) {
+ newEngineURL = jParams.composeEngineUrl(ENGINE_NAME,
"?cid=" + jParams.getParameter("last"));
+ } else {
+ throw new IllegalArgumentException("Validation param
is unknow: " + navigation);
+ }
+ engineMap.put(ENGINE_URL_PARAM, newEngineURL);
+ }
}
}
@@ -802,6 +828,9 @@
theScreen = jParams.getParameter("screen");
}
+ logger.debug("screen: " + theScreen + ", nav: " +
jParams.getParameter("navigation"));
+ logger.debug("isNavigation: " + isNavigation);
+
final String ctnidStr;
if (forcedCid != null && forcedCid.length() > 0) {
ctnidStr = forcedCid;
@@ -902,8 +931,8 @@
// init the JahiaContentFieldFacade
final ArrayList localeList =
jParams.getSite().getLanguageSettingsAsLocales(false);
- jahiaContentContainerFacade
- = new
JahiaContentContainerFacade(container.getJahiaContainer(jParams,
jParams.getEntryLoadRequest()),
+ jahiaContentContainerFacade = new
JahiaContentContainerFacade(container.getJahiaContainer(jParams,
+ jParams.getEntryLoadRequest()),
jParams.getPage(),
LoadFlags.ALL,
jParams,
Modified: trunk/core/src/webapp/jsp/jahia/engines/navigation.jsp
URL:
https://svndev.jahia.net/websvn/diff.php?path=/trunk/core/src/webapp/jsp/jahia/engines/navigation.jsp&rev=14917&repname=jahia
==============================================================================
--- trunk/core/src/webapp/jsp/jahia/engines/navigation.jsp (original)
+++ trunk/core/src/webapp/jsp/jahia/engines/navigation.jsp Wed Aug 16 16:20:32
2006
@@ -4,15 +4,13 @@
<%@ page import="org.jahia.data.containers.JahiaContainerList" %>
<%@ page import="org.jahia.engines.JahiaEngine" %>
<%@ page import="org.jahia.engines.addcontainer.AddContainer_Engine" %>
-<%@ page import="java.util.HashMap"%>
-<%@ page import="java.util.Vector"%>
-<%@ page import="org.jahia.registries.ServicesRegistry"%>
-<%@ page import="org.jahia.data.fields.LoadFlags"%>
+<%@ page import="java.util.HashMap" %>
+<%@ page import="java.util.Vector" %>
<%@ taglib uri="JahiaLib" prefix="jahia" %>
<jsp:useBean id="jspSource" class="java.lang.String" scope="request"/>
<%!
-// private static final org.apache.log4j.Logger logger =
org.apache.log4j.Logger.
+ // private static final org.apache.log4j.Logger logger =
org.apache.log4j.Logger.
// getLogger("jsp.jahia.engines.navigation");
private static int getNextCtnID(final Vector ids, final int currentID) {
@@ -23,15 +21,13 @@
return -1;
}
- private static int getLastCtnID(final Vector ids, final int currentID) {
- for (int i = 0; i < ids.size(); i++) {
- final int value = ((Integer) ids.get(i)).intValue();
- if (value == currentID) return ((Integer) ids.get(ids.size() -
1)).intValue();
- }
- return -1;
+ private static int getLastCtnID(final Vector ids) {
+ if (ids.size() == 0) return -1;
+ return ((Integer) ids.get(ids.size() - 1)).intValue();
}
- private static int getPreviousCtnID(final Vector ids, final int currentID)
{
+ private static int getPreviousCtnID(final Vector ids, final int currentID,
final boolean isAddContainer) {
+ if (isAddContainer) return getLastCtnID(ids);
for (int i = 0; i < ids.size(); i++) {
final int value = ((Integer) ids.get(i)).intValue();
if (value == currentID) return ((Integer) ids.get(i -
1)).intValue();
@@ -39,12 +35,9 @@
return -1;
}
- private static int getFirstCtnID(final Vector ids, final int currentID) {
- for (int i = 0; i < ids.size(); i++) {
- final int value = ((Integer) ids.get(i)).intValue();
- if (value == currentID) return ((Integer) ids.get(0)).intValue();
- }
- return -1;
+ private static int getFirstCtnID(final Vector ids) {
+ if (ids.size() == 0) return -1;
+ return ((Integer) ids.get(0)).intValue();
}
private static int getCtnIndex(final Vector ids, final int currentID) {
@@ -78,23 +71,20 @@
<script type="text/javascript">
function navigate(goTo) {
document.mainForm.navigation.value = goTo;
- <% if (isAddContainer && enablePrevious) {
- session.setAttribute("Navigation", "Navigation");
- final JahiaContainer cont =
ServicesRegistry.getInstance().getJahiaContainersService().
- loadContainer(((Integer)ctnIds.get(0)).intValue(), LoadFlags.ALL,
jData.getProcessingContext());
- final JahiaContainer cont2 =
ServicesRegistry.getInstance().getJahiaContainersService().
- loadContainer(((Integer)ctnIds.get(ctnIds.size() - 1)).intValue(),
LoadFlags.ALL, jData.getProcessingContext());
- %>
+ <% if (isAddContainer) { %>
sendFormSaveAndAddNew();
- if (goTo == "first") {
- document.location.href =
"<%=jData.gui().drawUpdateContainerUrl(cont)%>";
+ <% } else { %>
+ if (goTo == "new") {
+ <% if(isLocked){ %>
+ submittedCount++;
+ document.location.href =
'<%=jData.gui().drawAddContainerUrl((JahiaContainerList)session.getAttribute("getSorteredAndFilteredCtnIdsList"
+ listID))%>';
+ <% } else { %>
+ sendFormApply();
+ <% } %>
} else {
- document.location.href =
"<%=jData.gui().drawUpdateContainerUrl(cont2)%>";
+ sendFormApply();
}
- <% } else { %>
- sendFormApply();
<% } %>
- submittedCount++;
}
</script>
@@ -114,7 +104,7 @@
width="24"
height="24"/>
</a>
- <input type="hidden" name="first" value="<%=getFirstCtnID(ctnIds,
theEditedContainer.getID())%>"/>
+ <input type="hidden" name="first" value="<%= getFirstCtnID(ctnIds)%>"/>
<% } else { %>
<img alt='<jahia:engineResourceBundle
resourceName="org.jahia.navigation.toFirst.button"/>
(<jahia:engineResourceBundle resourceName="org.jahia.disabled"/>)'
title='<jahia:engineResourceBundle
resourceName="org.jahia.navigation.toFirst.button"/>
(<jahia:engineResourceBundle resourceName="org.jahia.disabled"/>)'
@@ -134,7 +124,7 @@
width="24"
height="24"/>
</a>
- <input type="hidden" name="previous"
value="<%=getPreviousCtnID(ctnIds, theEditedContainer.getID())%>"/>
+ <input type="hidden" name="previous"
value="<%=getPreviousCtnID(ctnIds, theEditedContainer.getID(),
isAddContainer)%>"/>
<% } else { %>
<img alt='<jahia:engineResourceBundle
resourceName="org.jahia.navigation.toPrevious.button"/>
(<jahia:engineResourceBundle resourceName="org.jahia.disabled"/>)'
title='<jahia:engineResourceBundle
resourceName="org.jahia.navigation.toPrevious.button"/>
(<jahia:engineResourceBundle resourceName="org.jahia.disabled"/>)'
@@ -144,11 +134,7 @@
<% } %>
</td>
<td>
- <% if (isAddContainer) { %>
- <a href="javascript:sendFormSaveAndAddNew();"
onclick="javascript:setWaitingCursor(1);">
- <% } else { %>
- <a
href="javascript:<%if(!isLocked){%>sendFormApply();<%}%>submittedCount++;document.location.href='<%=jData.gui().drawAddContainerUrl((JahiaContainerList)session.getAttribute("getSorteredAndFilteredCtnIdsList"
+ listID))%>';">
- <% } %>
+ <a href="javascript:navigate('new');">
<img alt='<jahia:engineResourceBundle
resourceName="org.jahia.engines.addcontainer.AddContainer.label"/>'
title='<jahia:engineResourceBundle
resourceName="org.jahia.engines.addcontainer.AddContainer.label"/>'
onmouseover="this.src
='<jahia:serverHttpPath/>/jsp/jahia/engines/images/element_add_on.gif'"
@@ -189,7 +175,7 @@
width="24"
height="24"/>
</a>
- <input type="hidden" name="last" value="<%=getLastCtnID(ctnIds,
theEditedContainer.getID())%>"/>
+ <input type="hidden" name="last" value="<%=getLastCtnID(ctnIds)%>"/>
<% } else { %>
<img alt='<jahia:engineResourceBundle
resourceName="org.jahia.navigation.toLast.button"/>
(<jahia:engineResourceBundle resourceName="org.jahia.disabled"/>)'
title='<jahia:engineResourceBundle
resourceName="org.jahia.navigation.toLast.button"/>
(<jahia:engineResourceBundle resourceName="org.jahia.disabled"/>)'
@@ -216,11 +202,7 @@
height="24"/>
</td>
<td>
- <% if (isAddContainer) { %>
- <a href="javascript:sendFormSaveAndAddNew();"
onclick="javascript:setWaitingCursor(1);">
- <% } else { %>
- <a
href="javascript:<%if(!isLocked){%>sendFormApply();submittedCount++;<%}%>document.location.href='<%=jData.gui().drawAddContainerUrl((JahiaContainerList)session.getAttribute("getSorteredAndFilteredCtnIdsList"
+ listID))%>';">
- <% } %>
+ <a href="javascript:navigate('new');">
<img alt='<jahia:engineResourceBundle
resourceName="org.jahia.engines.addcontainer.AddContainer.label"/>'
title='<jahia:engineResourceBundle
resourceName="org.jahia.engines.addcontainer.AddContainer.label"/>'
onmouseover="this.src
='<jahia:serverHttpPath/>/jsp/jahia/engines/images/element_add_on.gif'"
@@ -250,7 +232,8 @@
<% if (isAddContainer) { %>
<td> </td><td> </td><td colspan="3"><%=ctnIds.size() + 1%> /
<%=ctnIds.size() + 1%></td>
<% } else { %>
- <td> </td><td> </td><td colspan="3"><%=getCtnIndex(ctnIds,
theEditedContainer.getID())%> / <%=ctnIds.size()%></td>
+ <td> </td><td> </td><td colspan="3"><%=getCtnIndex(ctnIds,
theEditedContainer.getID())%>
+ / <%=ctnIds.size()%></td>
<% } %>
</tr>
</table>