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