1 package org
.argeo
.cms
.ui
.util
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
5 import java
.net
.MalformedURLException
;
9 import javax
.jcr
.RepositoryException
;
10 import javax
.servlet
.http
.HttpServletRequest
;
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
;
30 /** Static utilities for the CMS framework. */
31 public class CmsUiUtils
{
32 // private final static Log log = LogFactory.getLog(CmsUiUtils.class);
39 * The CMS view related to this display, or null if none is available from this
42 * @deprecated Use {@link CmsSwtUtils#getCmsView(Composite)} instead.
45 public static CmsView
getCmsView() {
46 // return UiContext.getData(CmsView.class.getName());
47 return CmsSwtUtils
.getCmsView(Display
.getCurrent().getActiveShell());
50 public static StringBuilder
getServerBaseUrl(HttpServletRequest request
) {
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());
58 } catch (MalformedURLException e
) {
59 throw new IllegalArgumentException("Cannot extract server base URL from " + request
.getRequestURL(), e
);
64 public static String
getDataUrl(Node node
, HttpServletRequest request
) {
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
);
74 /** A path in the node repository */
75 public static String
getDataPath(Node node
) {
76 return getDataPath(CmsConstants
.EGO_REPOSITORY
, node
);
79 public static String
getDataPath(String cn
, Node node
) {
80 return CmsJcrUtils
.getDataPath(cn
, node
);
83 /** Clean reserved URL characters for use in HTTP links. */
84 public static String
getDataPathForUrl(Node node
) {
85 return CmsSwtUtils
.cleanPathForUrl(getDataPath(node
));
88 /** @deprecated Use rowData16px() instead. GridData should not be reused. */
90 public static RowData ROW_DATA_16px
= new RowData(16, 16);
101 public static void setItemHeight(Table table
, int height
) {
102 table
.setData(CmsUiConstants
.ITEM_HEIGHT
, height
);
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]);
114 public static Node
child(Node parent
, Enum
<?
> en
) throws RepositoryException
{
115 return parent
.getNode(en
.name());
118 public static Boolean
has(Node parent
, Enum
<?
> en
) throws RepositoryException
{
119 return parent
.hasNode(en
.name());
122 public static Node
getOrAdd(Node parent
, Enum
<?
> en
) throws RepositoryException
{
123 return getOrAdd(parent
, en
, null);
126 public static Node
getOrAdd(Node parent
, Enum
<?
> en
, String primaryType
) throws RepositoryException
{
128 return child(parent
, en
);
129 else if (primaryType
== null)
130 return parent
.addNode(en
.name());
132 return parent
.addNode(en
.name(), primaryType
);
137 public static String
img(Node fileNode
, String width
, String height
) {
138 return img(null, fileNode
, width
, height
);
141 public static String
img(String serverBase
, Node fileNode
, String width
, String height
) {
142 // String src = (serverBase != null ? serverBase : "") + NodeUtils.getDataPath(fileNode);
144 src
= (serverBase
!= null ? serverBase
: "") + getDataPathForUrl(fileNode
);
145 return CmsUxUtils
.imgBuilder(src
, width
, height
).append("/>").toString();
148 public static String
noImg(Cms2DSize size
) {
149 ResourceManager rm
= RWT
.getResourceManager();
150 return CmsUxUtils
.img(rm
.getLocation(AbstractImageManager
.NO_IMAGE
), size
);
153 public static String
noImg() {
154 return noImg(AbstractImageManager
.NO_IMAGE_SIZE
);
157 // public static Image noImage(Cms2DSize size) {
158 // ResourceManager rm = RWT.getResourceManager();
159 // InputStream in = null;
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);
169 // } catch (IOException e) {
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.";
189 private CmsUiUtils() {