]> git.argeo.org Git - lgpl/argeo-commons.git/blob - LinkedControl.java
6a75dfb2c440c43740b6210da663e18e17c6f866
[lgpl/argeo-commons.git] / LinkedControl.java
1 package org.argeo.cms.swt.acr;
2
3 import java.net.URI;
4
5 import org.argeo.api.acr.Content;
6 import org.argeo.cms.swt.CmsSwtUtils;
7 import org.argeo.cms.swt.widgets.StyledControl;
8 import org.eclipse.swt.widgets.Composite;
9
10 /**
11 * A {@link StyledControl} which can link either to an internal {@link Content}
12 * or an external URI.
13 */
14 public abstract class LinkedControl extends StyledControl {
15
16 private static final long serialVersionUID = -7603153425459801216L;
17
18 private Content linkedContent;
19 private URI plainUri;
20
21 public LinkedControl(Composite parent, int swtStyle) {
22 super(parent, swtStyle);
23 }
24
25 public void setLink(Content linkedContent) {
26 if (plainUri != null)
27 throw new IllegalStateException("An URI is already set");
28 this.linkedContent = linkedContent;
29 }
30
31 public void setLink(URI uri) {
32 if (linkedContent != null)
33 throw new IllegalStateException("A linked content is already set");
34 this.plainUri = uri;
35 }
36
37 public boolean isInternalLink() {
38 if (!hasLink())
39 throw new IllegalStateException("No link has been set");
40 return linkedContent != null;
41 }
42
43 public boolean hasLink() {
44 return plainUri != null || linkedContent != null;
45 }
46
47 public Content getLinkedContent() {
48 return linkedContent;
49 }
50
51 public URI getPlainUri() {
52 return plainUri;
53 }
54
55 public URI toUri() {
56 if (plainUri != null)
57 return plainUri;
58 if (linkedContent != null)
59 return URI.create("#" + CmsSwtUtils.cleanPathForUrl(linkedContent.getPath()));
60 return null;
61
62 }
63
64 }