Package tool.editors.cdf

Source Code of tool.editors.cdf.ClassEditor

package tool.editors.cdf;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Set;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.ExpandBar;
import org.eclipse.swt.widgets.ExpandItem;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.wb.swt.ResourceManager;

import tool.ToolPlugin;
import tool.action.cdf.OpenClassComponentAction;
import tool.model.IClassComponent;
import tool.model.ToolClass;
import tool.model.ToolClass.ClassProperty;
import tool.model.ToolComponent;
import tool.model.ToolType;
import tool.model.validation.ToolNameValidator;
import tool.navigator.cdf.CdfContentProvider;
import tool.navigator.common.LabelProvider;
import tool.search.SelectType;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;

public class ClassEditor extends FormPage implements PropertyChangeListener{
  public static final String ID = "tool.editors.cdf.ClassEditor";
  private static final Image CHECKED = ToolPlugin.getImage("icons/checked.gif");
  private static final Image UNCHECKED = ToolPlugin.getImage("icons/unchecked.gif");

  private DataBindingContext m_bindingContext;

  ToolClass cdf;
 
    private Text classNameText;
    private Text superClassText;
    private Table table;
  private TableViewer tableViewer;
  private TreeViewer treeViewer;
  private ListViewer listViewer;
  private Button addButton;
  private Button removeButton;
  private Text planNameText;
  private TabItem tbtmName;

    public ClassEditor(){
      this(ID, "Class");
    }

    public ClassEditor(FormEditor editor, String id, String title) {
    super(editor, id, title);
  }

  public ClassEditor(String id, String title) {
    super(id, title);
  }

