+++ /dev/null
-package org.argeo.slc.akb.ui.editors;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-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.AkbTypes;
-import org.argeo.slc.akb.ui.AkbUiUtils;
-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.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 FormEditor {
- // private final static Log log = LogFactory
- // .getLog(AbstractEntityEditor.class);
-
- // We use a one session per editor pattern to secure various nodes and
- // changes life cycle
- private Repository repository;
- private Session session;
- private AkbService akbService;
-
- // Business Objects
- private Node akbNode;
- // a template or an active environment
- private Node envNode;
- // shortcut
- private boolean isTemplate;
-
- // Some constants
- private final static int SHORT_NAME_LENGHT = 10;
-
- // 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);
- setInput(input);
- try {
- session = repository.login();
- AkbNodeEditorInput anei = (AkbNodeEditorInput) getEditorInput();
- akbNode = session.getNodeByIdentifier(anei.getIdentifier());
- envNode = session.getNodeByIdentifier(anei.getEnvIdentifier());
- isTemplate = envNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE);
- updatePartNameAndToolTip();
- } catch (RepositoryException e) {
- throw new AkbException("Unable open editor for akb node", e);
- }
- }
-
- /**
- * Overwrite to provide a specific part Name and / or tooltip
- */
- protected void updatePartNameAndToolTip() {
- String name = JcrUtils.get(akbNode, Property.JCR_TITLE);
-
- // Name
- if (AkbJcrUtils.checkNotEmptyString(name)) {
- if (name.length() > SHORT_NAME_LENGHT)
- name = name.substring(0, SHORT_NAME_LENGHT - 1) + "...";
- setPartName(name);
- }
-
- // Tooltip
- if (AkbJcrUtils.isEmptyString(name))
- name = "current akb object";
- if (isTemplate) {
- setTitleToolTip("Display and edit " + name);
- } else
- setTitleToolTip("Display " + name);
-
- }
-
- /** Overwrite to provide supplementary pages between main and history page */
- protected void addOtherPages() throws PartInitException {
- }
-
- /* Pages management */
- @SuppressWarnings("unused")
- @Override
- protected void addPages() {
- try {
- if (isTemplate || akbNode.isNodeType(AkbTypes.AKB_ENV))
- addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
- // Add AKB Type specific pages
- addOtherPages();
- // Use this when versioning is implemented
- // if (isTemplate)
- if (false)
- addPage(new HistoryPage(this, "historyPage", "History"));
- } catch (PartInitException e) {
- throw new AkbException("Unable to initialise pages for editor "
- + getEditorId(), e);
- } catch (RepositoryException 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);
- }
- }
-
- /**
- * Display history
- */
- private class HistoryPage extends FormPage {
-
- public HistoryPage(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));
- Composite parent = form.getBody();
- parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
- getToolkit().createLabel(parent,
- "This page will display history " + "for current AKB Node");
- }
- }
-
- /* EXPOSES TO CHILDREN CLASSES */
- protected Session getSession() {
- return session;
- }
-
- protected AkbService getAkbService() {
- return akbService;
- }
-
- protected Node getAkbNode() {
- return akbNode;
- }
-
- protected Node getEnvNode() {
- return envNode;
- }
-
- protected boolean isTemplate() {
- return isTemplate;
- }
-
- /* LIFE CYCLE MANAGEMENT */
- @Override
- public void dispose() {
- try {
- // if (cNode != null)
- // CommonsJcrUtils.cancelAndCheckin(cNode);
- }
-
- finally {
- JcrUtils.logoutQuietly(session);
- }
- super.dispose();
- }
-
- @Override
- public void doSaveAs() {
- // unused compulsory method
- }
-
- @Override
- public void doSave(IProgressMonitor monitor) {
- 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
- public boolean isDirty() {
- try {
- return session.hasPendingChanges();
- } catch (Exception e) {
- throw new AkbException("Error getting session status.", e);
- }
- }
-
- @Override
- public boolean isSaveAsAllowed() {
- return false;
- }
-
- @Override
- public void setFocus() {
- }
-
- /* DEPENDENCY INJECTION */
- public void setRepository(Repository repository) {
- this.repository = repository;
- }
-
- public void setAkbService(AkbService akbService) {
- this.akbService = akbService;
- }
-}
\ No newline at end of file