Package com.googlecode.goclipse.ui.launch

Source Code of com.googlecode.goclipse.ui.launch.GoLaunchConfigurationTab

/*******************************************************************************
* Copyright (c) 2014, 2014 Bruno Medeiros and other Contributors.
* 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
*
* Contributors:
*     steel - initial API and implementation
*     Bruno Medeiros - rewrite using lang code
*******************************************************************************/
package com.googlecode.goclipse.ui.launch;

import java.nio.file.Path;
import java.util.Collection;

import melnorme.lang.ide.launching.LaunchConstants;
import melnorme.lang.ide.ui.launch.LangArgumentsBlock2;
import melnorme.lang.ide.ui.launch.LangWorkingDirectoryBlock;
import melnorme.lang.ide.ui.launch.MainLaunchConfigurationTab;
import melnorme.lang.ide.ui.utils.UIOperationExceptionHandler;
import melnorme.utilbox.misc.ArrayUtil;
import melnorme.utilbox.misc.StringUtil;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
import org.eclipse.debug.ui.WorkingDirectoryBlock;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;

import com.googlecode.goclipse.core.GoProjectEnvironment;
import com.googlecode.goclipse.tooling.GoPackageName;
import com.googlecode.goclipse.tooling.env.GoEnvironment;

public class GoLaunchConfigurationTab extends MainLaunchConfigurationTab {
 
  public GoLaunchConfigurationTab() {
  }
 
  @Override
  protected Launch_ProgramPathField createProgramPathField() {
    return new Launch_ProgramPathField() {
      @Override
      protected String getGroupLabel() {
        return "Go main package (path relative to project)";
      }
    };
  }
 
  protected final LangArgumentsBlock2 argumentsBlock = new LangArgumentsBlock2() {
    @Override
    protected void fieldValueChanged() {
      updateLaunchConfigurationDialog();
    };
  };
  protected final WorkingDirectoryBlock workingDirectoryBlock = new LangWorkingDirectoryBlock();
 
  @Override
  protected void createCustomControls(Composite parent) {
    super.createCustomControls(parent);
   
    argumentsBlock.createComponent(parent, new GridData(GridData.FILL_BOTH));
    workingDirectoryBlock.createControl(parent);
  }
 
  @Override
  public void setLaunchConfigurationDialog(ILaunchConfigurationDialog dialog) {
    super.setLaunchConfigurationDialog(dialog);
    workingDirectoryBlock.setLaunchConfigurationDialog(dialog);
  }
 
  @Override
  protected void setDefaults(IResource contextualResource, ILaunchConfigurationWorkingCopy config) {
    super.setDefaults(contextualResource, config);
   
    config.setAttribute(LaunchConstants.ATTR_PROGRAM_ARGUMENTS, "");
    workingDirectoryBlock.setDefaults(config);
  }
 
  @Override
  protected void programPathField_setDefaults(IResource contextualResource, ILaunchConfigurationWorkingCopy config) {
    // TODO: figure out defaults for this field
  }
 
  @Override
  public void initializeFrom(ILaunchConfiguration config) {
    super.initializeFrom(config);
   
    String programargs = getConfigAttribute(config, LaunchConstants.ATTR_PROGRAM_ARGUMENTS, "");
   
    argumentsBlock.setFieldValue(programargs);
    workingDirectoryBlock.initializeFrom(config);
  }
 
  @Override
  protected void doPerformApply(ILaunchConfigurationWorkingCopy config) {
    super.doPerformApply(config);
   
    config.setAttribute(LaunchConstants.ATTR_PROGRAM_ARGUMENTS, argumentsBlock.getFieldValue());
    workingDirectoryBlock.performApply(config);
  }
 
 
  @Override
  public boolean isValid(ILaunchConfiguration launchConfig) {
    return super.isValid(launchConfig) && workingDirectoryBlock.isValid(launchConfig);
  }
 
  @Override
  public String getErrorMessage() {
    if (super.getErrorMessage() != null) {
      return super.getErrorMessage();
    } else {
      return workingDirectoryBlock.getErrorMessage();
    }
  }
 
  @Override
  protected void doValidate() {
     super.doValidate();
  }
 
  @Override
  protected void validateProgramPath() {
    // Ignore validation
    //super.validateProgramPath();
  }
 
  @Override
  protected void openProgramPathDialog(IProject project) {
    // TODO: this should be refactored to show only main packages
   
    try {
     
      ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new LabelProvider() {
        @Override
        public String getText(Object element) {
          GoPackageName goPackageName = (GoPackageName) element;
          return goPackageName.getFullNameAsString();
        }
      });
      dialog.setTitle("Select Go main package");
      dialog.setMessage("Select Go main package");
     
      GoEnvironment goEnv = GoProjectEnvironment.getGoEnvironment(project);
      Collection<GoPackageName> sourcePackages = GoProjectEnvironment.getSourcePackages(project, goEnv);
     
      dialog.setElements(ArrayUtil.createFrom(sourcePackages));
     
      if (dialog.open() == IDialogConstants.OK_ID) {
        GoPackageName goPackageName = (GoPackageName) dialog.getFirstResult();
        String packageResourcePath = goPackageName.getFullNameAsString();
       
        if(!GoProjectEnvironment.isProjectInsideGoPath(project, goEnv.getGoPath())) {
          packageResourcePath = "src/" + packageResourcePath;
        } else {
          Path projectLocation = project.getLocation().toFile().toPath();
          GoPackageName projectGoPackage =
              goEnv.getGoPath().findGoPackageForSourceFile(projectLocation.resolve("dummy.go"));
         
          // snip project base name.
          packageResourcePath = StringUtil.segmentAfterMatch(packageResourcePath,
            projectGoPackage.getFullNameAsString() + "/");
         
        }
        // check extension
        programPathField.setFieldValue(packageResourcePath);
      }
     
    } catch (CoreException ce) {
      UIOperationExceptionHandler.handleOperationStatus("Error selecting package from dialog: ", ce);
    }
  }
 
}
TOP

Related Classes of com.googlecode.goclipse.ui.launch.GoLaunchConfigurationTab

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.