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
57 : (CmsImageManager
<Control
, Node
>) CmsSwtUtils
.getCmsView(section
).getImageManager();
58 CmsSwtUtils
.style(this, TextStyles
.TEXT_IMG
);
62 protected Control
createControl(Composite box
, String style
) {
65 return createImageChooser(box
, style
);
66 } catch (RepositoryException e
) {
67 throw new JcrException("Cannot create image chooser", e
);
70 return createLabel(box
, style
);
75 public synchronized void stopEditing() {
77 fileUploadListener
= null;
81 protected synchronized Boolean
load(Control lbl
) {
82 Node imgNode
= getNode();
83 boolean loaded
= imageManager
.load(imgNode
, lbl
, getPreferredImageSize());
84 // getParent().layout();
88 protected Node
getUploadFolder() {
89 return Jcr
.getParent(getNode());
92 protected String
getUploadName() {
93 Node node
= getNode();
94 return Jcr
.getName(node
) + '[' + Jcr
.getIndex(node
) + ']';
97 protected CmsImageManager
<Control
, Node
> getImageManager() {
101 protected Control
createImageChooser(Composite box
, String style
) throws RepositoryException
{
102 JcrFileUploadReceiver receiver
= new JcrFileUploadReceiver(this, getUploadFolder(), getUploadName(),
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;
114 public void widgetSelected(SelectionEvent e
) {
116 fileUpload
.submit(currentUploadHandler
.getUploadUrl());
122 protected FileUploadHandler
prepareUpload(FileUploadReceiver receiver
) {
123 final FileUploadHandler uploadHandler
= new FileUploadHandler(receiver
);
124 if (fileUploadListener
!= null)
125 uploadHandler
.addUploadListener(fileUploadListener
);
126 return uploadHandler
;
130 public Section
getSection() {
134 public void setFileUploadListener(FileUploadListener fileUploadListener
) {
135 this.fileUploadListener
= fileUploadListener
;
136 if (currentUploadHandler
!= null)
137 currentUploadHandler
.addUploadListener(fileUploadListener
);
141 public Node
getItem() throws RepositoryException
{
146 public String
getPartId() {
151 public String
toString() {
152 return "Img #" + getPartId();