]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/AbstractCmsEntryPoint.java
Remove comment.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / AbstractCmsEntryPoint.java
index d27ed006e6f282065264a4c2b57fa13db510b1dc..2ff9aff58e9275a043dc28b636a9c453bac53f42 100644 (file)
@@ -5,6 +5,7 @@ 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,12 +15,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.util.CmsUtils;
 import org.argeo.eclipse.ui.specific.UiContext;
 import org.argeo.jcr.JcrUtils;
 import org.eclipse.rap.rwt.RWT;
@@ -232,18 +235,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;
@@ -283,7 +274,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="
@@ -300,6 +292,37 @@ 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 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<metas.length; i++) {");
+               js.append("     if (metas[i].getAttribute('property'))");
+               js.append("      if(metas[i].getAttribute('property')=='og:title')");
+               js.append("       metas[i].setAttribute('content','" + title + "');");
+               js.append("      else if(metas[i].getAttribute('property')=='og:url')");
+               js.append("       metas[i].setAttribute('content','" + url + "');");
+               if (imgUrl != null) {
+                       js.append("      else if(metas[i].getAttribute('property')=='og:image')");
+                       js.append("       metas[i].setAttribute('content','" + imgUrl + "');");
+               } else {
+                       // TODO reset default image
+               }
+               js.append("     };");
+               jsExecutor.execute(js.toString());
+       }
+
        protected Node getNode() {
                return node;
        }