1 package org
.argeo
.cms
.text
;
4 import javax
.jcr
.RepositoryException
;
6 import org
.argeo
.cms
.CmsException
;
7 import org
.argeo
.cms
.CmsImageManager
;
8 import org
.argeo
.cms
.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
.addons
.fileupload
.FileUploadHandler
;
15 import org
.eclipse
.rap
.addons
.fileupload
.FileUploadListener
;
16 import org
.eclipse
.rap
.addons
.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
;
26 /** An image within the Argeo Text framework */
27 public class Img
extends EditableImage
implements SectionPart
, NodePart
{
28 private static final long serialVersionUID
= 6233572783968188476L;
30 private final Section section
;
32 private final CmsImageManager imageManager
;
33 private FileUploadHandler currentUploadHandler
= null;
34 private FileUploadListener fileUploadListener
;
36 public Img(Composite parent
, int swtStyle
, Node imgNode
,
37 Point preferredImageSize
) throws RepositoryException
{
38 this(Section
.findSection(parent
), parent
, swtStyle
, imgNode
,
40 setStyle(TextStyles
.TEXT_IMAGE
);
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
);
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
);
58 protected Control
createControl(Composite box
, String style
) {
61 return createImageChooser(box
, style
);
62 } catch (RepositoryException e
) {
63 throw new CmsException("Cannot create image chooser", e
);
66 return createLabel(box
, style
);
71 public synchronized void stopEditing() {
73 fileUploadListener
= null;
77 protected synchronized Boolean
load(Control lbl
) {
79 Node imgNode
= getNode();
80 boolean loaded
= imageManager
.load(imgNode
, lbl
,
81 getPreferredImageSize());
82 // getParent().layout();
84 } catch (RepositoryException e
) {
85 throw new CmsException("Cannot load " + getNodeId()
86 + " from image manager", e
);
90 protected Control
createImageChooser(Composite box
, String style
)
91 throws RepositoryException
{
92 // FileDialog fileDialog = new FileDialog(getShell());
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() + ']',
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;
110 public void widgetSelected(SelectionEvent e
) {
112 fileUpload
.submit(currentUploadHandler
.getUploadUrl());
118 protected FileUploadHandler
prepareUpload(FileUploadReceiver receiver
) {
119 final FileUploadHandler uploadHandler
= new FileUploadHandler(receiver
);
120 if (fileUploadListener
!= null)
121 uploadHandler
.addUploadListener(fileUploadListener
);
122 return uploadHandler
;
126 public Section
getSection() {
130 public void setFileUploadListener(FileUploadListener fileUploadListener
) {
131 this.fileUploadListener
= fileUploadListener
;
132 if (currentUploadHandler
!= null)
133 currentUploadHandler
.addUploadListener(fileUploadListener
);
137 public Node
getItem() throws RepositoryException
{
142 public String
getPartId() {
147 public String
toString() {
148 return "Img #" + getPartId();