1 package org
.argeo
.cms
.ui
.widgets
;
4 import javax
.jcr
.RepositoryException
;
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
;
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
<Control
, Node
> imageManager
;
33 private FileUploadHandler currentUploadHandler
= null;
34 private FileUploadListener fileUploadListener
;
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
);
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
);
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
);
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
);
61 protected Control
createControl(Composite box
, String style
) {
64 return createImageChooser(box
, style
);
65 } catch (RepositoryException e
) {
66 throw new JcrException("Cannot create image chooser", e
);
69 return createLabel(box
, style
);
74 public synchronized void stopEditing() {
76 fileUploadListener
= null;
80 protected synchronized Boolean
load(Control lbl
) {
81 Node imgNode
= getNode();
82 boolean loaded
= imageManager
.load(imgNode
, lbl
, getPreferredImageSize(), null);
83 // getParent().layout();
87 protected Node
getUploadFolder() {
88 return Jcr
.getParent(getNode());
91 protected String
getUploadName() {
92 Node node
= getNode();
93 return Jcr
.getName(node
) + '[' + Jcr
.getIndex(node
) + ']';
96 protected CmsImageManager
<Control
, Node
> getImageManager() {
100 protected Control
createImageChooser(Composite box
, String style
) throws RepositoryException
{
101 JcrFileUploadReceiver receiver
= new JcrFileUploadReceiver(this, getUploadFolder(), getUploadName(),
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;
113 public void widgetSelected(SelectionEvent e
) {
115 fileUpload
.submit(currentUploadHandler
.getUploadUrl());
121 protected FileUploadHandler
prepareUpload(FileUploadReceiver receiver
) {
122 final FileUploadHandler uploadHandler
= new FileUploadHandler(receiver
);
123 if (fileUploadListener
!= null)
124 uploadHandler
.addUploadListener(fileUploadListener
);
125 return uploadHandler
;
129 public Section
getSection() {
133 public void setFileUploadListener(FileUploadListener fileUploadListener
) {
134 this.fileUploadListener
= fileUploadListener
;
135 if (currentUploadHandler
!= null)
136 currentUploadHandler
.addUploadListener(fileUploadListener
);
140 public Node
getItem() throws RepositoryException
{
145 public String
getPartId() {
150 public String
toString() {
151 return "Img #" + getPartId();