CCM NG: Fixed some bugs in the application lookup
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3875 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
433b5eab2d
commit
51d4fca237
|
|
@ -76,7 +76,7 @@ public class UserBanner extends SimpleComponent {
|
|||
contentElem.addAttribute("screenName", user.getName());
|
||||
contentElem.addAttribute("primaryEmail",
|
||||
user.getPrimaryEmailAddress()
|
||||
.toString());
|
||||
.getAddress());
|
||||
contentElem.addAttribute("userID",
|
||||
Long.toString(user.getPartyId()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -441,7 +441,8 @@ public class LoginServlet extends BebopApplicationServlet {
|
|||
* @return URL_MSG for logout page as String
|
||||
*/
|
||||
public static String getLogoutPageURL() {
|
||||
return s_loginURL + LOGOUT_PATH_INFO;
|
||||
return s_loginURL.substring(0,
|
||||
s_loginURL.length() - 1) + LOGOUT_PATH_INFO;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ import org.libreccm.web.ApplicationType;
|
|||
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
import javax.enterprise.context.spi.CreationalContext;
|
||||
import javax.enterprise.inject.spi.Bean;
|
||||
|
|
@ -96,11 +97,11 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
private static final long serialVersionUID = 5292817856022435529L;
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger(
|
||||
CCMDispatcherServlet.class);
|
||||
CCMDispatcherServlet.class);
|
||||
|
||||
private static final String DISPATCHED_ATTRIBUTE
|
||||
= CCMDispatcherServlet.class
|
||||
.getName() + ".dispatched";
|
||||
= CCMDispatcherServlet.class
|
||||
.getName() + ".dispatched";
|
||||
|
||||
/**
|
||||
* String containing the web context path portion of the WEB application
|
||||
|
|
@ -140,19 +141,19 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
@Override
|
||||
protected void doService(final HttpServletRequest request,
|
||||
final HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
throws ServletException, IOException {
|
||||
|
||||
//This part replaces the index.jsp file
|
||||
if (request.getPathInfo() == null
|
||||
|| request.getPathInfo().isEmpty()
|
||||
|| "/".equals(request.getPathInfo())) {
|
||||
|| request.getPathInfo().isEmpty()
|
||||
|| "/".equals(request.getPathInfo())) {
|
||||
|
||||
if (subject.isAuthenticated()) {
|
||||
// User is logged in, redirect to user redirect page
|
||||
throw new RedirectSignal(
|
||||
URL.there(request,
|
||||
UI.getUserRedirectURL(request)),
|
||||
false);
|
||||
URL.there(request,
|
||||
UI.getUserRedirectURL(request)),
|
||||
false);
|
||||
} else {
|
||||
// User is *not* logged in, display public front page
|
||||
throw new RedirectSignal(URL.there(request,
|
||||
|
|
@ -184,11 +185,11 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
response.sendRedirect(response.encodeRedirectURL(uri + "/"));
|
||||
} else {
|
||||
response.sendRedirect(response
|
||||
.encodeRedirectURL(uri + "/?" + query));
|
||||
.encodeRedirectURL(uri + "/?" + query));
|
||||
}
|
||||
} else {
|
||||
LOGGER.debug("Storing the path elements of the current request as "
|
||||
+ "the original path elements");
|
||||
+ "the original path elements");
|
||||
|
||||
request.setAttribute(BaseServlet.REQUEST_URL_ATTRIBUTE,
|
||||
new URL(request));
|
||||
|
|
@ -205,17 +206,17 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
// we have to create a 404 page here!
|
||||
String requestUri = request.getRequestURI(); // same as ctx.getRemainingURLPart()
|
||||
response.sendError(404, requestUri
|
||||
+ " not found on this server.");
|
||||
+ " not found on this server.");
|
||||
} else {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("Found application {}; "
|
||||
+ "dispatching to its servlet",
|
||||
+ "dispatching to its servlet",
|
||||
spec.getAppID());
|
||||
}
|
||||
|
||||
request.setAttribute(
|
||||
BaseApplicationServlet.APPLICATION_ID_ATTRIBUTE,
|
||||
spec.getAppID());
|
||||
BaseApplicationServlet.APPLICATION_ID_ATTRIBUTE,
|
||||
spec.getAppID());
|
||||
request.setAttribute(DISPATCHED_ATTRIBUTE, Boolean.TRUE);
|
||||
forward(spec.getTypeContextPath(),
|
||||
spec.target(path),
|
||||
|
|
@ -243,12 +244,12 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
|
||||
if (path.lastIndexOf(".") < path.lastIndexOf("/")) {
|
||||
LOGGER.debug("The last fragment of the path has no '.', so we "
|
||||
+ "assume a directory was requested; a trailing "
|
||||
+ "slash is required");
|
||||
+ "assume a directory was requested; a trailing "
|
||||
+ "slash is required");
|
||||
return true;
|
||||
} else {
|
||||
LOGGER.debug("The last fragment of the path appears to be a file "
|
||||
+ "name; no trailing slash is needed");
|
||||
+ "name; no trailing slash is needed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -257,7 +258,7 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
final String target,
|
||||
final HttpServletRequest request,
|
||||
final HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
throws ServletException, IOException {
|
||||
|
||||
LOGGER.debug("Forwarding by path to target \"{}\"...", target);
|
||||
LOGGER.debug("The context path is: {}", contextPath);
|
||||
|
|
@ -274,7 +275,7 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
}
|
||||
|
||||
final ServletContext context = getServletContext().getContext(
|
||||
forwardContextPath);
|
||||
forwardContextPath);
|
||||
|
||||
LOGGER.debug("forwarding from context \"{}\" to context \"{}\"...",
|
||||
getServletContext(), context);
|
||||
|
|
@ -287,19 +288,19 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
private void forward(final RequestDispatcher dispatcher,
|
||||
final HttpServletRequest request,
|
||||
final HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
throws ServletException, IOException {
|
||||
LOGGER.debug("Checking if this request need to be forwarded or "
|
||||
+ "included: {}", request);
|
||||
+ "included: {}", request);
|
||||
|
||||
if (request.getAttribute("javax.servlet.include.request_uri") == null) {
|
||||
LOGGER.debug("The attribute javax.servlet.include.request_uri "
|
||||
+ "is not set; forwarding {}",
|
||||
+ "is not set; forwarding {}",
|
||||
request);
|
||||
|
||||
dispatcher.forward(request, response);
|
||||
} else {
|
||||
LOGGER.debug("The attribute javax.servlet.include.request_uri "
|
||||
+ "is set; including {}",
|
||||
+ "is set; including {}",
|
||||
request);
|
||||
dispatcher.include(request, response);
|
||||
}
|
||||
|
|
@ -317,9 +318,26 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
path);
|
||||
}
|
||||
|
||||
final CcmApplication application = appManager
|
||||
.findApplicationByPath(path);
|
||||
final String pathTokens[];
|
||||
if (path.startsWith("/")) {
|
||||
pathTokens = path.substring(1).split("/");
|
||||
} else {
|
||||
pathTokens = path.split("/");
|
||||
}
|
||||
CcmApplication application = null;
|
||||
for (int i = pathTokens.length; i > 0; i--) {
|
||||
final String currentPath = generatePath(i, pathTokens);
|
||||
LOGGER.debug("Trying path '{}'...", currentPath);
|
||||
application = appManager.findApplicationByPath(currentPath);
|
||||
|
||||
if (application != null) {
|
||||
LOGGER.debug("Found application for path '{}'.", currentPath);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// final CcmApplication application = appManager
|
||||
// .findApplicationByPath(path);
|
||||
if (application == null) {
|
||||
LOGGER.warn("No application found for path \"{}\".", path);
|
||||
return null;
|
||||
|
|
@ -328,6 +346,17 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
}
|
||||
}
|
||||
|
||||
private String generatePath(final int index, final String[] pathTokens) {
|
||||
final StringBuffer buffer = new StringBuffer();
|
||||
buffer.append('/');
|
||||
for (int i = 0; i < index; i++) {
|
||||
buffer.append(pathTokens[i]);
|
||||
buffer.append('/');
|
||||
}
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public static String getContextPath() {
|
||||
return s_contextPath;
|
||||
}
|
||||
|
|
@ -355,10 +384,10 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
*
|
||||
* @param app
|
||||
*/
|
||||
ApplicationSpec(final CcmApplication app,
|
||||
ApplicationSpec(final CcmApplication app,
|
||||
final ApplicationManager appManager) {
|
||||
this.appManager = appManager;
|
||||
|
||||
|
||||
if (app == null) {
|
||||
throw new NullPointerException("app");
|
||||
}
|
||||
|
|
@ -367,9 +396,9 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
m_instanceURI = app.getPrimaryUrl();
|
||||
if (app.getClass().isAnnotationPresent(ServletPath.class)) {
|
||||
m_typeURI = app
|
||||
.getClass()
|
||||
.getAnnotation(ServletPath.class)
|
||||
.value();
|
||||
.getClass()
|
||||
.getAnnotation(ServletPath.class)
|
||||
.value();
|
||||
} else {
|
||||
// final ApplicationManager appManager = CDI.current().select(
|
||||
// ApplicationManager.class).get();
|
||||
|
|
@ -398,21 +427,21 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
// }
|
||||
|
||||
final ApplicationType appType = appManager.getApplicationTypes()
|
||||
.get(app.getApplicationType());
|
||||
.get(app.getApplicationType());
|
||||
final Class<? extends HttpServlet> appServletClass = appType
|
||||
.servlet();
|
||||
.servlet();
|
||||
final WebServlet servletAnnotation = appServletClass
|
||||
.getAnnotation(WebServlet.class);
|
||||
.getAnnotation(WebServlet.class);
|
||||
if (servletAnnotation != null
|
||||
&& servletAnnotation.urlPatterns() != null
|
||||
&& servletAnnotation.urlPatterns().length > 0) {
|
||||
&& servletAnnotation.urlPatterns() != null
|
||||
&& servletAnnotation.urlPatterns().length > 0) {
|
||||
if (servletAnnotation.urlPatterns()[0].endsWith("*")) {
|
||||
m_typeURI = servletAnnotation
|
||||
.urlPatterns()[0]
|
||||
.substring(0,
|
||||
servletAnnotation
|
||||
.urlPatterns()[0]
|
||||
.length() - 1);
|
||||
.urlPatterns()[0]
|
||||
.substring(0,
|
||||
servletAnnotation
|
||||
.urlPatterns()[0]
|
||||
.length() - 1);
|
||||
} else {
|
||||
m_typeURI = servletAnnotation.urlPatterns()[0];
|
||||
}
|
||||
|
|
@ -446,7 +475,7 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
* executing in no specific context but CCM's default.
|
||||
*
|
||||
* @return The context path of the application's url, "" in case of
|
||||
* executing in the ROOT context.
|
||||
* executing in the ROOT context.
|
||||
*/
|
||||
String getTypeContextPath() {
|
||||
if (m_typeContextPath.equals("")) {
|
||||
|
|
@ -467,7 +496,7 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
String target(final String path) {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("Building the target path from the request "
|
||||
+ "path '{}' and the spec {}",
|
||||
+ "path '{}' and the spec {}",
|
||||
path,
|
||||
this);
|
||||
}
|
||||
|
|
@ -503,8 +532,8 @@ public class CCMDispatcherServlet extends BaseServlet {
|
|||
ApplicationSpec other = (ApplicationSpec) obj;
|
||||
return m_id == other.getAppID() && equal(m_instanceURI,
|
||||
other.m_instanceURI)
|
||||
&& equal(m_typeURI, other.m_typeURI) && equal(
|
||||
m_typeContextPath, other.m_typeContextPath);
|
||||
&& equal(m_typeURI, other.m_typeURI) && equal(
|
||||
m_typeContextPath, other.m_typeContextPath);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,4 +28,4 @@ com.arsdigita.ui.admin.applications.desc.valiation.minmaxlength=The maximum leng
|
|||
com.arsdigita.ui.admin.applications.url.label=URL
|
||||
com.arsdigita.ui.admin.applications.title.label=Title
|
||||
com.arsdigita.ui.admin.applications.desc.label=Description
|
||||
ui.change_password=Change password
|
||||
ui.admin.change_password=Change password
|
||||
|
|
|
|||
|
|
@ -28,4 +28,4 @@ com.arsdigita.ui.admin.applications.desc.valiation.minmaxlength=Die Beschreibung
|
|||
com.arsdigita.ui.admin.applications.url.label=URL
|
||||
com.arsdigita.ui.admin.applications.title.label=Bezeichnung
|
||||
com.arsdigita.ui.admin.applications.desc.label=Beschreibung
|
||||
ui.change_password=Passwort \u00e4ndern
|
||||
ui.admin.change_password=Passwort \u00e4ndern
|
||||
|
|
|
|||
|
|
@ -20,12 +20,12 @@ ui.debug.transform.off=Hide transformation
|
|||
ui.debug.xml=View document XML
|
||||
ui.debug.xsl=Download XSL files
|
||||
com.arsdigita.ui.admin.applications.tree.heading=Applications
|
||||
com.arsdigita.ui.admin.applications.url.validation.not_blank=
|
||||
com.arsdigita.ui.admin.applications.url.valiation.minmaxlength=
|
||||
com.arsdigita.ui.admin.applications.title.validation.not_blank=
|
||||
com.arsdigita.ui.admin.applications.title.valiation.minmaxlength=
|
||||
com.arsdigita.ui.admin.applications.desc.valiation.minmaxlength=
|
||||
com.arsdigita.ui.admin.applications.url.label=
|
||||
com.arsdigita.ui.admin.applications.title.label=
|
||||
com.arsdigita.ui.admin.applications.desc.label=
|
||||
ui.change_password=
|
||||
com.arsdigita.ui.admin.applications.url.validation.not_blank=The URL of an application instance can is mandatory.
|
||||
com.arsdigita.ui.admin.applications.url.valiation.minmaxlength=The length of an URL of an application instance must be between 1 and 100 characters.
|
||||
com.arsdigita.ui.admin.applications.title.validation.not_blank=Title is mandatory for an application instance.
|
||||
com.arsdigita.ui.admin.applications.title.valiation.minmaxlength=The minimum length of the title of an applicatio instance is one character, the maximum length are 200 characters
|
||||
com.arsdigita.ui.admin.applications.desc.valiation.minmaxlength=The maximum length of a descrption of an application instance are 4000 characters.
|
||||
com.arsdigita.ui.admin.applications.url.label=URL
|
||||
com.arsdigita.ui.admin.applications.title.label=Title
|
||||
com.arsdigita.ui.admin.applications.desc.label=Description
|
||||
ui.admin.change_password=Change password
|
||||
|
|
|
|||
|
|
@ -15,13 +15,17 @@ ui.sitemap.configure_sitemap_admin_page=TRANSLATE THIS: Configure SiteMap Admin
|
|||
ui.sitemap.h4emselect_sitenode_to_view_detailsemh4=TRANSLATE THIS: <h4><em>Select SiteNode to View Details</em></h4> (ui.sitemap.h4emselect_sitenode_to_view_detailsemh4)
|
||||
ui.sitemap.configuration_menu_placeholder=TRANSLATE THIS: Configuration Menu Placeholder (ui.sitemap.configuration_menu_placeholder)
|
||||
ui.sitemap.access_denied_to_sitemap=Vous n'avez pas acc\u00e8s au plan du site
|
||||
com.arsdigita.ui.admin.applications.tree.heading=
|
||||
com.arsdigita.ui.admin.applications.url.validation.not_blank=
|
||||
com.arsdigita.ui.admin.applications.url.valiation.minmaxlength=
|
||||
com.arsdigita.ui.admin.applications.title.validation.not_blank=
|
||||
com.arsdigita.ui.admin.applications.title.valiation.minmaxlength=
|
||||
com.arsdigita.ui.admin.applications.desc.valiation.minmaxlength=
|
||||
com.arsdigita.ui.admin.applications.url.label=
|
||||
com.arsdigita.ui.admin.applications.title.label=
|
||||
com.arsdigita.ui.admin.applications.desc.label=
|
||||
ui.change_password=
|
||||
com.arsdigita.ui.admin.applications.tree.heading=Applications
|
||||
com.arsdigita.ui.admin.applications.url.validation.not_blank=The URL of an application instance can is mandatory.
|
||||
com.arsdigita.ui.admin.applications.url.valiation.minmaxlength=The length of an URL of an application instance must be between 1 and 100 characters.
|
||||
com.arsdigita.ui.admin.applications.title.validation.not_blank=Title is mandatory for an application instance.
|
||||
com.arsdigita.ui.admin.applications.title.valiation.minmaxlength=The minimum length of the title of an applicatio instance is one character, the maximum length are 200 characters
|
||||
com.arsdigita.ui.admin.applications.desc.valiation.minmaxlength=The maximum length of a descrption of an application instance are 4000 characters.
|
||||
com.arsdigita.ui.admin.applications.url.label=URL
|
||||
com.arsdigita.ui.admin.applications.title.label=Title
|
||||
com.arsdigita.ui.admin.applications.desc.label=Description
|
||||
ui.admin.change_password=Change password
|
||||
ui.debug.transform.off=Hide transformation
|
||||
ui.debug.transform.on=Display transformation
|
||||
ui.debug.xml=View document XML
|
||||
ui.debug.xsl=Download XSL files
|
||||
|
|
|
|||
|
|
@ -155,3 +155,4 @@ ui.admin.groups.couldnt_find_specified_group=Couldn't find the specified group
|
|||
ui.admin.tab.users_groups_roles.title=Users/Groups/Roles
|
||||
ui.admin.tab.categories.title=Categories
|
||||
ui.admin.tab.registry.title=Registry
|
||||
ui.admin.change_password=Change password
|
||||
|
|
|
|||
|
|
@ -155,3 +155,4 @@ ui.admin.groups.couldnt_find_specified_group=Konnte die spezifische Gruppe nicht
|
|||
ui.admin.tab.users_groups_roles.title=Benutzer/Gruppen/Rollen
|
||||
ui.admin.tab.categories.title=Kategorien
|
||||
ui.admin.tab.registry.title=Registry
|
||||
ui.admin.change_password=Passwort \u00e4ndern
|
||||
|
|
|
|||
|
|
@ -113,3 +113,4 @@ ui.admin.groups.couldnt_find_specified_group=Couldn't find the specified group
|
|||
ui.admin.tab.users_groups_roles.title=Users/Groups/Roles
|
||||
ui.admin.tab.categories.title=Categories
|
||||
ui.admin.tab.registry.title=Registry
|
||||
ui.admin.change_password=Change password
|
||||
|
|
|
|||
|
|
@ -98,3 +98,4 @@ ui.admin.groups.couldnt_find_specified_group=Impossible de trouver le groupe sp\
|
|||
ui.admin.tab.users_groups_roles.title=
|
||||
ui.admin.tab.categories.title=
|
||||
ui.admin.tab.registry.title=
|
||||
ui.admin.change_password=Change password
|
||||
|
|
|
|||
|
|
@ -93,7 +93,8 @@ processor, some are read from the configuration files of Foundry and some are de
|
|||
</p>
|
||||
</foundry:doc-desc>
|
||||
</foundry:doc>
|
||||
<xsl:param name="theme-prefix"/>
|
||||
<xsl:param name="theme-prefix"
|
||||
select="concat($context-prefix, '/themes/libreccm-default')"/>
|
||||
|
||||
<foundry:doc section="devel" type="env-var">
|
||||
<foundry:doc-desc>
|
||||
|
|
|
|||
Loading…
Reference in New Issue