CCM NG: Fixed some bugs in the application lookup

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3875 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2016-02-18 13:43:04 +00:00
parent 433b5eab2d
commit 51d4fca237
12 changed files with 108 additions and 69 deletions

View File

@ -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()));
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>