use of org.alfresco.web.bean.NavigationBean in project acs-community-packaging by Alfresco.
the class ExternalAccessServlet method service.
/**
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String uri = req.getRequestURI();
if (logger.isDebugEnabled())
logger.debug("Processing URL: " + uri + (req.getQueryString() != null ? ("?" + req.getQueryString()) : ""));
AuthenticationStatus status = servletAuthenticate(req, res);
if (status == AuthenticationStatus.Failure) {
return;
}
setNoCacheHeaders(res);
uri = uri.substring(req.getContextPath().length());
StringTokenizer t = new StringTokenizer(uri, "/");
int tokenCount = t.countTokens();
if (tokenCount < 2) {
throw new IllegalArgumentException("Externally addressable URL did not contain all required args: " + uri);
}
// skip servlet name
t.nextToken();
String outcome = t.nextToken();
// get rest of the tokens arguments
String[] args = new String[tokenCount - 2];
for (int i = 0; i < tokenCount - 2; i++) {
args[i] = t.nextToken();
}
if (logger.isDebugEnabled())
logger.debug("External outcome found: " + outcome);
// we almost always need this bean reference
FacesContext fc = FacesHelper.getFacesContext(req, res, getServletContext());
BrowseBean browseBean = (BrowseBean) FacesHelper.getManagedBean(fc, "BrowseBean");
// get services we need
ServiceRegistry serviceRegistry = getServiceRegistry(getServletContext());
PermissionService permissionService = serviceRegistry.getPermissionService();
// as we are potentially coming in from an external app reset the view stack
Stack viewStack = (Stack) fc.getExternalContext().getSessionMap().get("_alfViewStack");
if (viewStack != null) {
viewStack.clear();
if (logger.isDebugEnabled())
logger.debug("Cleared view stack");
}
// setup is required for certain outcome requests
if (OUTCOME_DOCDETAILS.equals(outcome)) {
NodeRef nodeRef = null;
if (args[0].equals(WebDAVServlet.WEBDAV_PREFIX)) {
nodeRef = resolveWebDAVPath(fc, args);
} else if (args.length == 3) {
StoreRef storeRef = new StoreRef(args[0], args[1]);
nodeRef = new NodeRef(storeRef, args[2]);
}
if (nodeRef != null) {
// check that the user has at least READ access - else redirect to an error or login page
if (!checkAccess(req, res, nodeRef, PermissionService.READ_CONTENT, true)) {
return;
}
// setup the Document on the browse bean
browseBean.setupContentAction(nodeRef.getId(), true);
}
// perform the appropriate JSF navigation outcome
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, "dialog:" + OUTCOME_DOCDETAILS);
} else if (OUTCOME_SPACEDETAILS.equals(outcome)) {
NodeRef nodeRef = null;
if (args[0].equals(WebDAVServlet.WEBDAV_PREFIX)) {
nodeRef = resolveWebDAVPath(fc, args);
} else if (args.length == 3) {
StoreRef storeRef = new StoreRef(args[0], args[1]);
nodeRef = new NodeRef(storeRef, args[2]);
}
if (nodeRef != null) {
// check that the user has at least READ access - else redirect to an error or login page
if (!checkAccess(req, res, nodeRef, PermissionService.READ_CONTENT, true)) {
return;
}
// setup the Space on the browse bean
browseBean.setupSpaceAction(nodeRef.getId(), true);
}
// perform the appropriate JSF navigation outcome
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, "dialog:" + OUTCOME_SPACEDETAILS);
} else if (OUTCOME_BROWSE.equals(outcome)) {
NodeRef nodeRef = null;
if (args.length != 0 && args[0].equals(WebDAVServlet.WEBDAV_PREFIX)) {
nodeRef = resolveWebDAVPath(fc, args);
} else if (args.length >= 3) {
int offset = 0;
offset = args.length - 3;
StoreRef storeRef = new StoreRef(args[0 + offset], args[1 + offset]);
nodeRef = new NodeRef(storeRef, args[2 + offset]);
}
if (nodeRef != null) {
// check that the user has at least READ access - else redirect to an error or login page
if (!checkAccess(req, res, nodeRef, PermissionService.READ_CONTENT, true)) {
return;
}
// this call sets up the current node Id, and updates or initialises the
// breadcrumb component with the selected node as appropriate.
browseBean.updateUILocation(nodeRef);
// force a "late" refresh of the BrowseBean to handle external servlet access URL
browseBean.externalAccessRefresh();
// check for view mode first argument
if (args[0].equals(ARG_TEMPLATE)) {
browseBean.setDashboardView(true);
}
// the above calls into BrowseBean setup the NavigationHandler automatically
} else {
// perform the appropriate JSF navigation outcome
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, outcome);
}
} else if (OUTCOME_MYALFRESCO.equals(outcome)) {
// setup the Dashboard Manager ready for the page we want to display
if (req.getParameter(ARG_PAGE) != null) {
DashboardManager manager = (DashboardManager) FacesHelper.getManagedBean(fc, DashboardManager.BEAN_NAME);
manager.getPageConfig().setCurrentPage(req.getParameter(ARG_PAGE));
}
// perform the appropriate JSF navigation outcome
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, outcome);
} else if (OUTCOME_DIALOG.equals(outcome) || OUTCOME_WIZARD.equals(outcome)) {
if (args.length != 0) {
if (args.length > 1) {
String currentNodeId = null;
if (args[1].equals(WebDAVServlet.WEBDAV_PREFIX)) {
// Drop the first argument
String[] args2 = new String[args.length - 1];
for (int i = 1; i < args.length; i++) {
args2[i - 1] = args[i];
if (logger.isDebugEnabled()) {
logger.debug("Added segment " + args2[i - 1]);
}
}
NodeRef nodeRef = resolveWebDAVPath(fc, args2);
currentNodeId = nodeRef.getId();
} else {
currentNodeId = args[1];
}
if (logger.isDebugEnabled()) {
logger.debug("currentNodeId: " + currentNodeId);
}
// if a GUID was passed, use it to init the NavigationBean current context
NavigationBean navigator = (NavigationBean) FacesHelper.getManagedBean(fc, NavigationBean.BEAN_NAME);
navigator.setCurrentNodeId(currentNodeId);
browseBean.setupSpaceAction(currentNodeId, true);
// setup the Document on the browse bean
// avoid java.lang.NullPointerException
// at org.alfresco.web.bean.content.InviteContentUsersWizard.getPermissionsForType(InviteContentUsersWizard.java:49)
// at org.alfresco.web.bean.wizard.BaseInviteUsersWizard.getRoles(BaseInviteUsersWizard.java:562)
browseBean.setupContentAction(currentNodeId, true);
}
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, outcome + ':' + args[0]);
}
} else if (OUTCOME_LOGOUT.equals(outcome)) {
// special case for logout
// invalidate ticket and clear the Security context for this thread
Application.logOut(fc);
res.sendRedirect(req.getContextPath() + FACES_SERVLET + Application.getLoginPage(getServletContext()));
return;
}
// perform the forward to the page processed by the Faces servlet
String viewId = fc.getViewRoot().getViewId();
ViewSequenceUtils.nextViewSequence(fc);
getServletContext().getRequestDispatcher(FACES_SERVLET + viewId).forward(req, res);
}
use of org.alfresco.web.bean.NavigationBean in project acs-community-packaging by Alfresco.
the class StartWorkflowEvaluator method evaluate.
/**
* @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node)
*/
public boolean evaluate(Node node) {
FacesContext facesContext = FacesContext.getCurrentInstance();
NavigationBean nav = (NavigationBean) FacesHelper.getManagedBean(facesContext, NavigationBean.BEAN_NAME);
// determine whether the workflow services are active
boolean workflowPresent = false;
WebApplicationContext springContext = FacesContextUtils.getRequiredWebApplicationContext(facesContext);
BPMEngineRegistry bpmReg = (BPMEngineRegistry) springContext.getBean(BPM_ENGINE_BEAN_NAME);
if (bpmReg != null) {
String[] components = bpmReg.getWorkflowComponents();
workflowPresent = (components != null && components.length > 0);
}
return (workflowPresent && nav.getIsGuest() == false && node.hasAspect(ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION) == false);
}
use of org.alfresco.web.bean.NavigationBean in project acs-community-packaging by Alfresco.
the class AlfrescoNavigationHandler method getDispatchContextNode.
/**
* Returns the node currently in the dispatch context
*
* @return The node currently in the dispatch context or null if
* the dispatch context is empty
*/
protected Node getDispatchContextNode(FacesContext context) {
Node dispatchNode = null;
NavigationBean navBean = (NavigationBean) context.getExternalContext().getSessionMap().get(NavigationBean.BEAN_NAME);
if (navBean != null) {
dispatchNode = navBean.getDispatchContextNode();
}
return dispatchNode;
}
use of org.alfresco.web.bean.NavigationBean in project acs-community-packaging by Alfresco.
the class NavigatorPluginBean method getGuestHomeRootNodes.
/**
* Returns the root nodes for the guest home panel.
* <p>
* As the user expands and collapses nodes in the client this
* cache will be updated with the appropriate nodes and states.
* </p>
*
* @return List of root nodes for the guest home panel
*/
public List<TreeNode> getGuestHomeRootNodes() {
if (this.guestHomeRootNodes == null) {
this.guestHomeRootNodes = new ArrayList<TreeNode>();
this.guestHomeNodes = new HashMap<String, TreeNode>();
UserTransaction tx = null;
try {
tx = Repository.getUserTransaction(FacesContext.getCurrentInstance(), true);
tx.begin();
// query for the child nodes of the guest home space
NavigationBean navBean = getNavigationBean();
if (navBean != null) {
NodeRef root = navBean.getGuestHomeNode().getNodeRef();
List<ChildAssociationRef> childRefs = this.getNodeService().getChildAssocs(root, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
for (ChildAssociationRef ref : childRefs) {
NodeRef child = ref.getChildRef();
if (isAddableChild(child)) {
TreeNode node = createTreeNode(child);
this.guestHomeRootNodes.add(node);
this.guestHomeNodes.put(node.getNodeRef(), node);
}
}
}
tx.commit();
} catch (Throwable err) {
Utils.addErrorMessage("NavigatorPluginBean exception in getGuestHomeRootNodes()", err);
try {
if (tx != null) {
tx.rollback();
}
} catch (Exception tex) {
}
}
}
return this.guestHomeRootNodes;
}
use of org.alfresco.web.bean.NavigationBean in project acs-community-packaging by Alfresco.
the class AlfrescoNavigationHandler method handleBrowseDispatch.
protected void handleBrowseDispatch(FacesContext context, String fromAction, String outcome) {
Node dispatchNode = null;
NavigationBean navBean = (NavigationBean) context.getExternalContext().getSessionMap().get(NavigationBean.BEAN_NAME);
if (navBean != null) {
dispatchNode = navBean.getCurrentNode();
}
handleDispatch(context, fromAction, outcome, dispatchNode);
}
Aggregations