]> git.argeo.org Git - gpl/argeo-jcr.git/blob - swt/org.argeo.cms.jcr.ui/src/org/argeo/cms/ui/widgets/Img.java
Merge tag 'v2.3.18' into testing
[gpl/argeo-jcr.git] / swt / org.argeo.cms.jcr.ui / src / org / argeo / 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.api.cms.ux.Cms2DSize;
7 import org.argeo.api.cms.ux.CmsImageManager;
8 import org.argeo.cms.swt.CmsSwtUtils;
9 import org.argeo.cms.ui.internal.JcrFileUploadReceiver;
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.widgets.Composite;
24 import org.eclipse.swt.widgets.Control;
25
26 /** An image within the Argeo Text framework */
27 public class Img extends EditableImage implements SectionPart, NodePart {
28 private static final long serialVersionUID = 6233572783968188476L;
29
30 private final Section section;
31
32 private final CmsImageManager<Control, Node> imageManager;
33 private FileUploadHandler currentUploadHandler = null;
34 private FileUploadListener fileUploadListener;
35
36 public Img(Composite parent, int swtStyle, Node imgNode, Cms2DSize preferredImageSize) throws RepositoryException {
37 this(Section.findSection(parent), parent, swtStyle, imgNode, preferredImageSize, null);
38 setStyle(TextStyles.TEXT_IMAGE);
39 }
40
41 public Img(Composite parent, int swtStyle, Node imgNode) throws RepositoryException {
42 this(Section.findSection(parent), parent, swtStyle, imgNode, null, null);
43 setStyle(TextStyles.TEXT_IMAGE);
44 }
45
46 public Img(Composite parent, int swtStyle, Node imgNode, CmsImageManager<Control, Node> imageManager)
47 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, Cms2DSize preferredImageSize,
53 CmsImageManager<Control, Node> imageManager) throws RepositoryException {
54 super(parent, swtStyle, imgNode, false, preferredImageSize);
55 this.section = section;
56 this.imageManager = imageManager != null ? imageManager : CmsSwtUtils.getCmsView(section).getImageManager();
57 CmsSwtUtils.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 Node imgNode = getNode();
82 boolean loaded = imageManager.load(imgNode, lbl, getPreferredImageSize(), null);
83 // getParent().layout();
84 return loaded;
85 }
86
87 protected Node getUploadFolder() {
88 return Jcr.getParent(getNode());
89 }
90
91 protected String getUploadName() {
92 Node node = getNode();
93 return Jcr.getName(node) + '[' + Jcr.getIndex(node) + ']';
94 }
95
96 protected CmsImageManager<Control, Node> getImageManager() {
97 return imageManager;
98 }
99
100 protected Control createImageChooser(Composite box, String style) throws RepositoryException {
101 JcrFileUploadReceiver receiver = new JcrFileUploadReceiver(this, getUploadFolder(), getUploadName(),
102 imageManager);
103 if (currentUploadHandler != null)
104 currentUploadHandler.dispose();
105 currentUploadHandler = prepareUpload(receiver);
106 final ServerPushSession pushSession = new ServerPushSession();
107 final FileUpload fileUpload = new FileUpload(box, SWT.NONE);
108 CmsSwtUtils.style(fileUpload, style);
109 fileUpload.addSelectionListener(new SelectionAdapter() {
110 private static final long serialVersionUID = -9158471843941668562L;
111
112 @Override
113 public void widgetSelected(SelectionEvent e) {
114 pushSession.start();
115 fileUpload.submit(currentUploadHandler.getUploadUrl());
116 }
117 });
118 return fileUpload;
119 }
120
121 protected FileUploadHandler prepareUpload(FileUploadReceiver receiver) {
122 final FileUploadHandler uploadHandler = new FileUploadHandler(receiver);
123 if (fileUploadListener != null)
124 uploadHandler.addUploadListener(fileUploadListener);
125 return uploadHandler;
126 }
127
128 @Override
129 public Section getSection() {
130 return section;
131 }
132
133 public void setFileUploadListener(FileUploadListener fileUploadListener) {
134 this.fileUploadListener = fileUploadListener;
135 if (currentUploadHandler != null)
136 currentUploadHandler.addUploadListener(fileUploadListener);
137 }
138
139 @Override
140 public Node getItem() throws RepositoryException {
141 return getNode();
142 }
143
144 @Override
145 public String getPartId() {
146 return getNodeId();
147 }
148
149 @Override
150 public String toString() {
151 return "Img #" + getPartId();
152 }
153
154 }