/** * Copyright 2010 The University of North Carolina at Chapel Hill * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package unc.lib.cdr.workbench.acl; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.edit.command.AddCommand; import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.forms.DetailsPart; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.MasterDetailsBlock; import org.eclipse.ui.forms.SectionPart; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import unc.lib.cdr.workbench.project.MetsProjectNature; import edu.unc.lib.schemas.acl.AclFactory; import edu.unc.lib.schemas.acl.AclPackage; import edu.unc.lib.schemas.acl.GrantType; import edu.unc.lib.schemas.acl.impl.GrantTypeImpl; /** * @author Gregory Jansen * */ public class ScrolledPropertiesBlock extends MasterDetailsBlock implements ISelectionChangedListener { private AccessControlFormPage page; private TreeViewer viewer; private SelectionChangedEvent selectionEvent; boolean debug = false; // true for console debug output public AdapterFactoryTreeEditor ADFTE; public ScrolledPropertiesBlock(AccessControlFormPage page) { this.page = page; } /* * (non-Javadoc) * * @see org.eclipse.ui.forms.MasterDetailsBlock#createMasterPart(org.eclipse. ui.forms.IManagedForm, * org.eclipse.swt.widgets.Composite) */ @Override protected void createMasterPart(final IManagedForm managedForm, Composite parent) { FormToolkit toolkit = managedForm.getToolkit(); Section section = toolkit.createSection(parent, Section.TITLE_BAR); section.setText("Roles Granted"); //$NON-NLS-1$ section.marginWidth = 10; section.marginHeight = 5; Label descriptionLabel = new Label(section, SWT.WRAP); descriptionLabel.setText("Add, edit or remove the roles granted at this level."); //$NON-NLS-1$ section.setDescriptionControl(descriptionLabel); Composite client = toolkit.createComposite(section, SWT.WRAP); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginWidth = 2; layout.marginHeight = 2; client.setLayout(layout); Tree tr = null; tr = toolkit.createTree(client, SWT.NULL); // Table t = toolkit.createTable(client, SWT.NULL); GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 100; // was 20 gd.widthHint = 100; gd.verticalSpan = 2; tr.setLayoutData(gd); toolkit.paintBordersFor(client); Button addB = toolkit.createButton(client, "Add", SWT.PUSH); //$NON-NLS-1$ gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); addB.setLayoutData(gd); addB.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { GrantType newGrant = AclFactory.eINSTANCE.createGrantType(); newGrant.setGroup("public"); newGrant.setRole("patron"); Command cmd = AddCommand.create(MetsProjectNature.getEditingDomain(page.model), page.model, AclPackage.eINSTANCE.getAccessControlType_Grant(), newGrant); if(cmd.canExecute()) { MetsProjectNature.getNatureForMetsObject(page.model).getCommandStack().execute(cmd); } viewer.refresh(); } }); Button delB = toolkit.createButton(client, "Remove", SWT.PUSH); //$NON-NLS-1$ gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); delB.setLayoutData(gd); delB.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ITreeSelection sel = (ITreeSelection) viewer.getSelection(); if (!sel.isEmpty()) { Object o = sel.getFirstElement(); if (o instanceof GrantType) { GrantType g = (GrantType) o; Command cmd = RemoveCommand.create(MetsProjectNature.getEditingDomain(page.model), page.model, AclPackage.eINSTANCE.getAccessControlType_Grant(), g); if(cmd.canExecute()) { MetsProjectNature.getNatureForMetsObject(page.model).getCommandStack().execute(cmd); } } } viewer.refresh(); } }); section.setClient(client); final SectionPart spart = new SectionPart(section); managedForm.addPart(spart); viewer = new TreeViewer(tr); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { managedForm.fireSelectionChanged(spart, event.getSelection()); } }); viewer.setContentProvider(new AdapterFactoryContentProvider(MetsProjectNature.getAdapterFactory())); viewer.setLabelProvider(new AdapterFactoryLabelProvider(MetsProjectNature.getAdapterFactory())); page.getSite().setSelectionProvider(viewer); ADFTE = new AdapterFactoryTreeEditor(viewer.getTree(), MetsProjectNature.getAdapterFactory()); viewer.setInput(page.model); viewer.addSelectionChangedListener(this); } /* * (non-Javadoc) * * @see org.eclipse.ui.forms.MasterDetailsBlock#registerPages(org.eclipse.ui. forms.DetailsPart) */ @Override protected void registerPages(DetailsPart detailsPart) { detailsPart.registerPage(GrantTypeImpl.class, new GrantTypeDetailsPage()); } /* * (non-Javadoc) * * @see org.eclipse.ui.forms.MasterDetailsBlock#createToolBarActions(org.eclipse .ui.forms.IManagedForm) */ @Override protected void createToolBarActions(IManagedForm managedForm) { final ScrolledForm form = managedForm.getForm(); Action haction = new Action("horizontal", Action.AS_RADIO_BUTTON) { @Override public void run() { sashForm.setOrientation(SWT.HORIZONTAL); form.reflow(true); } }; haction.setChecked(true); haction.setToolTipText("Horizontal orientation"); /* * haction.setImageDescriptor(Bd7Plugin.getDefault() .getImageRegistry() * .getDescriptor(Bd7Plugin.IMG_HORIZONTAL)); */ Action vaction = new Action("vertical", Action.AS_RADIO_BUTTON) { @Override public void run() { sashForm.setOrientation(SWT.VERTICAL); form.reflow(true); } }; vaction.setChecked(false); vaction.setToolTipText("Vertical orientation"); /* * vaction.setImageDescriptor(Bd7Plugin.getDefault() .getImageRegistry().getDescriptor(Bd7Plugin.IMG_VERTICAL)); */ form.getToolBarManager().add(haction); form.getToolBarManager().add(vaction); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged( * org.eclipse.jface.viewers.SelectionChangedEvent) */ @Override public void selectionChanged(SelectionChangedEvent event) { this.selectionEvent = event; } }