1 package org
.argeo
.cms
.users
;
3 import java
.util
.Observable
;
4 import java
.util
.Observer
;
7 import javax
.jcr
.RepositoryException
;
9 import org
.apache
.commons
.logging
.Log
;
10 import org
.apache
.commons
.logging
.LogFactory
;
11 import org
.argeo
.ArgeoException
;
12 import org
.argeo
.cms
.CmsEditable
;
13 import org
.argeo
.cms
.CmsException
;
14 import org
.argeo
.cms
.CmsUtils
;
15 import org
.argeo
.cms
.viewers
.EditablePart
;
16 import org
.argeo
.cms
.viewers
.JcrVersionCmsEditable
;
17 import org
.eclipse
.jface
.viewers
.ContentViewer
;
18 import org
.eclipse
.jface
.viewers
.ISelection
;
19 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
20 import org
.eclipse
.swt
.events
.MouseAdapter
;
21 import org
.eclipse
.swt
.events
.MouseListener
;
22 import org
.eclipse
.swt
.widgets
.Composite
;
23 import org
.eclipse
.swt
.widgets
.Control
;
24 import org
.eclipse
.swt
.widgets
.Widget
;
26 /** Manage edition of the users */
27 public class UserViewerOld
extends ContentViewer
implements Observer
{
28 private static final long serialVersionUID
= -5055220955004863645L;
30 private final static Log log
= LogFactory
.getLog(UserViewerOld
.class);
32 // private UserPart userPart = new UserPart();
34 private CmsEditable cmsEditable
;
35 private Node currentDisplayed
;
37 /** The basis for the layouts, typically the body of a ScrolledPage. */
38 private final Composite page
;
40 private MouseListener mouseListener
;
42 private EditablePart edited
;
43 private ISelection selection
= StructuredSelection
.EMPTY
;
45 protected UserViewerOld(Composite composite
) {
49 void setDisplayedUser(Node node
) {
52 if (!hasChanged(node
))
56 // userPart.createUi(page, node);
59 page
.getParent().layout();
62 cmsEditable
= new JcrVersionCmsEditable(node
);
64 if (this.cmsEditable
instanceof Observable
)
65 ((Observable
) this.cmsEditable
).addObserver(this);
66 // // if (cmsEditable.canEdit()) {
67 // // mouseListener = createMouseListener();
70 } catch (RepositoryException re
) {
71 throw new ArgeoException("Unable to display " + node
, re
);
75 private boolean hasChanged(Node node
) throws RepositoryException
{
76 if (currentDisplayed
== null && node
== null)
78 else if (currentDisplayed
== null || node
== null)
81 return node
.getIdentifier()
82 .equals(currentDisplayed
.getIdentifier());
85 /** Create (retrieve) the MouseListener to use. */
86 protected MouseListener
createMouseListener() {
87 return new MouseAdapter() {
88 private static final long serialVersionUID
= 1L;
93 public void update(Observable o
, Object arg
) {
95 editingStateChanged(cmsEditable
);
98 /** To be overridden in order to provide the actual refresh */
99 protected void refresh(Control control
) throws RepositoryException
{
102 /** To be overridden.Save the edited part. */
103 protected void save(EditablePart part
) throws RepositoryException
{
106 /** Prepare the edited part */
107 protected void prepare(EditablePart part
, Object caretPosition
) {
110 /** Notified when the editing state changed. Does nothing, to be overridden */
111 protected void editingStateChanged(CmsEditable cmsEditable
) {
115 public Control
getControl() {
120 public void refresh() {
122 // if (cmsEditable.canEdit() && !readOnly)
123 // mouseListener = createMouseListener();
125 // mouseListener = null;
126 refresh(getControl());
127 layout(getControl());
128 } catch (RepositoryException e
) {
129 throw new CmsException("Cannot refresh", e
);
134 public void setSelection(ISelection selection
, boolean reveal
) {
135 this.selection
= selection
;
138 protected void updateContent(EditablePart part
) throws RepositoryException
{
142 protected void edit(EditablePart part
, Object caretPosition
) {
147 if (edited
!= null && edited
!= part
)
152 prepare(part
, caretPosition
);
154 layout(part
.getControl());
155 } catch (RepositoryException e
) {
156 throw new CmsException("Cannot edit " + part
, e
);
160 private void stopEditing(Boolean save
) throws RepositoryException
{
161 if (edited
instanceof Widget
&& ((Widget
) edited
).isDisposed()) {
166 assert edited
!= null;
167 if (edited
== null) {
168 if (log
.isTraceEnabled())
169 log
.warn("Told to stop editing while not editing anything");
176 edited
.stopEditing();
177 updateContent(edited
);
178 layout(((EditablePart
) edited
).getControl());
182 // METHODS AVAILABLE TO EXTENDING CLASSES
183 protected void saveEdit() {
187 } catch (RepositoryException e
) {
188 throw new CmsException("Cannot stop editing", e
);
192 protected void cancelEdit() {
196 } catch (RepositoryException e
) {
198 throw new CmsException("Cannot cancel editing", e
);
202 /** Layout this controls from the related base page. */
203 public void layout(Control
... controls
) {
204 page
.layout(controls
);
208 /** Check whether the edited part is in a proper state */
209 protected void checkEdited() {
210 if (edited
== null || (edited
instanceof Widget
)
211 && ((Widget
) edited
).isDisposed())
212 throw new CmsException(
213 "Edited should not be null or disposed at this stage");
217 protected EditablePart
getEdited() {
221 public MouseListener
getMouseListener() {
222 return mouseListener
;
225 public CmsEditable
getCmsEditable() {
230 public ISelection
getSelection() {