import java.util.Map;
import javax.jcr.Node;
+import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
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;
});
}
- // @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;
+ " - " + getBaseTitle();
else
title = getBaseTitle();
- jsExecutor.execute("document.title = \"" + title + "\"");
+
+ publishMetaData(title);
if (log.isTraceEnabled())
log.trace("node=" + node + ", state=" + state + " (page="
}
}
+ 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;
}