]> git.argeo.org Git - gpl/argeo-jcr.git/blob - Img.java
41063fa47239d3ffb86166bf58de2d6e2d3e5c12
[gpl/argeo-jcr.git] / 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
57 : (CmsImageManager<Control, Node>) CmsSwtUtils.getCmsView(section).getImageManager();
58 CmsSwtUtils.style(this, TextStyles.TEXT_IMG);
59 }
60
61 @Override
62 protected Control createControl(Composite box, String style) {
63 if (isEditing()) {
64 try {
65 return createImageChooser(box, style);
66 } catch (RepositoryException e) {
67 throw new JcrException("Cannot create image chooser", e);
68 }
69 } else {
70 return createLabel(box, style);
71 }
72 }
73
74 @Override
75 public synchronized void stopEditing() {
76 super.stopEditing();
77 fileUploadListener = null;
78 }
79
80 @Override
81 protected synchronized Boolean load(Control lbl) {
82 Node imgNode = getNode();
83 boolean loaded = imageManager.load(imgNode, lbl, getPreferredImageSize());
84 // getParent().layout();
85 return loaded;
86 }
87
88 protected Node getUploadFolder() {
89 return Jcr.getParent(getNode());
90 }
91
92 protected String getUploadName() {
93 Node node = getNode();
94 return Jcr.getName(node) + '[' + Jcr.getIndex(node) + ']';
95 }
96
97 protected CmsImageManager<Control, Node> getImageManager() {
98 return imageManager;
99 }
100
101 protected Control createImageChooser(Composite box, String style) throws RepositoryException {
102 JcrFileUploadReceiver receiver = new JcrFileUploadReceiver(this, getUploadFolder(), getUploadName(),
103 imageManager);
104 if (currentUploadHandler != null)
105 currentUploadHandler.dispose();
106 currentUploadHandler = prepareUpload(receiver);
107 final ServerPushSession pushSession = new ServerPushSession();
108 final FileUpload fileUpload = new FileUpload(box, SWT.NONE);
109 CmsSwtUtils.style(fileUpload, style);
110 fileUpload.addSelectionListener(new SelectionAdapter() {
111 private static final long serialVersionUID = -9158471843941668562L;
112
113 @Override
114 public void widgetSelected(SelectionEvent e) {
115 pushSession.start();
116 fileUpload.submit(currentUploadHandler.getUploadUrl());
117 }
118 });
119 return fileUpload;
120 }
121
122 protected FileUploadHandler prepareUpload(FileUploadReceiver receiver) {
123 final FileUploadHandler uploadHandler = new FileUploadHandler(receiver);
124 if (fileUploadListener != null)
125 uploadHandler.addUploadListener(fileUploadListener);
126 return uploadHandler;
127 }
128
129 @Override
130 public Section getSection() {
131 return section;
132 }
133
134 public void setFileUploadListener(FileUploadListener fileUploadListener) {
135 this.fileUploadListener = fileUploadListener;
136 if (currentUploadHandler != null)
137 currentUploadHandler.addUploadListener(fileUploadListener);
138 }
139
140 @Override
141 public Node getItem() throws RepositoryException {
142 return getNode();
143 }
144
145 @Override
146 public String getPartId() {
147 return getNodeId();
148 }
149
150 @Override
151 public String toString() {
152 return "Img #" + getPartId();
153 }
154
155 }