From ff7b3e2954398c5a6d36684725d4527c961ae080 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 23 Jun 2022 12:41:27 +0200 Subject: [PATCH] Change package of non-JCR SWT components. --- .../src/org/argeo/cms/swt}/EditablePart.java | 2 +- .../cms/swt}/widgets/ContextOverlay.java | 3 +- .../org/argeo/cms/ui/forms/EditableLink.java | 2 +- .../ui/forms/EditableMultiStringProperty.java | 2 +- .../cms/ui/forms/EditablePropertyDate.java | 2 +- .../cms/ui/forms/EditablePropertyString.java | 2 +- .../argeo/cms/ui/forms/FormPageViewer.java | 2 +- .../cms/ui/viewers/AbstractPageViewer.java | 1 + .../cms/ui/viewers/JcrVersionCmsEditable.java | 37 ++++++++----------- .../src/org/argeo/cms/ui/viewers/Section.java | 1 + .../org/argeo/cms/ui/viewers/SectionPart.java | 1 + .../src/org/argeo/api/cms/ux/CmsEditable.java | 34 ++++++++++++++--- .../argeo/api/cms/ux}/CmsEditionEvent.java | 10 ++++- .../argeo/api/cms/ux/CmsEditionListener.java | 7 ++++ .../org/argeo/cms/ux/AbstractCmsEditable.java | 34 +++++++++++++++++ 15 files changed, 102 insertions(+), 38 deletions(-) rename {jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers => eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt}/EditablePart.java (87%) rename {jcr/org.argeo.cms.ui/src/org/argeo/cms/ui => eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt}/widgets/ContextOverlay.java (97%) rename {jcr/org.argeo.cms.ui/src/org/argeo/cms/ui => org.argeo.api.cms/src/org/argeo/api/cms/ux}/CmsEditionEvent.java (61%) create mode 100644 org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditionListener.java create mode 100644 org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractCmsEditable.java diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/EditablePart.java b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/EditablePart.java similarity index 87% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/EditablePart.java rename to eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/EditablePart.java index 3967c97fb..90c16773c 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/EditablePart.java +++ b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/EditablePart.java @@ -1,4 +1,4 @@ -package org.argeo.cms.ui.viewers; +package org.argeo.cms.swt; import org.eclipse.swt.widgets.Control; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/ContextOverlay.java b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/ContextOverlay.java similarity index 97% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/ContextOverlay.java rename to eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/ContextOverlay.java index d14eadca2..f7b644377 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/ContextOverlay.java +++ b/eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/widgets/ContextOverlay.java @@ -1,7 +1,6 @@ -package org.argeo.cms.ui.widgets; +package org.argeo.cms.swt.widgets; import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.swt.widgets.ScrolledPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ShellAdapter; import org.eclipse.swt.events.ShellEvent; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableLink.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableLink.java index e74de5ee8..689fca316 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableLink.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableLink.java @@ -3,7 +3,7 @@ package org.argeo.cms.ui.forms; import javax.jcr.Node; import javax.jcr.RepositoryException; -import org.argeo.cms.ui.viewers.EditablePart; +import org.argeo.cms.swt.EditablePart; import org.argeo.eclipse.ui.EclipseUiUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java index fd3f48e3a..a04537ef4 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditableMultiStringProperty.java @@ -6,7 +6,7 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.ui.viewers.EditablePart; +import org.argeo.cms.swt.EditablePart; import org.argeo.cms.ui.widgets.StyledControl; import org.argeo.eclipse.ui.EclipseUiUtils; import org.eclipse.jface.dialogs.MessageDialog; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java index 8591a925f..0f80ca78c 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyDate.java @@ -8,7 +8,7 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.ui.viewers.EditablePart; +import org.argeo.cms.swt.EditablePart; import org.argeo.cms.ui.widgets.StyledControl; import org.argeo.eclipse.ui.EclipseUiUtils; import org.eclipse.swt.SWT; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java index 092009355..ffe7e36f7 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/EditablePropertyString.java @@ -7,7 +7,7 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.ui.viewers.EditablePart; +import org.argeo.cms.swt.EditablePart; import org.argeo.cms.ui.widgets.EditableText; import org.argeo.eclipse.ui.EclipseUiUtils; import org.eclipse.swt.widgets.Composite; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java index 3b1daf0aa..e10dd4556 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java @@ -19,8 +19,8 @@ import org.argeo.api.cms.ux.Cms2DSize; import org.argeo.api.cms.ux.CmsEditable; import org.argeo.api.cms.ux.CmsImageManager; import org.argeo.cms.swt.CmsSwtUtils; +import org.argeo.cms.swt.EditablePart; import org.argeo.cms.ui.viewers.AbstractPageViewer; -import org.argeo.cms.ui.viewers.EditablePart; import org.argeo.cms.ui.viewers.Section; import org.argeo.cms.ui.viewers.SectionPart; import org.argeo.cms.ui.widgets.EditableImage; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java index 22e933f45..a247313e1 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java @@ -13,6 +13,7 @@ import javax.security.auth.Subject; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.ux.CmsEditable; +import org.argeo.cms.swt.EditablePart; import org.argeo.cms.swt.widgets.ScrolledPage; import org.argeo.jcr.JcrException; import org.eclipse.jface.viewers.ContentViewer; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java index 07724f4b1..298fbdea9 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/JcrVersionCmsEditable.java @@ -1,16 +1,14 @@ package org.argeo.cms.ui.viewers; -import java.util.Observable; - import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; import javax.jcr.version.VersionManager; -import org.argeo.api.cms.ux.CmsEditable; -import org.argeo.cms.CmsException; -import org.argeo.cms.ui.CmsEditionEvent; +import org.argeo.api.cms.ux.CmsEditionEvent; +import org.argeo.cms.ux.AbstractCmsEditable; +import org.argeo.jcr.JcrException; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; @@ -18,23 +16,21 @@ import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; /** Provides the CmsEditable semantic based on JCR versioning. */ -public class JcrVersionCmsEditable extends Observable implements CmsEditable { +public class JcrVersionCmsEditable extends AbstractCmsEditable { private final String nodePath;// cache private final VersionManager versionManager; private final Boolean canEdit; public JcrVersionCmsEditable(Node node) throws RepositoryException { this.nodePath = node.getPath(); - if (node.getSession().hasPermission(node.getPath(), - Session.ACTION_SET_PROPERTY)) { + if (node.getSession().hasPermission(node.getPath(), Session.ACTION_SET_PROPERTY)) { // was Session.ACTION_ADD_NODE canEdit = true; if (!node.isNodeType(NodeType.MIX_VERSIONABLE)) { node.addMixin(NodeType.MIX_VERSIONABLE); node.getSession().save(); } - versionManager = node.getSession().getWorkspace() - .getVersionManager(); + versionManager = node.getSession().getWorkspace().getVersionManager(); } else { canEdit = false; versionManager = null; @@ -43,8 +39,7 @@ public class JcrVersionCmsEditable extends Observable implements CmsEditable { // bind keys if (canEdit) { Display display = Display.getCurrent(); - display.setData(RWT.ACTIVE_KEYS, new String[] { "CTRL+RETURN", - "CTRL+E" }); + display.setData(RWT.ACTIVE_KEYS, new String[] { "CTRL+RETURN", "CTRL+E" }); display.addFilter(SWT.KeyDown, new Listener() { private static final long serialVersionUID = -4378653870463187318L; @@ -70,8 +65,7 @@ public class JcrVersionCmsEditable extends Observable implements CmsEditable { return false; return versionManager.isCheckedOut(nodePath); } catch (RepositoryException e) { - throw new CmsException("Cannot check whether " + nodePath - + " is editing", e); + throw new JcrException("Cannot check whether " + nodePath + " is editing", e); } } @@ -79,23 +73,22 @@ public class JcrVersionCmsEditable extends Observable implements CmsEditable { public void startEditing() { try { versionManager.checkout(nodePath); - setChanged(); +// setChanged(); } catch (RepositoryException e1) { - throw new CmsException("Cannot publish " + nodePath); + throw new JcrException("Cannot publish " + nodePath, e1); } - notifyObservers(new CmsEditionEvent(nodePath, - CmsEditionEvent.START_EDITING)); + notifyListeners(new CmsEditionEvent(nodePath, CmsEditionEvent.START_EDITING, this)); } @Override public void stopEditing() { try { versionManager.checkin(nodePath); - setChanged(); +// setChanged(); } catch (RepositoryException e1) { - throw new CmsException("Cannot publish " + nodePath, e1); + throw new JcrException("Cannot publish " + nodePath, e1); } - notifyObservers(new CmsEditionEvent(nodePath, - CmsEditionEvent.STOP_EDITING)); + notifyListeners(new CmsEditionEvent(nodePath, CmsEditionEvent.STOP_EDITING, this)); } + } diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/Section.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/Section.java index d282eebbe..0e489e05f 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/Section.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/Section.java @@ -8,6 +8,7 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; import org.argeo.cms.swt.CmsSwtUtils; +import org.argeo.cms.swt.EditablePart; import org.argeo.cms.ui.widgets.JcrComposite; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/SectionPart.java b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/SectionPart.java index f0b367f5a..df3c734c2 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/SectionPart.java +++ b/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/SectionPart.java @@ -1,5 +1,6 @@ package org.argeo.cms.ui.viewers; +import org.argeo.cms.swt.EditablePart; /** An editable part dynamically related to a Section */ public interface SectionPart extends EditablePart, NodePart { diff --git a/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditable.java b/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditable.java index 9047004ba..94ed24eb5 100644 --- a/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditable.java +++ b/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditable.java @@ -4,15 +4,19 @@ package org.argeo.api.cms.ux; public interface CmsEditable { /** Whether the calling thread can edit, the value is immutable */ - public Boolean canEdit(); + Boolean canEdit(); - public Boolean isEditing(); + Boolean isEditing(); - public void startEditing(); + void startEditing(); - public void stopEditing(); + void stopEditing(); - public static CmsEditable NON_EDITABLE = new CmsEditable() { + void addCmsEditionListener(CmsEditionListener listener); + + void removeCmsEditionListener(CmsEditionListener listener); + + static CmsEditable NON_EDITABLE = new CmsEditable() { @Override public void stopEditing() { @@ -31,9 +35,18 @@ public interface CmsEditable { public Boolean canEdit() { return false; } + + @Override + public void addCmsEditionListener(CmsEditionListener listener) { + } + + @Override + public void removeCmsEditionListener(CmsEditionListener listener) { + } + }; - public static CmsEditable ALWAYS_EDITING = new CmsEditable() { + static CmsEditable ALWAYS_EDITING = new CmsEditable() { @Override public void stopEditing() { @@ -52,6 +65,15 @@ public interface CmsEditable { public Boolean canEdit() { return true; } + + @Override + public void addCmsEditionListener(CmsEditionListener listener) { + } + + @Override + public void removeCmsEditionListener(CmsEditionListener listener) { + } + }; } diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsEditionEvent.java b/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditionEvent.java similarity index 61% rename from jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsEditionEvent.java rename to org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditionEvent.java index 872142bca..e1765abab 100644 --- a/jcr/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsEditionEvent.java +++ b/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditionEvent.java @@ -1,4 +1,4 @@ -package org.argeo.cms.ui; +package org.argeo.api.cms.ux; import java.util.EventObject; @@ -10,14 +10,20 @@ public class CmsEditionEvent extends EventObject { public final static Integer STOP_EDITING = 1; private final Integer type; + private final CmsEditable cmsEditable; - public CmsEditionEvent(Object source, Integer type) { + public CmsEditionEvent(Object source, Integer type, CmsEditable cmsEditable) { super(source); this.type = type; + this.cmsEditable = cmsEditable; } public Integer getType() { return type; } + public CmsEditable getCmsEditable() { + return cmsEditable; + } + } diff --git a/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditionListener.java b/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditionListener.java new file mode 100644 index 000000000..e05c16880 --- /dev/null +++ b/org.argeo.api.cms/src/org/argeo/api/cms/ux/CmsEditionListener.java @@ -0,0 +1,7 @@ +package org.argeo.api.cms.ux; + +public interface CmsEditionListener { + void editionStarted(CmsEditionEvent e); + + void editionStopped(CmsEditionEvent e); +} diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractCmsEditable.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractCmsEditable.java new file mode 100644 index 000000000..a1cd3d90e --- /dev/null +++ b/org.argeo.cms.ux/src/org/argeo/cms/ux/AbstractCmsEditable.java @@ -0,0 +1,34 @@ +package org.argeo.cms.ux; + +import java.util.IdentityHashMap; + +import org.argeo.api.cms.ux.CmsEditable; +import org.argeo.api.cms.ux.CmsEditionEvent; +import org.argeo.api.cms.ux.CmsEditionListener; + +public abstract class AbstractCmsEditable implements CmsEditable { + private IdentityHashMap listeners = new IdentityHashMap<>(); + + protected void notifyListeners(CmsEditionEvent e) { + if (CmsEditionEvent.START_EDITING == e.getType()) { + for (CmsEditionListener listener : listeners.keySet()) + listener.editionStarted(e); + } else if (CmsEditionEvent.STOP_EDITING == e.getType()) { + for (CmsEditionListener listener : listeners.keySet()) + listener.editionStopped(e); + } else { + throw new IllegalArgumentException("Unkown edition event type " + e.getType()); + } + } + + @Override + public void addCmsEditionListener(CmsEditionListener listener) { + listeners.put(listener, new Object()); + } + + @Override + public void removeCmsEditionListener(CmsEditionListener listener) { + listeners.remove(listener, new Object()); + } + +} -- 2.30.2