package org.argeo.cms.util; import java.util.Map; import javax.jcr.Repository; import javax.jcr.RepositoryException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.AbstractCmsEntryPoint; import org.argeo.cms.CmsException; import org.argeo.cms.CmsImageManager; import org.argeo.cms.CmsStyles; import org.argeo.cms.CmsUiProvider; import org.argeo.cms.UxContext; import org.argeo.cms.ui.internal.ImageManagerImpl; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; /** Simple header/body ergonomics. */ public class SimpleErgonomics extends AbstractCmsEntryPoint { private final static Log log = LogFactory.getLog(SimpleErgonomics.class); private boolean uiInitialized = false; private Composite headerArea; private Composite bodyArea; private final CmsUiProvider uiProvider; private CmsUiProvider header; private Integer headerHeight = 40; private CmsImageManager imageManager = new ImageManagerImpl(); private UxContext uxContext = null; public SimpleErgonomics(Repository repository, String workspace, String defaultPath, CmsUiProvider uiProvider, Map factoryProperties) { super(repository, workspace, defaultPath, factoryProperties); this.uiProvider = uiProvider; } @Override protected void initUi(Composite parent) { parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); parent.setLayout(CmsUtils.noSpaceGridLayout()); // createAdminArea(parent); headerArea = new Composite(parent, SWT.NONE); headerArea.setLayout(new FillLayout()); GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false); headerData.heightHint = headerHeight; headerArea.setLayoutData(headerData); bodyArea = new Composite(parent, SWT.NONE); bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY); bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); bodyArea.setLayout(CmsUtils.noSpaceGridLayout()); uxContext = new SimpleUxContext(); uiInitialized = true; refresh(); } @Override protected void refresh() { if (!uiInitialized) return; if (getState() == null) setState(""); refreshHeader(); refreshBody(); if (log.isTraceEnabled()) log.trace("UI refreshed " + getNode()); } protected void createAdminArea(Composite parent) { } protected void refreshHeader() { for (Control child : headerArea.getChildren()) child.dispose(); try { header.createUi(headerArea, getNode()); } catch (RepositoryException e) { throw new CmsException("Cannot refresh header", e); } headerArea.layout(true, true); } protected void refreshBody() { // Exception Throwable exception = getException(); if (exception != null) { SystemNotifications systemNotifications = new SystemNotifications( bodyArea); systemNotifications.notifyException(exception); resetException(); return; // TODO report } // clear for (Control child : bodyArea.getChildren()) child.dispose(); bodyArea.setLayout(CmsUtils.noSpaceGridLayout()); try { uiProvider.createUi(bodyArea, getNode()); } catch (RepositoryException e) { throw new CmsException("Cannot refresh body", e); } bodyArea.layout(true, true); } @Override public UxContext getUxContext() { return uxContext; } @Override public CmsImageManager getImageManager() { return imageManager; } public void setHeader(CmsUiProvider header) { this.header = header; } public void setHeaderHeight(Integer headerHeight) { this.headerHeight = headerHeight; } public void setImageManager(CmsImageManager imageManager) { this.imageManager = imageManager; } }