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