]> git.argeo.org Git - lgpl/argeo-commons.git/blob - cms/ui/widgets/Img.java
Prepare next development cycle
[lgpl/argeo-commons.git] / cms / ui / widgets / Img.java
1 package org.argeo.cms.ui.widgets;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5
6 import org.argeo.cms.ui.CmsImageManager;
7 import org.argeo.cms.ui.CmsView;
8 import org.argeo.cms.ui.internal.JcrFileUploadReceiver;
9 import org.argeo.cms.ui.util.CmsUiUtils;
10 import org.argeo.cms.ui.viewers.NodePart;
11 import org.argeo.cms.ui.viewers.Section;
12 import org.argeo.cms.ui.viewers.SectionPart;
13 import org.argeo.jcr.Jcr;
14 import org.argeo.jcr.JcrException;
15 import org.eclipse.rap.fileupload.FileUploadHandler;
16 import org.eclipse.rap.fileupload.FileUploadListener;
17 import org.eclipse.rap.fileupload.FileUploadReceiver;
18 import org.eclipse.rap.rwt.service.ServerPushSession;
19 import org.eclipse.rap.rwt.widgets.FileUpload;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.events.SelectionAdapter;
22 import org.eclipse.swt.events.SelectionEvent;
23 import org.eclipse.swt.graphics.Point;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Control;
26
27 /** An image within the Argeo Text framework */
28 public class Img extends EditableImage implements SectionPart, NodePart {
29 private static final long serialVersionUID = 6233572783968188476L;
30
31 private final Section section;
32
33 private final CmsImageManager imageManager;
34 private FileUploadHandler currentUploadHandler = null;
35 private FileUploadListener fileUploadListener;
36
37 public Img(Composite parent, int swtStyle, Node imgNode, Point preferredImageSize) throws RepositoryException {
38 this(Section.findSection(parent), parent, swtStyle, imgNode, preferredImageSize, null);
39 setStyle(TextStyles.TEXT_IMAGE);
40 }
41
42 public Img(Composite parent, int swtStyle, Node imgNode) throws RepositoryException {
43 this(Section.findSection(parent), parent, swtStyle, imgNode, null, null);
44 setStyle(TextStyles.TEXT_IMAGE);
45 }
46
47 public Img(Composite parent, int swtStyle, Node imgNode, CmsImageManager imageManager) throws RepositoryException {
48 this(Section.findSection(parent), parent, swtStyle, imgNode, null, imageManager);
49 setStyle(TextStyles.TEXT_IMAGE);
50 }
51
52 Img(Section section, Composite parent, int swtStyle, Node imgNode, Point preferredImageSize,
53 CmsImageManager imageManager) throws RepositoryException {
54 super(parent, swtStyle, imgNode, false, preferredImageSize);
55 this.section = section;
56 this.imageManager = imageManager != null ? imageManager : CmsView.getCmsView(section).getImageManager();
57 CmsUiUtils.style(this, TextStyles.TEXT_IMG);
58 }
59
60 @Override
61 protected Control createControl(Composite box, String style) {
62 if (isEditing()) {
63 try {
64 return createImageChooser(box, style);
65 } catch (RepositoryException e) {
66 throw new JcrException("Cannot create image chooser", e);
67 }
68 } else {
69 return createLabel(box, style);
70 }
71 }
72
73 @Override
74 public synchronized void stopEditing() {
75 super.stopEditing();
76 fileUploadListener = null;
77 }
78
79 @Override
80 protected synchronized Boolean load(Control lbl) {
81 try {
82 Node imgNode = getNode();
83 boolean loaded = imageManager.load(imgNode, lbl, getPreferredImageSize());
84 // getParent().layout();
85 return loaded;
86 } catch (RepositoryException e) {
87 throw new JcrException("Cannot load " + getNodeId() + " from image manager", e);
88 }
89 }
90
91 protected Node getUploadFolder() {
92 return Jcr.getParent(getNode());
93 }
94
95 protected String getUploadName() {
96 Node node = getNode();
97 return Jcr.getName(node) + '[' + Jcr.getIndex(node) + ']';
98 }
99
100 protected CmsImageManager getImageManager() {
101 return imageManager;
102 }
103
104 protected Control createImageChooser(Composite box, String style) throws RepositoryException {
105 JcrFileUploadReceiver receiver = new JcrFileUploadReceiver(this, getUploadFolder(), getUploadName(),
106 imageManager);
107 if (currentUploadHandler != null)
108 currentUploadHandler.dispose();
109 currentUploadHandler = prepareUpload(receiver);
110 final ServerPushSession pushSession = new ServerPushSession();
111 final FileUpload fileUpload = new FileUpload(box, SWT.NONE);
112 CmsUiUtils.style(fileUpload, style);
113 fileUpload.addSelectionListener(new SelectionAdapter() {
114 private static final long serialVersionUID = -9158471843941668562L;
115
116 @Override
117 public void widgetSelected(SelectionEvent e) {
118 pushSession.start();
119 fileUpload.submit(currentUploadHandler.getUploadUrl());
120 }
121 });
122 return fileUpload;
123 }
124
125 protected FileUploadHandler prepareUpload(FileUploadReceiver receiver) {
126 final FileUploadHandler uploadHandler = new FileUploadHandler(receiver);
127 if (fileUploadListener != null)
128 uploadHandler.addUploadListener(fileUploadListener);
129 return uploadHandler;
130 }
131
132 @Override
133 public Section getSection() {
134 return section;
135 }
136
137 public void setFileUploadListener(FileUploadListener fileUploadListener) {
138 this.fileUploadListener = fileUploadListener;
139 if (currentUploadHandler != null)
140 currentUploadHandler.addUploadListener(fileUploadListener);
141 }
142
143 @Override
144 public Node getItem() throws RepositoryException {
145 return getNode();
146 }
147
148 @Override
149 public String getPartId() {
150 return getNodeId();
151 }
152
153 @Override
154 public String toString() {
155 return "Img #" + getPartId();
156 }
157
158 }