X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Forg.argeo.slc.akb.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fakb%2Fui%2Feditors%2FAbstractAkbNodeEditor.java;fp=plugins%2Forg.argeo.slc.akb.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fakb%2Fui%2Feditors%2FAbstractAkbNodeEditor.java;h=7eb74bb5ee3a84c998ccf64a43f9e3c248a9c7fa;hb=cce1ca8a555b41f6ca0a77ab549a5e1461f2bb15;hp=cc7c8ddea52eeca8110a661344ffa72042b34908;hpb=93ad856792ccb84b534b2226e602c6b652799933;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java index cc7c8ddea..7eb74bb5e 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java @@ -8,18 +8,25 @@ import javax.jcr.Session; import org.argeo.jcr.JcrUtils; import org.argeo.slc.akb.AkbException; +import org.argeo.slc.akb.AkbService; import org.argeo.slc.akb.utils.AkbJcrUtils; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; -import org.eclipse.ui.part.EditorPart; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.editor.FormEditor; +import org.eclipse.ui.forms.editor.FormPage; +import org.eclipse.ui.forms.widgets.ScrolledForm; /** * Parent Abstract Node editor for AKB. Manage life cycle of the JCR session * that is bound to it. */ -public abstract class AbstractAkbNodeEditor extends EditorPart { +public abstract class AbstractAkbNodeEditor extends FormEditor { // private final static Log log = LogFactory // .getLog(AbstractEntityEditor.class); @@ -27,6 +34,7 @@ public abstract class AbstractAkbNodeEditor extends EditorPart { // changes life cycle private Repository repository; private Session session; + private AkbService akbService; // Business Objects private Node akbNode; @@ -34,7 +42,12 @@ public abstract class AbstractAkbNodeEditor extends EditorPart { // Some constants private final static int SHORT_NAME_LENGHT = 10; - // LIFE CYCLE + // to implement methods + protected abstract String getEditorId(); + + protected abstract void populateMainPage(Composite parent, + IManagedForm managedForm); + public void init(IEditorSite site, IEditorInput input) throws PartInitException { setSite(site); @@ -68,11 +81,50 @@ public abstract class AbstractAkbNodeEditor extends EditorPart { setTitleToolTip("Display and edit " + name); } + /* Pages management */ + @Override + protected void addPages() { + try { + addPage(new ConnectorAliasPage(this, "mainPage", "Main")); + // TODO Add history page + // addPage(new ConnectorAliasPage(this, "mainPage", "Main")); + } catch (PartInitException e) { + throw new AkbException("Unable to initialise pages for editor " + + getEditorId(), e); + } + } + + /** + * Display and edit info + */ + private class ConnectorAliasPage extends FormPage { + + public ConnectorAliasPage(FormEditor editor, String id, String title) { + super(editor, id, title); + } + + protected void createFormContent(IManagedForm managedForm) { + super.createFormContent(managedForm); + ScrolledForm form = managedForm.getForm(); + form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + populateMainPage(form.getBody(), managedForm); + } + } + /* EXPOSES TO CHILDREN CLASSES */ protected Session getSession() { return session; } + protected AkbService getAkbService() { + return akbService; + } + + protected Node getAkbNode() { + return akbNode; + } + + /* LIFE CYCLE MANAGEMENT */ @Override public void dispose() { try { @@ -93,7 +145,15 @@ public abstract class AbstractAkbNodeEditor extends EditorPart { @Override public void doSave(IProgressMonitor monitor) { - throw new AkbException("Implement this"); + try { + if (getSession().hasPendingChanges()) + JcrUtils.updateLastModified(getAkbNode()); + getSession().save(); + updatePartNameAndToolTip(); + this.firePropertyChange(PROP_DIRTY); + } catch (Exception e) { + throw new AkbException("Error getting session status.", e); + } } @Override @@ -118,4 +178,8 @@ public abstract class AbstractAkbNodeEditor extends EditorPart { public void setRepository(Repository repository) { this.repository = repository; } + + public void setAkbService(AkbService akbService) { + this.akbService = akbService; + } } \ No newline at end of file