X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fviewers%2FAbstractPageViewer.java;h=ef24ee0d5021fd729ab8fe3a9b055c3aa9c5e896;hb=633a8acd189cc22f06944d278879601189be1bc8;hp=e23e3ba7957320a67cdd82cb0d5de5f18c4561be;hpb=fb3182380d9688998a81d853a4eebcf87b6a48c7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java index e23e3ba79..ef24ee0d5 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java @@ -11,10 +11,8 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.security.auth.Subject; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.cms.CmsException; -import org.argeo.cms.ui.CmsEditable; +import org.argeo.api.cms.CmsEditable; +import org.argeo.api.cms.CmsLog; import org.argeo.cms.ui.widgets.ScrolledPage; import org.argeo.jcr.JcrException; import org.eclipse.jface.viewers.ContentViewer; @@ -34,7 +32,7 @@ import org.xml.sax.SAXParseException; public abstract class AbstractPageViewer extends ContentViewer implements Observer { private static final long serialVersionUID = 5438688173410341485L; - private final static Log log = LogFactory.getLog(AbstractPageViewer.class); + private final static CmsLog log = CmsLog.getLog(AbstractPageViewer.class); private final boolean readOnly; /** The basis for the layouts, typically a ScrolledPage. */ @@ -75,8 +73,8 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ initModel(node); node.getSession().save(); } - } catch (Exception e) { - throw new CmsException("Cannot initialize model", e); + } catch (RepositoryException e) { + throw new JcrException("Cannot initialize model", e); } } @@ -121,6 +119,16 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ } } + public void layoutPage() { + if (page != null) + page.layout(true, true); + } + + protected void showControl(Control control) { + if (page != null && (page instanceof ScrolledPage)) + ((ScrolledPage) page).showControl(control); + } + @Override public void update(Observable o, Object arg) { if (o == cmsEditable) @@ -154,9 +162,11 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ else mouseListener = null; refresh(getControl()); - layout(getControl()); + // layout(getControl()); + if (!getControl().isDisposed()) + layoutPage(); } catch (RepositoryException e) { - throw new CmsException("Cannot refresh", e); + throw new JcrException("Cannot refresh", e); } return null; }); @@ -188,10 +198,11 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ } part.startEditing(); + edited = part; updateContent(part); prepare(part, caretPosition); - edited = part; edited.getControl().addFocusListener(new FocusListener() { + private static final long serialVersionUID = 6883521812717097017L; @Override public void focusLost(FocusEvent event) { @@ -204,8 +215,9 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ }); layout(part.getControl()); + showControl(part.getControl()); } catch (RepositoryException e) { - throw new CmsException("Cannot edit " + part, e); + throw new JcrException("Cannot edit " + part, e); } } @@ -227,8 +239,12 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ save(edited); edited.stopEditing(); - updateContent(edited); - layout(((EditablePart) edited).getControl()); + EditablePart editablePart = edited; + Control control = ((EditablePart) edited).getControl(); + edited = null; + // TODO make edited state management more robust + updateContent(editablePart); + layout(control); } catch (RepositoryException e) { throw new JcrException("Cannot stop editing", e); } finally { @@ -262,14 +278,14 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ if (parent.getParent() != null) return findDataParent(parent.getParent()); else - throw new CmsException("No data parent found"); + throw new IllegalStateException("No data parent found"); } // UTILITIES /** Check whether the edited part is in a proper state */ protected void checkEdited() { if (edited == null || (edited instanceof Widget) && ((Widget) edited).isDisposed()) - throw new CmsException("Edited should not be null or disposed at this stage"); + throw new IllegalStateException("Edited should not be null or disposed at this stage"); } /** Persist all changes. */ @@ -302,7 +318,7 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ res = Subject.getSubject(accessControlContext); } if (res == null) - throw new CmsException("No subject associated with this viewer"); + throw new IllegalStateException("No subject associated with this viewer"); return res; }