  @Override
  public void createPartControl(Composite parent) {
    parent.setLayout(new GridLayout(1, false));
   
    TabFolder tabFolder = new TabFolder(parent, SWT.NONE);
   
    tbtmName = new TabItem(tabFolder, SWT.NONE);
    tbtmName.setImage(ResourceManager.getPluginImage("Tool", "icons/class.gif"));
    tbtmName.setText("Name");
    Composite nameComposite = new Composite(tabFolder, SWT.NONE);
    tbtmName.setControl(nameComposite);
    GridLayout gl_nameComposite = new GridLayout(3, false);
    gl_nameComposite.horizontalSpacing = 8;
    nameComposite.setLayout(gl_nameComposite);
   
    Label lblPlanName = new Label(nameComposite, SWT.NONE);
    lblPlanName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblPlanName.setText("Plan Name");
   
    planNameText = new Text(nameComposite, SWT.BORDER);
    planNameText.setEditable(false);
    GridData gd_planNameText = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_planNameText.widthHint = 224;
    planNameText.setLayoutData(gd_planNameText);
    new Label(nameComposite, SWT.NONE);
   
    Label lblName = new Label(nameComposite, SWT.NONE);
    lblName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblName.setText("Class Name");
   
    classNameText = new Text(nameComposite, SWT.BORDER);
    GridData gd_classNameText = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_classNameText.widthHint = 224;
    classNameText.setLayoutData(gd_classNameText);
    new Label(nameComposite, SWT.NONE);
   
    Label lblSuperClass = new Label(nameComposite, SWT.NONE);
    lblSuperClass.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblSuperClass.setText("Super class");
   
    superClassText = new Text(nameComposite, SWT.BORDER);
    GridData gd_superClassText = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_superClassText.widthHint = 226;
    superClassText.setLayoutData(gd_superClassText);
   
    Button lookupButton = new Button(nameComposite, SWT.NONE);
    lookupButton.setImage(ResourceManager.getPluginImage("Tool", "icons/look_up.gif"));
    lookupButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        ToolComponent superClass = getCdf().getToolSuperClass();
        ToolType newClass = (ToolType) SelectType.select(cdf, superClass);
        cdf.setSuperClass(newClass.getFullName());
      }
    });
    lookupButton.setToolTipText("Lookup Super Class");
   
    TabItem tbtmProperties = new TabItem(tabFolder, SWT.NONE);
    tbtmProperties.setImage(ResourceManager.getPluginImage("Tool", "icons/properties.gif"));
    tbtmProperties.setText("Properties");
   
    Composite propsComposite = new Composite(tabFolder, SWT.NONE);
    tbtmProperties.setControl(propsComposite);
   
    tableViewer = new TableViewer(propsComposite, SWT.BORDER | SWT.FULL_SELECTION);
    table = tableViewer.getTable();
    table.setSize(291, 86);
    table.setLinesVisible(true);
    table.setHeaderVisible(true);
   
       
        TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
        tableViewerColumn.setLabelProvider(new ColumnLabelProvider(){
          @Override
          public String getText(Object element) {
            ClassProperty cp = (ClassProperty)element;
            return cp.name;
          }
        });
        TableColumn tblclmnName = tableViewerColumn.getColumn();
        tblclmnName.setResizable(false);
        tblclmnName.setWidth(120);
        tblclmnName.setText("Name");
       
        TableViewerColumn tableViewerColumn_1 = new TableViewerColumn(tableViewer, SWT.NONE);
        tableViewerColumn_1.setLabelProvider(new ColumnLabelProvider(){
          @Override
          public String getText(Object element) {
            return null;
          }

          @Override
          public Image getImage(Object element) {
            if (((ClassProperty) element).allow) {
              return CHECKED;
            } else {
              return UNCHECKED;
            }
          }
        });
        TableColumn tblclmnAllow = tableViewerColumn_1.getColumn();
        tblclmnAllow.setResizable(false);
        tblclmnAllow.setWidth(50);
        tblclmnAllow.setText("Allow");
       
        TableViewerColumn tableViewerColumn_2 = new TableViewerColumn(tableViewer, SWT.NONE);
        tableViewerColumn_2.setLabelProvider(new ColumnLabelProvider(){
          @Override
          public String getText(Object element) {
            return null;
          }

          @Override
          public Image getImage(Object element) {
            if (((ClassProperty) element).override) {
              return CHECKED;
            } else {
              return UNCHECKED;
            }
          }
        });
        TableColumn tblclmnOverride = tableViewerColumn_2.getColumn();
        tblclmnOverride.setResizable(false);
        tblclmnOverride.setWidth(50);
        tblclmnOverride.setText("Override");
       
        TableViewerColumn tableViewerColumn_3 = new TableViewerColumn(tableViewer, SWT.NONE);
        tableViewerColumn_3.setLabelProvider(new ColumnLabelProvider(){
          @Override
          public String getText(Object element) {
            return null;
          }

          @Override
          public Image getImage(Object element) {
            if (((ClassProperty) element).def) {
              return CHECKED;
            } else {
              return UNCHECKED;
            }
          }
        });
        TableColumn tblclmnDefault = tableViewerColumn_3.getColumn();
        tblclmnDefault.setWidth(50);
        tblclmnDefault.setText("Default");
       
        TabItem tbtmInterfaces = new TabItem(tabFolder, SWT.NONE);
        tbtmInterfaces.setImage(ResourceManager.getPluginImage("Tool", "icons/interface.gif"));
        tbtmInterfaces.setText("Interfaces Implemented");
       
        Composite interfaceComposite = new Composite(tabFolder, SWT.NONE);
        tbtmInterfaces.setControl(interfaceComposite);
        interfaceComposite.setLayout(new GridLayout(2, false));
       
        listViewer = new ListViewer(interfaceComposite, SWT.BORDER | SWT.V_SCROLL);
        listViewer.setSorter(new ViewerSorter());
        List list = listViewer.getList();
        GridData gd_list = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_list.widthHint = 284;
        list.setLayoutData(gd_list);
        list.setSize(238, 111);
        listViewer.setContentProvider(new IStructuredContentProvider() {
          public Object[] getElements(Object inputElement) {
            return ((Set<?>)inputElement).toArray();
          }

          public void dispose() {
            System.out.println("Disposing ...");
          }

          public void inputChanged(
              Viewer viewer,
              Object oldInput,
              Object newInput) {
            System.out.println("Input changed: old=" + oldInput + ", new=" + newInput);
          }
        });
        listViewer.setLabelProvider(new LabelProvider());
        Composite buttonComposite = new Composite(interfaceComposite, SWT.NONE);
        //buttonComposite.setSize(51, 46);
        buttonComposite.setCapture(true);
        GridLayout gl_buttonComposite = new GridLayout(1, false);
        gl_buttonComposite.verticalSpacing = 0;
        gl_buttonComposite.marginWidth = 0;
        gl_buttonComposite.horizontalSpacing = 0;
        gl_buttonComposite.marginHeight = 0;
        buttonComposite.setLayout(gl_buttonComposite);
       
        addButton = new Button(buttonComposite, SWT.NONE);
        addButton.setBounds(0, 0, 94, 30);
        addButton.setText("Add");
       
        removeButton = new Button(buttonComposite, SWT.NONE);
        removeButton.setBounds(0, 0, 94, 30);
        removeButton.setText("Remove");
       
        tableViewer.setContentProvider(new ArrayContentProvider());
       
        Composite membersComposite = new Composite(parent, SWT.NONE);
        membersComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        membersComposite.setLayout(new GridLayout(1, false));
       
        treeViewer = new TreeViewer(membersComposite, SWT.BORDER);
        treeViewer.addDoubleClickListener(new IDoubleClickListener() {
          public void doubleClick(DoubleClickEvent event) {
            ITreeSelection selection = (ITreeSelection)event.getSelection();
            IWorkbenchWindow window=PlatformUI.getWorkbench().getActiveWorkbenchWindow();
            IWorkbenchPage page = window.getActivePage();
            Object element = selection.getFirstElement();
            if (element instanceof IClassComponent){
              OpenClassComponentAction action = new OpenClassComponentAction(page, (IClassComponent)element);
              action.run();
              treeViewer.refresh(element);
            }
          }
        });
        treeViewer.setSorter(new ViewerSorter());
        treeViewer.setAutoExpandLevel(1);
        Tree membersTree = treeViewer.getTree();
        GridData gd_membersTree = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
        gd_membersTree.widthHint = 300;
        membersTree.setLayoutData(gd_membersTree);
        membersTree.setSize(0, 0);
        treeViewer.setLabelProvider(new LabelProvider());
        treeViewer.setContentProvider(new CdfContentProvider());
   
   
   
    if (this.cdf != null){
      bind();
    }
    m_bindingContext = initDataBindings();
  }


  public void doSave(IProgressMonitor monitor) {
    super.doSave(monitor);
    this.cdf.doSave(monitor);
    this.cdf.setDirty(false);
  }

    public void doSaveAs() {
    }

    public void init(IEditorSite site, IEditorInput editorInput) {
        super.init(site, editorInput);
       
        IFileEditorInput ifei = (IFileEditorInput)editorInput;
        IFile modelFile = ifei.getFile();
        ToolClass cdf = ToolClass.fetch(modelFile);
        this.setCdf(cdf);
        setPartName(cdf.getToolName());
    }

    /* (non-Javadoc)
     * Method declared on IEditorPart.
     */
    public boolean isSaveAsAllowed() {
        return false;
    }

    @Override
    public Image getTitleImage() {

      if (this.getCdf() != null){
        return ToolPlugin.getImage(this.getCdf().getIconString());
      } else {
        return ToolPlugin.getImage("icons/class.gif");
      }
    }

  public ToolClass getCdf() {
    return cdf;
  }

  public void setCdf(ToolClass cdf) {
    if (m_bindingContext != null){
      m_bindingContext.dispose();
      m_bindingContext = null;
    }
    this.cdf = cdf;
    this.cdf.setDirty(false);
    this.cdf.addPropertyChangeListener("dirty", this);
    if (this.cdf != null && classNameText != null){
      bind();
    }
  }
 
  @Override
  public void dispose() {
    this.cdf.removePropertyChangeListener(this);
    super.dispose();
  }
  protected void bind(){
    m_bindingContext = initDataBindings();
    tableViewer.setInput(this.cdf.getClassProperties());
    treeViewer.setInput(this.cdf);
    listViewer.setInput(this.cdf.getImplementations());
    if (cdf.isMapped()){
      Image icon = ToolPlugin.getImage("icons/window_class.gif");
      tbtmName.setImage(icon);
      setTitleImage(icon);
    }
  }
 
  @Override
  public boolean isDirty() {
    return this.cdf.isDirty();
  }

  @Override
  public void propertyChange(PropertyChangeEvent event) {
    if (event.getPropertyName().equalsIgnoreCase("dirty")){
      firePropertyChange(IWorkbenchPartConstants.PROP_DIRTY);
    }
  }
  protected DataBindingContext initDataBindings() {
    DataBindingContext bindingContext = new DataBindingContext();
    //
    IObservableValue classNameTextObserveTextObserveWidget = SWTObservables.observeText(classNameText, SWT.Modify);
    IObservableValue cdfNameObserveValue = BeansObservables.observeValue(cdf, "toolName");
    UpdateValueStrategy strategy = new UpdateValueStrategy();
    strategy.setAfterConvertValidator(new ToolNameValidator(classNameText));
    bindingContext.bindValue(classNameTextObserveTextObserveWidget, cdfNameObserveValue, strategy, null);
    //
    IObservableValue superClassTextObserveTextObserveWidget = SWTObservables.observeText(superClassText, SWT.FocusOut);
    IObservableValue cdfSuperClassObserveValue = BeansObservables.observeValue(cdf, "superClass");
    bindingContext.bindValue(superClassTextObserveTextObserveWidget, cdfSuperClassObserveValue, null, null);
    //
    IObservableValue superClassTextObserveEditableObserveWidget = SWTObservables.observeEditable(superClassText);
    IObservableValue cdfReadWriteObserveValue = BeansObservables.observeValue(cdf, "readWrite");
    bindingContext.bindValue(superClassTextObserveEditableObserveWidget, cdfReadWriteObserveValue, null, null);
    //
    IObservableValue classNameTextObserveEditableObserveWidget = SWTObservables.observeEditable(classNameText);
    bindingContext.bindValue(classNameTextObserveEditableObserveWidget, cdfReadWriteObserveValue, null, null);
    //
    IObservableValue addButtonObserveEnabledObserveWidget = SWTObservables.observeEnabled(addButton);
    bindingContext.bindValue(addButtonObserveEnabledObserveWidget, cdfReadWriteObserveValue, null, null);
    //
    IObservableValue removeButtonObserveEnabledObserveWidget = SWTObservables.observeEnabled(removeButton);
    bindingContext.bindValue(removeButtonObserveEnabledObserveWidget, cdfReadWriteObserveValue, null, null);
    //
    IObservableValue planNameTextObserveTextObserveWidget = SWTObservables.observeText(planNameText, SWT.FocusOut);
    IObservableValue cdfPlanNameObserveValue = BeansObservables.observeValue(cdf, "planName");
    bindingContext.bindValue(planNameTextObserveTextObserveWidget, cdfPlanNameObserveValue, null, null);
    //
    return bindingContext;
  }
}
TOP

Related Classes of tool.editors.cdf.ClassEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.