X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2FAbstractCmsEntryPoint.java;h=56e5d69141d4954e0762733ad7ff49ada9a1dda4;hb=56db62a204d7c371f4e496f9cbe45efe1d9a563a;hp=c101c021f134bc36602a0dc93b1a6da661ac4039;hpb=e6d2d877a7208a13c05a9c9a8b67641972f13870;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java b/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java index c101c021f..56e5d6914 100644 --- a/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java +++ b/org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java @@ -1,10 +1,13 @@ package org.argeo.cms; +import static javax.jcr.Property.JCR_DESCRIPTION; + import java.security.PrivilegedAction; import java.util.HashMap; import java.util.Map; import javax.jcr.Node; +import javax.jcr.NodeIterator; import javax.jcr.Property; import javax.jcr.Repository; import javax.jcr.RepositoryException; @@ -14,13 +17,14 @@ import javax.security.auth.Subject; import javax.security.auth.login.CredentialNotFoundException; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; +import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; import org.argeo.cms.auth.AuthConstants; import org.argeo.cms.auth.HttpRequestCallbackHandler; -import org.argeo.cms.ui.UxContext; +import org.argeo.cms.util.CmsUtils; import org.argeo.eclipse.ui.specific.UiContext; import org.argeo.jcr.JcrUtils; import org.eclipse.rap.rwt.RWT; @@ -233,18 +237,6 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint }); } - // @Override - // public Object local(Msg msg) { - // String key = msg.getId(); - // int lastDot = key.lastIndexOf('.'); - // String className = key.substring(0, lastDot); - // String fieldName = key.substring(lastDot + 1); - // Locale locale = RWT.getLocale(); - // ResourceBundle rb = ResourceBundle.getBundle(className, locale, - // msg.getClassLoader()); - // return rb.getString(fieldName); - // } - /** Sets the state of the entry point and retrieve the related JCR node. */ protected synchronized String setState(String newState) { String previousState = this.state; @@ -284,7 +276,8 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint + " - " + getBaseTitle(); else title = getBaseTitle(); - jsExecutor.execute("document.title = \"" + title + "\""); + + publishMetaData(title); if (log.isTraceEnabled()) log.trace("node=" + node + ", state=" + state + " (page=" @@ -301,6 +294,45 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint } } + private void publishMetaData(String title) throws RepositoryException { + HttpServletRequest request = UiContext.getHttpRequest(); + if (request == null) + return; + String url = CmsUtils.getCanonicalUrl(node, request); + String desc = node.hasProperty(JCR_DESCRIPTION) ? node.getProperty( + JCR_DESCRIPTION).getString() : null; + String imgUrl = null; + for (NodeIterator it = node.getNodes(); it.hasNext();) { + Node child = it.nextNode(); + if (child.isNodeType(CmsTypes.CMS_IMAGE)) + imgUrl = CmsUtils.getDataUrl(child, request); + } + + StringBuilder js = new StringBuilder(); + js.append("document.title = '" + title + "';"); + js.append("var metas = document.getElementsByTagName('meta');"); + js.append("for (var i=0; i