X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Futil%2FCmsLink.java;h=faf01182b82c4d66ea1210b3ea88d5a378c5cacf;hb=c718f8be43b6ee3b1ba111c2a22c9037e35b872f;hp=bd5052c5b9a79f1bf1b548e23a31fc7a0db09ffe;hpb=e01612eb49c5e0d32095b86c623cd35bf0995f99;p=lgpl%2Fargeo-commons.git
diff --git a/org.argeo.cms.ui/src/org/argeo/cms/util/CmsLink.java b/org.argeo.cms.ui/src/org/argeo/cms/util/CmsLink.java
index bd5052c5b..faf01182b 100644
--- a/org.argeo.cms.ui/src/org/argeo/cms/util/CmsLink.java
+++ b/org.argeo.cms.ui/src/org/argeo/cms/util/CmsLink.java
@@ -5,13 +5,16 @@ import java.net.MalformedURLException;
import java.net.URL;
import javax.jcr.Node;
+import javax.jcr.RepositoryException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.cms.CmsException;
-import org.argeo.cms.CmsStyles;
-import org.argeo.cms.CmsUiProvider;
+import org.argeo.cms.auth.CurrentUser;
+import org.argeo.cms.ui.CmsStyles;
+import org.argeo.cms.ui.CmsUiProvider;
+import org.argeo.node.NodeUtils;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.service.ResourceManager;
import org.eclipse.swt.SWT;
@@ -22,13 +25,11 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
/** A link to an internal or external location. */
public class CmsLink implements CmsUiProvider {
private final static Log log = LogFactory.getLog(CmsLink.class);
- private BundleContext bc = FrameworkUtil.getBundle(getClass())
- .getBundleContext();
+ private BundleContext bundleContext;
private String label;
private String custom;
@@ -36,8 +37,12 @@ public class CmsLink implements CmsUiProvider {
private String image;
private MouseListener mouseListener;
+ private int horizontalAlignment = SWT.CENTER;
private int verticalAlignment = SWT.CENTER;
+ private String loggedInLabel = null;
+ private String loggedInTarget = null;
+
// internal
// private Boolean isUrl = false;
private Integer imageWidth, imageHeight;
@@ -61,25 +66,37 @@ public class CmsLink implements CmsUiProvider {
public void init() {
if (image != null) {
ImageData image = loadImage();
- imageWidth = image.width;
- imageHeight = image.height;
+ if (imageHeight == null && imageWidth == null) {
+ imageWidth = image.width;
+ imageHeight = image.height;
+ } else if (imageHeight == null) {
+ imageHeight = (imageWidth * image.height) / image.width;
+ } else if (imageWidth == null) {
+ imageWidth = (imageHeight * image.width) / image.height;
+ }
}
}
/** @return {@link Composite} with a single {@link Label} child. */
@Override
public Control createUi(final Composite parent, Node context) {
+// if (image != null && (imageWidth == null || imageHeight == null)) {
+// throw new CmsException("Image is not properly configured."
+// + " Make sure bundleContext property is set and init() method has been called.");
+// }
+
Composite comp = new Composite(parent, SWT.BOTTOM);
comp.setLayout(CmsUtils.noSpaceGridLayout());
Label link = new Label(comp, SWT.NONE);
link.setData(RWT.MARKUP_ENABLED, Boolean.TRUE);
- GridData layoutData = new GridData(SWT.CENTER, verticalAlignment, true,
- true);
+ GridData layoutData = new GridData(horizontalAlignment, verticalAlignment, false, false);
if (image != null) {
- layoutData.heightHint = imageHeight;
+ if (imageHeight != null)
+ layoutData.heightHint = imageHeight;
if (label == null)
- layoutData.widthHint = imageWidth;
+ if (imageWidth != null)
+ layoutData.widthHint = imageWidth;
}
link.setLayoutData(layoutData);
@@ -93,39 +110,48 @@ public class CmsLink implements CmsUiProvider {
// label
StringBuilder labelText = new StringBuilder();
- if (target != null) {
- labelText
- .append("");
+ } else if (target != null) {
+ labelText.append("");
}
if (image != null) {
registerImageIfNeeded();
String imageLocation = RWT.getResourceManager().getLocation(image);
- labelText.append("
");
+ labelText.append("
");
- // final Image img = loadImage(parent.getDisplay());
- // link.setImage(img);
- // link.addDisposeListener(new DListener(img));
}
- if (label != null) {
- // link.setText(label);
+ if (loggedInLabel != null && isLoggedIn()) {
+ labelText.append(' ').append(loggedInLabel);
+ } else if (label != null) {
labelText.append(' ').append(label);
}
- if (target != null)
+ if ((loggedInTarget != null && isLoggedIn()) || target != null)
labelText.append("");
link.setText(labelText.toString());
- // link.setCursor(link.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
- // CmsSession cmsSession = (CmsSession) parent.getDisplay().getData(
- // CmsSession.KEY);
if (mouseListener != null)
link.addMouseListener(mouseListener);
@@ -174,7 +200,7 @@ public class CmsLink implements CmsUiProvider {
// pure URL
url = new URL(image);
} catch (MalformedURLException e1) {
- url = bc.getBundle().getResource(image);
+ url = bundleContext.getBundle().getResource(image);
}
if (url == null)
@@ -183,6 +209,10 @@ public class CmsLink implements CmsUiProvider {
return url;
}
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
public void setLabel(String label) {
this.label = label;
}
@@ -205,6 +235,14 @@ public class CmsLink implements CmsUiProvider {
this.image = image;
}
+ public void setLoggedInLabel(String loggedInLabel) {
+ this.loggedInLabel = loggedInLabel;
+ }
+
+ public void setLoggedInTarget(String loggedInTarget) {
+ this.loggedInTarget = loggedInTarget;
+ }
+
public void setMouseListener(MouseListener mouseListener) {
this.mouseListener = mouseListener;
}
@@ -217,8 +255,20 @@ public class CmsLink implements CmsUiProvider {
} else if ("center".equals(vAlign)) {
verticalAlignment = SWT.CENTER;
} else {
- throw new CmsException("Unsupported vertical allignment " + vAlign
- + " (must be: top, bottom or center)");
+ throw new CmsException("Unsupported vertical allignment " + vAlign + " (must be: top, bottom or center)");
}
}
+
+ protected boolean isLoggedIn() {
+ return !CurrentUser.isAnonymous();
+ }
+
+ public void setImageWidth(Integer imageWidth) {
+ this.imageWidth = imageWidth;
+ }
+
+ public void setImageHeight(Integer imageHeight) {
+ this.imageHeight = imageHeight;
+ }
+
}