Package junit.extensions.eclipse.quick.args.prefererence

Source Code of junit.extensions.eclipse.quick.args.prefererence.QuickJUnitInfoPage

package junit.extensions.eclipse.quick.args.prefererence;

import junit.extensions.eclipse.quick.args.ArgsPlugin;
import junit.extensions.eclipse.quick.args.ExtensionSupport;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.EnvironmentTab;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PropertyPage;

/**
* copied org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer
*/
public class QuickJUnitInfoPage extends PropertyPage implements
    IWorkbenchPropertyPage {

  private ILaunchConfigurationTab[] tabs;
  private CTabFolder fTabFolder;
  private int fCurrentTabIndex = -1;

  private boolean fInitializingTabs = false;
  private boolean fDisposingTabs = false;

  private ILaunchConfigurationWorkingCopy fWorkingCopy;
  private ILaunchConfiguration fOriginal;
 
  public QuickJUnitInfoPage() {
    tabs = new ILaunchConfigurationTab[]{
        new JavaArgumentsTab(),
        new EnvironmentTab()
    };
  }
 
  protected Control createContents(Composite parent) {
    load();
    createTabFolder(parent);
    CTabItem tab = null;
    String name = "";
    Control control = null;
    for (int i = 0; i < tabs.length; i++) {
      tab = new CTabItem(fTabFolder, SWT.BORDER);
      name = tabs[i].getName();
      if (name == null) {
        name = "unspecified";
      }
      tab.setText(name);
      tab.setImage(tabs[i].getImage());
      tabs[i].createControl(tab.getParent());
      control = tabs[i].getControl();
      if (control != null) {
        tab.setControl(control);
      }
      tabs[i].initializeFrom(fOriginal);
    }

    setActiveTab(0);
    return fTabFolder;
  }

  private void load() {
    IJavaProject project = (IJavaProject) getElement();
    try {
      fOriginal = ExtensionSupport.getLaunchConfiguration(project);
      if(fOriginal != null){
        fWorkingCopy = fOriginal.getWorkingCopy();
      }else{
        fWorkingCopy = ExtensionSupport.createLaunchConfigurationWorkingCopy(project);
        fOriginal = fWorkingCopy.doSave();
      }
    } catch (CoreException e) {
      getPlugin().logSystemError(e, this);
    }
  }

  private void createTabFolder(Composite parent) {
    if (fTabFolder == null) {
      ColorRegistry reg = JFaceResources.getColorRegistry();
      Color c1 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$
          c2 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_END"); //$NON-NLS-1$
      fTabFolder = new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT);
      GridData gd = new GridData(GridData.FILL_BOTH);
      gd.horizontalSpan = 2;
      fTabFolder.setSelectionBackground(new Color[] {c1, c2}new int[] {100}, true);
      fTabFolder.setSelectionForeground(reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR")); //$NON-NLS-1$
      fTabFolder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
      fTabFolder.setLayoutData(gd);
          fTabFolder.setBorderVisible(true);
      fTabFolder.setFont(parent.getFont());
      fTabFolder.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent event) {
          if (!fInitializingTabs) {
            handleTabSelected();
            refresh();
          }
        }
      })
    }
  }
 
  public void setActiveTab(int index) {
    ILaunchConfigurationTab[] tabs = getTabs();
    if (index >= 0 && index < tabs.length) {
      fTabFolder.setSelection(index);
      handleTabSelected();
    }
  }

  public boolean performOk() {
    try {
      for(int i = 0; i < tabs.length; i++){
        ILaunchConfigurationTab tab = tabs[i];
        tab.performApply(fWorkingCopy);
      }
      fWorkingCopy.doSave();
    } catch (CoreException e) {
      getPlugin().logSystemError(e, this);
    }
    return super.performOk();
  }
 
  protected void handleTabSelected() {
    if (fDisposingTabs || fInitializingTabs) {
      return;
    }
    ILaunchConfigurationTab[] tabs = getTabs();
    if (fCurrentTabIndex == fTabFolder.getSelectionIndex() || tabs == null || tabs.length == 0 || fCurrentTabIndex > (tabs.length - 1)) {
      return;
    }
    if (fCurrentTabIndex != -1) {
      ILaunchConfigurationTab tab = tabs[fCurrentTabIndex];
      ILaunchConfigurationWorkingCopy wc = getWorkingCopy();
      if (wc != null) {
        tab.deactivated(wc);
        getActiveTab().activated(wc);
      }
    }
    fCurrentTabIndex = fTabFolder.getSelectionIndex();
  }

  private ILaunchConfigurationTab getActiveTab() {
    ILaunchConfigurationTab[] tabs = getTabs();
    if (fTabFolder != null && tabs != null) {
      int pageIndex = fTabFolder.getSelectionIndex();
      if (pageIndex >= 0) {
        return tabs[pageIndex];
      }
    }
    return null;
  }

  public void refresh() {
    if (fInitializingTabs) {
      return;
    }
    if(fOriginal != null && fOriginal.isReadOnly()) {
      updateApplyButton();
      return;
    }
    ILaunchConfigurationTab[] tabs = getTabs();
    if (tabs != null) {
      // update the working copy from the active tab
      boolean newwc = !getWorkingCopy().isDirty();
      getActiveTab().performApply(getWorkingCopy());
      if((fOriginal instanceof ILaunchConfigurationWorkingCopy) && newwc) {
        try {
          ILaunchConfigurationWorkingCopy copy = getWorkingCopy();
          if(copy != null) {
            copy.doSave();
          }
        }
        catch (CoreException e) {
          getPlugin().logSystemError(e, this);
        };
      }
      updateApplyButton();
      // update error ticks
      CTabItem item = null;
      boolean error = false;
      Image image = null;
      for (int i = 0; i < tabs.length; i++) {
        item = fTabFolder.getItem(i);
        ILaunchConfigurationTab tab = tabs[i];
        image = tab.getImage();
        item.setImage(image);
        if(!tab.isValid(getWorkingCopy())) {
          error = tab.getErrorMessage() != null;
          if(error) {
            ImageRegistry reg = getPlugin().getImageRegistry();
            String errorImageName = "error_" + tab.getName();
            Image errorImage = reg.get(errorImageName);
            if(errorImage == null){
              ImageDescriptor desc = reg.getDescriptor("over_error");
              DecorationOverlayIcon icon = new DecorationOverlayIcon(image, desc, IDecoration.TOP_LEFT);
              reg.put(errorImageName , icon);
              reg.get(errorImageName);
            }
            item.setImage(errorImage);
          }
        }
      }
      setErrorMessage(getErrorMessage());
      setMessage(getMessage())
    }
  }

  public String getErrorMesssage() {
    if (fInitializingTabs) {
      return null;
    }
   
    if (getWorkingCopy() == null) {
      return null;
    }
//    try {
//      verifyName();
//    } catch (CoreException ce) {
//      return ce.getStatus().getMessage();
//    }
// 
    String message = null;
    ILaunchConfigurationTab activeTab = getActiveTab();
    if (activeTab == null) {
      return null;
    }
    message = activeTab.getErrorMessage();
    if (message != null) {
      return message;
    }
   
    ILaunchConfigurationTab[] allTabs = getTabs();
    for (int i = 0; i < allTabs.length; i++) {
      ILaunchConfigurationTab tab = allTabs[i];
      if (tab == activeTab) {
        continue;
      }
      message = tab.getErrorMessage();
      if (message != null) {
        StringBuffer temp= new StringBuffer();
        temp.append('[');
        temp.append(removeAccelerators(tab.getName()));
        temp.append("]: "); //$NON-NLS-1$
        temp.append(message);
        return temp.toString();
      }
    }
    if(getWorkingCopy().isReadOnly()) {
      return "readonly";
    }
    return null;
  }
 
  public String getMessage() {
    if (fInitializingTabs) {
      return null;
    }
   
    String message = "";
   
    ILaunchConfigurationTab tab = getActiveTab();
    if (tab != null) {
      String tabMessage = tab.getMessage();
      if (tabMessage != null) {
        message = tabMessage;
      }
    }
   
    return message;
  }
 
    private String removeAccelerators(String label) {
        String title = label;
        if (title != null) {
            // strip out any '&' (accelerators)
            int index = title.indexOf('&');
            if (index == 0) {
                title = title.substring(1);
            } else if (index > 0) {
                //DBCS languages use "(&X)" format
                if (title.charAt(index - 1) == '(' && title.length() >= index + 3 && title.charAt(index + 2) == ')') {
                    String first = title.substring(0, index - 1);
                    String last = title.substring(index + 3);
                    title = first + last;
                } else if (index < (title.length() - 1)) {
                    String first = title.substring(0, index);
                    String last = title.substring(index + 1);
                    title = first + last;
                }
            }
        }
        return title;
    }

 
  private ILaunchConfigurationTab[] getTabs() {
    return tabs;
  }
 
  protected ILaunchConfigurationWorkingCopy getWorkingCopy() {
    return fWorkingCopy;
  }
 
  protected ILaunchConfiguration getOriginal() {
    return fOriginal;
  }
 
  private ArgsPlugin getPlugin() {
    return ArgsPlugin.getPlugin();
  }

}
TOP

Related Classes of junit.extensions.eclipse.quick.args.prefererence.QuickJUnitInfoPage

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.