MultilingualItemResolver

angepaßt, so daß keine Sprachvarianten in der URL angegeben ist. Das ist allerdings nur eine provisorische Lösung. Es gibt diverse Probleme mit der Sprachumschaltung:

1. Ohne die Sprachanhang ist Deep-Linking nicht mehr sprachbezogen möglich
2. Mit Sprachanhang ist eine automatische Umschaltung nicht mehr möglich.
3. Verwendung des Parameters selLang ist mit dem Anhang nicht möglich, es sei den, die Klasse wird weiter angepaßt
4. Wie soll die Unterscheidung zwischen manuell ausgewälter Sprache und automatische Sprachwahl erfolgen? Und wie kommt man von mauellen Modus wieder in den automatischen zurück?

git-svn-id: https://svn.libreccm.org/ccm/trunk@1098 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2011-09-05 12:16:45 +00:00
parent f028ec41e0
commit a6e10ab7c2
1 changed files with 19 additions and 30 deletions

View File

@ -27,9 +27,9 @@ import com.arsdigita.cms.Folder;
import com.arsdigita.cms.ui.ContentItemPage; import com.arsdigita.cms.ui.ContentItemPage;
import com.arsdigita.cms.util.LanguageUtil; import com.arsdigita.cms.util.LanguageUtil;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.globalization.GlobalizationHelper;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert; import com.arsdigita.util.Assert;
import com.arsdigita.web.Web;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import javax.servlet.ServletException; import javax.servlet.ServletException;
@ -86,6 +86,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
* #getCurrentContext}. * #getCurrentContext}.
* @return The content item, or null if no such item exists * @return The content item, or null if no such item exists
*/ */
@Override
public ContentItem getItem(final ContentSection section, public ContentItem getItem(final ContentSection section,
String url, String url,
final String context) { final String context) {
@ -214,6 +215,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
* @see ContentItem#LIVE * @see ContentItem#LIVE
* @see ContentItem#DRAFT * @see ContentItem#DRAFT
*/ */
@Override
public String getCurrentContext(final PageState state) { public String getCurrentContext(final PageState state) {
s_log.debug("Getting the current context"); s_log.debug("Getting the current context");
@ -262,6 +264,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
* @return The URL of the item * @return The URL of the item
* @see #getCurrentContext * @see #getCurrentContext
*/ */
@Override
public String generateItemURL(final PageState state, public String generateItemURL(final PageState state,
final BigDecimal itemId, final BigDecimal itemId,
final String name, final String name,
@ -284,6 +287,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
* @return The URL of the item * @return The URL of the item
* @see #getCurrentContext * @see #getCurrentContext
*/ */
@Override
public String generateItemURL(final PageState state, public String generateItemURL(final PageState state,
final BigDecimal itemId, final BigDecimal itemId,
final String name, final String name,
@ -335,6 +339,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
* @return The URL of the item * @return The URL of the item
* @see #getCurrentContext * @see #getCurrentContext
*/ */
@Override
public String generateItemURL(final PageState state, public String generateItemURL(final PageState state,
final ContentItem item, final ContentItem item,
final ContentSection section, final ContentSection section,
@ -355,6 +360,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
* @return The URL of the item * @return The URL of the item
* @see #getCurrentContext * @see #getCurrentContext
*/ */
@Override
public String generateItemURL(final PageState state, public String generateItemURL(final PageState state,
final ContentItem item, final ContentItem item,
ContentSection section, ContentSection section,
@ -404,6 +410,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
* @param request The HTTP request * @param request The HTTP request
* @return The master page * @return The master page
*/ */
@Override
public CMSPage getMasterPage(final ContentItem item, public CMSPage getMasterPage(final ContentItem item,
final HttpServletRequest request) final HttpServletRequest request)
throws ServletException { throws ServletException {
@ -485,7 +492,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
*/ */
final StringBuffer url = new StringBuffer(400); final StringBuffer url = new StringBuffer(400);
//url.append(section.getURL()); //url.append(section.getURL());
url.append(section.getPath() + "/"); url.append(section.getPath()).append("/");
/* /*
* add template context, if one is given * add template context, if one is given
@ -493,7 +500,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
// This is breaking URL's...not sure why it's here. XXX // This is breaking URL's...not sure why it's here. XXX
// this should work with the appropriate logic. trying again. // this should work with the appropriate logic. trying again.
if (!(templateContext == null || templateContext.length() == 0)) { if (!(templateContext == null || templateContext.length() == 0)) {
url.append(TEMPLATE_CONTEXT_PREFIX + templateContext + "/"); url.append(TEMPLATE_CONTEXT_PREFIX).append(templateContext).append("/");
} }
// Try to retrieve the bundle. // Try to retrieve the bundle.
@ -524,7 +531,9 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
url.append(item.getPath()); url.append(item.getPath());
} }
/*
* This will append the language to the url, which will in turn render
* the language negotiation inoperative
final String language = item.getLanguage(); final String language = item.getLanguage();
if (language == null) { if (language == null) {
@ -540,7 +549,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Generated live URL " + url.toString()); s_log.debug("Generated live URL " + url.toString());
} }
*/
return url.toString(); return url.toString();
} }
@ -579,7 +588,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
// This is breaking URL's...not sure why it's here. XXX // This is breaking URL's...not sure why it's here. XXX
// this should work with the appropriate logic. trying again. // this should work with the appropriate logic. trying again.
if (!(templateContext == null || templateContext.length() == 0)) { if (!(templateContext == null || templateContext.length() == 0)) {
url.append(TEMPLATE_CONTEXT_PREFIX + templateContext + "/"); url.append(TEMPLATE_CONTEXT_PREFIX).append(templateContext).append("/");
} }
// Try to retrieve the bundle. // Try to retrieve the bundle.
@ -611,7 +620,7 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
s_log.debug("Encoding the language of the item passed in, '" + s_log.debug("Encoding the language of the item passed in, '" +
language + "'"); language + "'");
url.append("." + language); url.append(".").append(language);
} }
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
@ -863,29 +872,9 @@ public class MultilingualItemResolver extends AbstractItemResolver implements It
if (lang == null) { if (lang == null) {
s_log.debug("The URL has no language encoded in it; " + s_log.debug("The URL has no language encoded in it; " +
"negotiating the language"); "negotiating the language");
/* // There is no language, so we get the negotiated locale and call
* Either there were no extensions at all, or // this method again with a proper language
* neither one of them matched one of the return this.getItemFromLangAndBundle(GlobalizationHelper.getNegotiatedLocale().getLanguage(), item);
* supported languages. So the ContentBundle has
* to decide which language it will show; this
* decision is based on the preferred languages as
* defined in the client's request.
*/
// TODO: do something about this UCI (Unknown Content Item)...
// XXX sketchy getRequest
HttpServletRequest req = Web.getRequest();
final ContentItem resolved;
if (req != null) {
resolved = ((ContentBundle) item).negotiate(req.getLocales());
} else {
// fallback to the primary instance when request is not available
resolved = ((ContentBundle) item).getPrimaryInstance();
}
if (s_log.isDebugEnabled()) {
s_log.debug("Resolved URL to item " + resolved);
}
return resolved;
} else { } else {
s_log.debug("The URL is encoded with a langauge; " + s_log.debug("The URL is encoded with a langauge; " +
"fetching the appropriate item from " + "fetching the appropriate item from " +