Introduce Makefile for Java build
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / viewers / AbstractPageViewer.java
index 004bd943531aa9854c318ac184cecd7a03c3f776..ef24ee0d5021fd729ab8fe3a9b055c3aa9c5e896 100644 (file)
@@ -11,9 +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.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;
@@ -33,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. */
@@ -120,7 +119,7 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ
                }
        }
 
-       protected void layoutPage() {
+       public void layoutPage() {
                if (page != null)
                        page.layout(true, true);
        }
@@ -164,7 +163,8 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ
                                        mouseListener = null;
                                refresh(getControl());
                                // layout(getControl());
-                               layoutPage();
+                               if (!getControl().isDisposed())
+                                       layoutPage();
                        } catch (RepositoryException e) {
                                throw new JcrException("Cannot refresh", e);
                        }
@@ -198,9 +198,9 @@ 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;
 
@@ -239,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 {