]> git.argeo.org Git - gpl/argeo-jcr.git/blob - CmsUiUtils.java
3522f1b423b3f3e2fc09422aa36e556c95188ad5
[gpl/argeo-jcr.git] / CmsUiUtils.java
1 package org.argeo.cms.ui.util;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.net.MalformedURLException;
6 import java.net.URL;
7
8 import javax.jcr.Node;
9 import javax.jcr.RepositoryException;
10 import javax.servlet.http.HttpServletRequest;
11
12 import org.argeo.api.cms.CmsConstants;
13 import org.argeo.api.cms.ux.Cms2DSize;
14 import org.argeo.api.cms.ux.CmsView;
15 import org.argeo.cms.jcr.CmsJcrUtils;
16 import org.argeo.cms.swt.CmsSwtUtils;
17 import org.argeo.cms.ui.CmsUiConstants;
18 import org.argeo.cms.ux.AbstractImageManager;
19 import org.argeo.cms.ux.CmsUxUtils;
20 import org.argeo.jcr.JcrUtils;
21 import org.eclipse.rap.rwt.RWT;
22 import org.eclipse.rap.rwt.service.ResourceManager;
23 import org.eclipse.swt.graphics.Image;
24 import org.eclipse.swt.graphics.ImageData;
25 import org.eclipse.swt.layout.RowData;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Display;
28 import org.eclipse.swt.widgets.Table;
29
30 /** Static utilities for the CMS framework. */
31 public class CmsUiUtils {
32 // private final static Log log = LogFactory.getLog(CmsUiUtils.class);
33
34 /*
35 * CMS VIEW
36 */
37
38 /**
39 * The CMS view related to this display, or null if none is available from this
40 * call.
41 *
42 * @deprecated Use {@link CmsSwtUtils#getCmsView(Composite)} instead.
43 */
44 @Deprecated
45 public static CmsView getCmsView() {
46 // return UiContext.getData(CmsView.class.getName());
47 return CmsSwtUtils.getCmsView(Display.getCurrent().getActiveShell());
48 }
49
50 public static StringBuilder getServerBaseUrl(HttpServletRequest request) {
51 try {
52 URL url = new URL(request.getRequestURL().toString());
53 StringBuilder buf = new StringBuilder();
54 buf.append(url.getProtocol()).append("://").append(url.getHost());
55 if (url.getPort() != -1)
56 buf.append(':').append(url.getPort());
57 return buf;
58 } catch (MalformedURLException e) {
59 throw new IllegalArgumentException("Cannot extract server base URL from " + request.getRequestURL(), e);
60 }
61 }
62
63 //
64 public static String getDataUrl(Node node, HttpServletRequest request) {
65 try {
66 StringBuilder buf = getServerBaseUrl(request);
67 buf.append(getDataPath(node));
68 return new URL(buf.toString()).toString();
69 } catch (MalformedURLException e) {
70 throw new IllegalArgumentException("Cannot build data URL for " + node, e);
71 }
72 }
73
74 /** A path in the node repository */
75 public static String getDataPath(Node node) {
76 return getDataPath(CmsConstants.EGO_REPOSITORY, node);
77 }
78
79 public static String getDataPath(String cn, Node node) {
80 return CmsJcrUtils.getDataPath(cn, node);
81 }
82
83 /** Clean reserved URL characters for use in HTTP links. */
84 public static String getDataPathForUrl(Node node) {
85 return CmsSwtUtils.cleanPathForUrl(getDataPath(node));
86 }
87
88 /** @deprecated Use rowData16px() instead. GridData should not be reused. */
89 @Deprecated
90 public static RowData ROW_DATA_16px = new RowData(16, 16);
91
92
93
94 /*
95 * FORM LAYOUT
96 */
97
98
99
100 @Deprecated
101 public static void setItemHeight(Table table, int height) {
102 table.setData(CmsUiConstants.ITEM_HEIGHT, height);
103 }
104
105 //
106 // JCR
107 //
108 public static Node getOrAddEmptyFile(Node parent, Enum<?> child) throws RepositoryException {
109 if (has(parent, child))
110 return child(parent, child);
111 return JcrUtils.copyBytesAsFile(parent, child.name(), new byte[0]);
112 }
113
114 public static Node child(Node parent, Enum<?> en) throws RepositoryException {
115 return parent.getNode(en.name());
116 }
117
118 public static Boolean has(Node parent, Enum<?> en) throws RepositoryException {
119 return parent.hasNode(en.name());
120 }
121
122 public static Node getOrAdd(Node parent, Enum<?> en) throws RepositoryException {
123 return getOrAdd(parent, en, null);
124 }
125
126 public static Node getOrAdd(Node parent, Enum<?> en, String primaryType) throws RepositoryException {
127 if (has(parent, en))
128 return child(parent, en);
129 else if (primaryType == null)
130 return parent.addNode(en.name());
131 else
132 return parent.addNode(en.name(), primaryType);
133 }
134
135 // IMAGES
136
137 public static String img(Node fileNode, String width, String height) {
138 return img(null, fileNode, width, height);
139 }
140
141 public static String img(String serverBase, Node fileNode, String width, String height) {
142 // String src = (serverBase != null ? serverBase : "") + NodeUtils.getDataPath(fileNode);
143 String src;
144 src = (serverBase != null ? serverBase : "") + getDataPathForUrl(fileNode);
145 return CmsUxUtils.imgBuilder(src, width, height).append("/>").toString();
146 }
147
148 public static String noImg(Cms2DSize size) {
149 ResourceManager rm = RWT.getResourceManager();
150 return CmsUxUtils.img(rm.getLocation(AbstractImageManager.NO_IMAGE), size);
151 }
152
153 public static String noImg() {
154 return noImg(AbstractImageManager.NO_IMAGE_SIZE);
155 }
156
157 // public static Image noImage(Cms2DSize size) {
158 // ResourceManager rm = RWT.getResourceManager();
159 // InputStream in = null;
160 // try {
161 // in = rm.getRegisteredContent(AbstractImageManager.NO_IMAGE);
162 // ImageData id = new ImageData(in);
163 // ImageData scaled = id.scaledTo(size.getWidth(), size.getHeight());
164 // Image image = new Image(Display.getCurrent(), scaled);
165 // return image;
166 // } finally {
167 // try {
168 // in.close();
169 // } catch (IOException e) {
170 // // silent
171 // }
172 // }
173 // }
174
175 /** Lorem ipsum text to be used during development. */
176 public final static String LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
177 + " Etiam eleifend hendrerit sem, ac ultricies massa ornare ac."
178 + " Cras aliquam sodales risus, vitae varius lacus molestie quis."
179 + " Vivamus consequat, leo id lacinia volutpat, eros diam efficitur urna, finibus interdum risus turpis at nisi."
180 + " Curabitur vulputate nulla quis scelerisque fringilla. Integer consectetur turpis id lobortis accumsan."
181 + " Pellentesque commodo turpis ac diam ultricies dignissim."
182 + " Curabitur sit amet dolor volutpat lacus aliquam ornare quis sed velit."
183 + " Integer varius quis est et tristique."
184 + " Suspendisse pharetra porttitor purus, eget condimentum magna."
185 + " Duis vitae turpis eros. Sed tincidunt lacinia rutrum."
186 + " Aliquam velit velit, rutrum ut augue sed, condimentum lacinia augue.";
187
188 /** Singleton. */
189 private CmsUiUtils() {
190 }
191
192 }