/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package com.cisco.yangide.ext.model.editor.editors; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.databinding.Binding; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.databinding.EMFProperties; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.graphiti.ui.services.GraphitiUi; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import com.cisco.yangide.ext.model.BelongsTo; import com.cisco.yangide.ext.model.Import; import com.cisco.yangide.ext.model.ModelFactory; import com.cisco.yangide.ext.model.Module; import com.cisco.yangide.ext.model.Submodule; import com.cisco.yangide.ext.model.Revision; import com.cisco.yangide.ext.model.TaggedNode; import com.cisco.yangide.ext.model.editor.dialog.AddImportDialog; import com.cisco.yangide.ext.model.editor.dialog.ChooseParentModuleDialog; import com.cisco.yangide.ext.model.editor.dialog.MultilineTextDialog; import com.cisco.yangide.ext.model.editor.util.BusinessObjectWrapper; import com.cisco.yangide.ext.model.editor.util.Strings; import com.cisco.yangide.ext.model.editor.util.YangDiagramImageProvider; import com.cisco.yangide.ext.model.editor.util.YangModelUtil; import com.cisco.yangide.ext.model.editor.util.YangTag; import com.cisco.yangide.ext.model.editor.widget.DialogText; public class YangDiagramModuleInfoPanel implements BusinessObjectWrapper<Module> { private Text nameText; private TableViewer importTable; private Module module; private FormToolkit toolkit; private IFile file; private Composite diagram; // private PropertyEdit editPropertyForm; private Text namespaceText; private DialogText parentModuleText; private DialogText organizationText; private DialogText contactText; private Text prefixText; private Text yangVersionText; private DialogText descriptionText; private DialogText referenceText; private TableViewer revisionTable; private SashForm infoPane; private Composite leftPane; private SashForm mainSashPanel; private DataBindingContext bindingContext = new DataBindingContext(); protected class PropertyEdit extends SashForm { private RevisionEdit editRevision; private ImportEdit editImport; protected class RevisionEdit implements BusinessObjectWrapper<Revision> { private Text description; private Text reference; private Text name; private Revision revision; private Composite pane; private List<Binding> dataBindigs = new ArrayList<Binding>(); public RevisionEdit() { // pane = toolkit.createComposite(editPropertyForm, SWT.NONE); createPane(); } protected void createPane() { GridDataFactory.fillDefaults().grab(true, false).applyTo(pane); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(pane); toolkit.createLabel(pane, "Name: "); name = toolkit.createText(pane, ""); GridDataFactory.fillDefaults().grab(true, false).applyTo(name); toolkit.createLabel(pane, "Description: "); description = toolkit.createText(pane, "", SWT.MULTI | SWT.WRAP); GridDataFactory.fillDefaults().grab(true, true).applyTo(description); toolkit.createLabel(pane, "Reference: "); reference = toolkit.createText(pane, "", SWT.MULTI | SWT.WRAP); GridDataFactory.fillDefaults().grab(true, true).applyTo(reference); } protected void addListeneres() { removeBindings(dataBindigs); dataBindigs.clear(); dataBindigs.add(addTextFieldListener(this, reference, YangTag.REFERENCE)); dataBindigs.add(addTextFieldListener(this, description, YangTag.DESCRIPTION)); dataBindigs.add(addTextFieldListener(this, name, YangModelUtil.MODEL_PACKAGE.getNamedNode_Name())); } public void updateData() { if (null != revision) { name.setText(revision.getName()); description.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.DESCRIPTION, revision))); reference.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.REFERENCE, revision))); addListeneres(); } } public Composite getPane(Revision revision) { if (revision != this.revision) { this.revision = revision; updateData(); } return pane; } @Override public Revision getBusinessObject() { return revision; } } protected class ImportEdit implements BusinessObjectWrapper<Import> { private Text name; private Text prefix; private Text revision; private Import importObj; private Composite pane; private List<Binding> dataBindigs = new ArrayList<Binding>(); public ImportEdit() { // pane = toolkit.createComposite(editPropertyForm, SWT.NONE); createPane(); } protected void createPane() { GridLayoutFactory.fillDefaults().numColumns(2).applyTo(pane); GridDataFactory.fillDefaults().grab(true, false).applyTo(pane); toolkit.createLabel(pane, "Name: "); name = toolkit.createText(pane, ""); name.setEditable(false); name.setEnabled(false); GridDataFactory.fillDefaults().grab(true, false).applyTo(name); toolkit.createLabel(pane, "Prefix: "); prefix = toolkit.createText(pane, ""); prefix.setEditable(false); prefix.setEnabled(false); GridDataFactory.fillDefaults().grab(true, false).applyTo(prefix); toolkit.createLabel(pane, "Revision: "); revision = toolkit.createText(pane, ""); revision.setEditable(false); revision.setEnabled(false); GridDataFactory.fillDefaults().grab(true, false).applyTo(revision); } protected void addListeneres() { removeBindings(dataBindigs); dataBindigs.clear(); dataBindigs.add(addTextFieldListener(this, prefix, YangModelUtil.MODEL_PACKAGE.getImport_Prefix())); dataBindigs.add( addTextFieldListener(this, revision, YangModelUtil.MODEL_PACKAGE.getImport_RevisionDate())); } public void updateData() { if (null != importObj) { name.setText(importObj.getModule()); prefix.setText(Strings.getAsString(importObj.getPrefix())); revision.setText(Strings.getAsString(importObj.getRevisionDate())); addListeneres(); } } public Composite getPane(Import importObj) { if (importObj != this.importObj) { this.importObj = importObj; updateData(); } return pane; } @Override public Import getBusinessObject() { return importObj; } } public PropertyEdit(Composite parent) { super(parent, SWT.HORIZONTAL); GridDataFactory.fillDefaults().grab(true, false).applyTo(this); setLayout(new GridLayout(1, false)); } public void setRevision(Revision revision) { if (null == editRevision) { editRevision = new RevisionEdit(); } setMaximizedControl(editRevision.getPane(revision)); } public void setImport(Import importObj) { if (null == editImport) { editImport = new ImportEdit(); } setMaximizedControl(editImport.getPane(importObj)); } } public YangDiagramModuleInfoPanel(Composite parent, Module module, IFile file) { this.module = module; this.file = file; mainSashPanel = new SashForm(parent, SWT.HORIZONTAL); mainSashPanel.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); mainSashPanel.setLayout(new GridLayout(1, false)); leftPane = new Composite(mainSashPanel, SWT.NONE); diagram = new Composite(mainSashPanel, SWT.NONE); GridLayoutFactory.fillDefaults().applyTo(diagram); GridDataFactory.fillDefaults().grab(false, true).hint(200, -1).applyTo(leftPane); GridLayoutFactory.fillDefaults().applyTo(leftPane); createModuleInfoPanel(leftPane); GridDataFactory.fillDefaults().grab(true, true).applyTo(diagram); setPropertiesPaneVisible(false); parent.layout(); final Point leftSize = leftPane.computeSize(-1, -1); leftPane.addControlListener(new ControlListener() { @Override public void controlResized(ControlEvent e) { Point size = leftPane.getSize(); if (Math.abs(leftSize.x - size.x) > 5) { leftSize.x = size.x; } } @Override public void controlMoved(ControlEvent e) { // TODO Auto-generated method stub } }); mainSashPanel.addControlListener(new ControlListener() { @Override public void controlResized(ControlEvent e) { Point area = mainSashPanel.getSize(); int x = Math.min(leftSize.x, leftPane.computeSize(leftSize.x, -1).x); mainSashPanel.setWeights(new int[] { x, area.x - x }); } @Override public void controlMoved(ControlEvent e) { // TODO Auto-generated method stub } }); } protected void createModuleInfoPanel(Composite parent) { toolkit = new FormToolkit(parent.getDisplay()); toolkit.adapt(parent); ScrolledForm mainForm = toolkit.createScrolledForm(parent); GridDataFactory.fillDefaults().grab(true, true).applyTo(mainForm); mainForm.setText("Module Info"); toolkit.decorateFormHeading(mainForm.getForm()); GridLayoutFactory.swtDefaults().applyTo(mainForm.getBody()); infoPane = new SashForm(mainForm.getBody(), SWT.HORIZONTAL); GridDataFactory.fillDefaults().grab(true, true).applyTo(infoPane); toolkit.adapt(infoPane); infoPane.setLayout(new FillLayout(SWT.VERTICAL)); // pane = toolkit.createScrolledForm(infoPane); Composite pane = toolkit.createComposite(infoPane); GridLayoutFactory.fillDefaults().applyTo(pane); GridDataFactory.fillDefaults().grab(true, true).applyTo(pane); // ScrolledForm editForm = toolkit.createScrolledForm(infoPane); // GridDataFactory.fillDefaults().grab(true, true).applyTo(editForm); // // GridLayoutFactory.fillDefaults().applyTo(editForm.getBody()); // Section editSection = createSection(editForm, "Properties", Section.TITLE_BAR | // Section.EXPANDED); // GridDataFactory.fillDefaults().grab(true, false).applyTo(editSection); // editPropertyForm = new PropertyEdit(editSection); // toolkit.adapt(editPropertyForm); // editSection.setClient(editPropertyForm); createGeneralSection(pane); if (module instanceof Submodule) { createBelongsToSection(pane); } createRevisionSection(pane); createImportSection(pane); createMetaInfoSection(pane); // infoPane.setWeights(new int[] { 1, 0 }); // infoPane.setMaximizedControl(pane); // createPropertiesButtonToolbar(editSection, infoPane, pane); // mainForm.pack(); // mainForm.reflow(true); } protected void setPropertiesPaneVisible(boolean set) { // if (set) { // infoPane.setWeights(new int[] { 1, 1 }); // infoPane.setMaximizedControl(null); // mainSashPanel.setWeights(new int[] { 4, 6 }); // // } else { // infoPane.setWeights(new int[] { 1, 0 }); // infoPane.setMaximizedControl(pane); // mainSashPanel.setWeights(new int[] { 2, 6 }); // } } protected void createPropertiesButtonToolbar(final Section editSection, final SashForm infoPane, final ScrolledForm pane) { ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT); ToolBar toolbar = toolBarManager.createControl(editSection); toolbar.setCursor(Display.getDefault().getSystemCursor(SWT.CURSOR_HAND)); Action closeButton = new Action("Close properties section", IAction.AS_CHECK_BOX) { @Override public void run() { super.run(); setChecked(false); setPropertiesPaneVisible(false); } }; closeButton.setImageDescriptor( GraphitiUi.getImageService().getImageDescriptorForId(YangDiagramImageProvider.DIAGRAM_TYPE_PROVIDER_ID, YangDiagramImageProvider.IMG_COLLAPSE_ALL_TOOL_PROPOSAL)); closeButton.setEnabled(true); toolBarManager.add(closeButton); toolBarManager.update(true); editSection.setTextClient(toolbar); } protected void createMetaInfoSection(Composite parent) { Section section = createSection(parent, "Meta information"); Composite meta = toolkit.createComposite(section); GridLayoutFactory.swtDefaults().numColumns(2).applyTo(meta); GridDataFactory.fillDefaults().hint(100, -1).grab(true, false).applyTo(section); toolkit.createLabel(meta, "Organization: "); organizationText = new DialogText(meta, toolkit) { @Override protected Object openDialogBox(Text text) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MultilineTextDialog dialog = new MultilineTextDialog(shell, Strings.getAsString(text.getText()), "Organization"); if (IStatus.OK == dialog.open()) { text.setText(dialog.getValue()); } return null; } }; toolkit.createLabel(meta, "Contact: "); contactText = new DialogText(meta, toolkit) { @Override protected Object openDialogBox(Text text) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MultilineTextDialog dialog = new MultilineTextDialog(shell, Strings.getAsString(text.getText()), "Contact"); if (IStatus.OK == dialog.open()) { text.setText(dialog.getValue()); } return null; } }; toolkit.createLabel(meta, "Description: "); descriptionText = new DialogText(meta, toolkit) { @Override protected Object openDialogBox(Text text) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MultilineTextDialog dialog = new MultilineTextDialog(shell, Strings.getAsString(text.getText()), "Description"); if (IStatus.OK == dialog.open()) { text.setText(dialog.getValue()); } return null; } }; toolkit.createLabel(meta, "Reference: "); referenceText = new DialogText(meta, toolkit) { @Override protected Object openDialogBox(Text text) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MultilineTextDialog dialog = new MultilineTextDialog(shell, Strings.getAsString(text.getText()), "Reference"); if (IStatus.OK == dialog.open()) { text.setText(dialog.getValue()); } return null; } }; updateMetaInfoSection(); addMetaInfoSectionListeners(); section.setClient(meta); } protected void createGeneralSection(Composite parent) { Section section = createSection(parent, "General"); Composite header = toolkit.createComposite(section); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(header); GridDataFactory.fillDefaults().grab(true, false).applyTo(section); toolkit.createLabel(header, "Name: "); nameText = toolkit.createText(header, ""); nameText.setEditable(true); GridDataFactory.fillDefaults().hint(100, -1).grab(true, false).applyTo(nameText); toolkit.createLabel(header, "Yang-version: "); yangVersionText = toolkit.createText(header, ""); yangVersionText.setEditable(true); GridDataFactory.fillDefaults().hint(100, -1).grab(true, false).applyTo(yangVersionText); if (!(module instanceof Submodule)) { toolkit.createLabel(header, "Namespace: "); namespaceText = toolkit.createText(header, ""); namespaceText.setEditable(true); GridDataFactory.fillDefaults().hint(100, -1).grab(true, false).applyTo(namespaceText); toolkit.createLabel(header, "Prefix: "); prefixText = toolkit.createText(header, ""); prefixText.setEditable(true); GridDataFactory.fillDefaults().hint(100, -1).grab(true, false).applyTo(prefixText); } updateGeneralSection(); addGeneralSectionListeners(); section.setClient(header); } protected void updateMetaInfoSection() { if (null != module) { organizationText.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.ORGANIZATION, module))); contactText.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.CONTACT, module))); descriptionText.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.DESCRIPTION, module))); referenceText.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.REFERENCE, module))); } } protected void updateGeneralSection() { if (null != module) { nameText.setText(module.getName()); yangVersionText.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.YANG_VERSION, module))); if (!(module instanceof Submodule)) { namespaceText.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.NAMESPACE, module))); prefixText.setText(Strings.getAsString(YangModelUtil.getValue(YangTag.PREFIX, module))); } } } protected void addMetaInfoSectionListeners() { addTextFieldListener(this, organizationText.getTextControl(), YangTag.ORGANIZATION); addTextFieldListener(this, contactText.getTextControl(), YangTag.CONTACT); addTextFieldListener(this, descriptionText.getTextControl(), YangTag.DESCRIPTION); addTextFieldListener(this, referenceText.getTextControl(), YangTag.REFERENCE); } protected void addGeneralSectionListeners() { addTextFieldListener(this, nameText, YangModelUtil.MODEL_PACKAGE.getNamedNode_Name()); addTextFieldListener(this, yangVersionText, YangTag.YANG_VERSION); if (!(module instanceof Submodule)) { addTextFieldListener(this, namespaceText, YangTag.NAMESPACE); addTextFieldListener(this, prefixText, YangTag.PREFIX); } } protected void removeBindings(List<Binding> bindings) { for (Binding b : bindings) { b.updateTargetToModel(); bindingContext.removeBinding(b); } } protected Binding addTextFieldListener(final BusinessObjectWrapper<? extends TaggedNode> node, Control text, final YangTag tag) { return bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observeDelayed(200, text), EMFProperties.value(YangModelUtil.MODEL_PACKAGE.getTag_Value()) .observe(YangModelUtil.getTag(tag, node.getBusinessObject()))); } protected Binding addTextFieldListener(final BusinessObjectWrapper<? extends EObject> node, final Text text, final EStructuralFeature esf) { return bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observeDelayed(200, text), EMFProperties.value(esf).observe(node.getBusinessObject())); } protected void createBelongsToSection(final Composite parent) { Section section = createSection(parent, "Belongs to"); Composite belongsTo = toolkit.createComposite(section); GridDataFactory.fillDefaults().grab(true, false).applyTo(belongsTo); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(belongsTo); toolkit.createLabel(belongsTo, "Module: "); parentModuleText = new DialogText(belongsTo, toolkit) { @Override protected Object openDialogBox(Text text) { ChooseParentModuleDialog dialog = new ChooseParentModuleDialog(parent.getShell(), (Submodule) module, file); if (IStatus.OK == dialog.open()) { updateBelongsTo(); } return null; } }; GridDataFactory.fillDefaults().grab(true, true).applyTo(parentModuleText.getControl()); updateBelongsTo(); section.setClient(belongsTo); } protected void updateBelongsTo() { if (null != module && module instanceof Submodule) { Submodule submodule = ((Submodule) module); String text = Strings.EMPTY_STRING; BelongsTo belongsTo = submodule.getBelongsTo(); if (belongsTo != null) { Module ownerModule = belongsTo.getOwnerModule(); if (ownerModule != null) { String parentModuleName = ownerModule.getName(); String parentPrefix = Strings.getAsString(YangModelUtil.getValue(YangTag.PREFIX, ownerModule)); text = parentPrefix + " : " + parentModuleName; } } parentModuleText.setText(text); } } protected void createRevisionSection(Composite parent) { Section section = createSection(parent, "Revision"); Composite revisions = toolkit.createComposite(section); // Temporary code GridDataFactory.fillDefaults().grab(true, false).applyTo(revisions); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(revisions); toolkit.createLabel(revisions, "Name: "); Text name = toolkit.createText(revisions, ""); GridDataFactory.fillDefaults().grab(true, false).applyTo(name); toolkit.createLabel(revisions, "Description: "); final DialogText description = new DialogText(revisions, toolkit) { @Override protected Object openDialogBox(Text text) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MultilineTextDialog dialog = new MultilineTextDialog(shell, Strings.getAsString(text.getText()), "Description"); if (IStatus.OK == dialog.open()) { text.setText(dialog.getValue()); } return null; } }; GridDataFactory.fillDefaults().grab(true, true).applyTo(description.getControl()); toolkit.createLabel(revisions, "Reference: "); DialogText reference = new DialogText(revisions, toolkit) { @Override protected Object openDialogBox(Text text) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); MultilineTextDialog dialog = new MultilineTextDialog(shell, Strings.getAsString(text.getText()), "Reference"); if (IStatus.OK == dialog.open()) { text.setText(dialog.getValue()); } return null; } }; GridDataFactory.fillDefaults().grab(true, true).applyTo(reference.getControl()); if (null != module) { if (module.getRevisions().isEmpty()) { module.getRevisions().add(ModelFactory.eINSTANCE.createRevision()); } Revision revision = module.getRevisions().get(0); Binding binding = bindingContext.bindValue(WidgetProperties.text(SWT.Modify).observeDelayed(200, name), EMFProperties.value(YangModelUtil.MODEL_PACKAGE.getNamedNode_Name()).observe(revision)); binding.updateModelToTarget(); binding = bindingContext.bindValue( WidgetProperties.text(SWT.Modify).observeDelayed(200, description.getTextControl()), EMFProperties.value(YangModelUtil.MODEL_PACKAGE.getTag_Value()) .observe(YangModelUtil.getTag(YangTag.DESCRIPTION, revision))); binding.updateModelToTarget(); binding = bindingContext.bindValue( WidgetProperties.text(SWT.Modify).observeDelayed(200, reference.getTextControl()), EMFProperties.value(YangModelUtil.MODEL_PACKAGE.getTag_Value()) .observe(YangModelUtil.getTag(YangTag.REFERENCE, revision))); binding.updateModelToTarget(); } // end of Temporary code /* * GridLayoutFactory.swtDefaults().applyTo(revisions); * GridDataFactory.fillDefaults().grab(true, false).applyTo(section); * * createRevisionTable(revisions); refreshRevisionTable(); * revisionTable.addSelectionChangedListener(new ISelectionChangedListener() { * * @Override public void selectionChanged(SelectionChangedEvent event) { if * (revisionTable.getSelection() instanceof IStructuredSelection) { Object selected = * ((IStructuredSelection) revisionTable.getSelection()).getFirstElement(); if (null != * selected && selected instanceof Revision) { // editPropertyForm.setRevision((Revision) * selected); setPropertiesPaneVisible(true); } } * * } }); */ section.setClient(revisions); } protected void createImportSection(Composite parent) { final Section section = createSection(parent, "Imports"); Composite imports = toolkit.createComposite(section); GridLayoutFactory.swtDefaults().applyTo(imports); GridDataFactory.fillDefaults().grab(true, false).applyTo(section); createImportTable(imports); createImportButtonToolbar(section); updateImportTable(); importTable.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { Object selected = ((IStructuredSelection) importTable.getSelection()).getFirstElement(); if (null != selected && selected instanceof Import) { // editPropertyForm.setImport((Import) selected); setPropertiesPaneVisible(true); } } }); section.setClient(imports); } protected Composite createImportTable(Composite parent) { final Table t = toolkit.createTable(parent, SWT.FULL_SELECTION | SWT.V_SCROLL); t.setLinesVisible(false); t.setHeaderVisible(false); GridDataFactory.fillDefaults().grab(true, true).applyTo(t); importTable = new TableViewer(t); importTable.setContentProvider(new ArrayContentProvider()); final TableViewerColumn col = new TableViewerColumn(importTable, SWT.NONE); col.setLabelProvider(new ColumnLabelProvider() { @Override public Image getImage(Object element) { return GraphitiUi.getImageService().getImageForId(YangDiagramImageProvider.DIAGRAM_TYPE_PROVIDER_ID, YangDiagramImageProvider.IMG_IMPORT_PROPOSAL); } @Override public String getText(Object element) { if (YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getImport(), element)) { return ((Import) element).getPrefix() + " : " + ((Import) element).getModule(); } return super.getText(element); } }); t.addControlListener(new ControlListener() { @Override public void controlResized(ControlEvent e) { col.getColumn().setWidth(t.getSize().x - 30); } @Override public void controlMoved(ControlEvent e) { } }); col.getColumn().setWidth(t.getSize().x - 30); return t; } protected void createImportButtonToolbar(Section section) { ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT); ToolBar toolbar = toolBarManager.createControl(section); toolbar.setCursor(Display.getDefault().getSystemCursor(SWT.CURSOR_HAND)); Action addButton = new Action("Add new import", IAction.AS_CHECK_BOX) { @Override public void run() { super.run(); Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); AddImportDialog dialog = new AddImportDialog(shell, module, file); if (0 <= dialog.open()) { YangModelUtil.add(module, dialog.getResultImport(), module.getChildren().size()); updateImportTable(); } setChecked(false); } }; addButton.setImageDescriptor(GraphitiUi.getImageService().getImageDescriptorForId( YangDiagramImageProvider.DIAGRAM_TYPE_PROVIDER_ID, YangDiagramImageProvider.IMG_ADD_TOOL_PROPOSAL)); addButton.setEnabled(true); toolBarManager.add(addButton); Action deleteButton = new Action("Delete selected import", IAction.AS_CHECK_BOX) { @SuppressWarnings("unchecked") @Override public void run() { super.run(); if (importTable.getSelection() instanceof IStructuredSelection) { Iterator<Object> iter = ((IStructuredSelection) importTable.getSelection()).iterator(); while (iter.hasNext()) { module.getChildren().remove(iter.next()); } updateImportTable(); setChecked(false); } } }; deleteButton.setImageDescriptor(GraphitiUi.getImageService().getImageDescriptorForId( YangDiagramImageProvider.DIAGRAM_TYPE_PROVIDER_ID, YangDiagramImageProvider.IMG_DELETE_TOOL_PROPOSAL)); deleteButton.setEnabled(true); toolBarManager.add(deleteButton); toolBarManager.update(true); section.setTextClient(toolbar); } public void update() { updateImportTable(); updateBelongsTo(); } protected void updateImportTable() { if (null != module) { importTable.setInput(YangModelUtil.filter(module.getChildren(), YangModelUtil.MODEL_PACKAGE.getImport())); } } protected void refreshRevisionTable() { if (null != module) { revisionTable.setInput(module.getRevisions()); } } protected Section createSection(Composite parent, String title) { return createSection(parent, title, Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED); } protected Section createSection(final Composite parent, String title, int styles) { Section section = toolkit.createSection(parent, styles); GridLayoutFactory.fillDefaults().applyTo(section); GridDataFactory.fillDefaults().grab(true, false).applyTo(section); section.setText(title); section.addExpansionListener(new ExpansionAdapter() { @Override public void expansionStateChanged(ExpansionEvent e) { parent.layout(); } }); return section; } public Composite getDiagram() { return diagram; } @Override public Module getBusinessObject() { return module; } }