Package com.googlecode.goclipse.ui.wizards

Source Code of com.googlecode.goclipse.ui.wizards.NewGoWizardPage

package com.googlecode.goclipse.ui.wizards;

import java.io.File;
import java.io.FilenameFilter;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IDialogPage;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;

import com.googlecode.goclipse.ui.GoPluginImages;
import com.googlecode.goclipse.ui.wizards.NewSourceFileComposite.SourceFileType;

/**
* The "New" wizard page allows setting the container for the new file as well
* as the file name. The page will only accept file name without the extension
* OR with the extension that matches the expected one (go).
*/
public class NewGoWizardPage extends WizardPage implements DialogChangeListener{

  private NewSourceFileComposite sourceFileComposite;

  private ISelection selection;

  /**
   * Constructor for SampleNewWizardPage.
   *
   * @param pageName
   */
  public NewGoWizardPage(ISelection selection) {
    super("wizardPage");
    setTitle("Go Source File");
    setDescription("This wizard creates a new source file.");
    this.selection = selection;
  }

  /**
   * @see IDialogPage#createControl(Composite)
   */
  @Override
    public void createControl(Composite parent) {
    Composite container = new Composite(parent, SWT.NULL);
    sourceFileComposite = new NewSourceFileComposite(container, SWT.NULL);
    sourceFileComposite.addDialogChangedListener(this);
    GridData gd = new GridData(GridData.FILL_HORIZONTAL);
    sourceFileComposite.setLayoutData(gd);
   
    GridLayout layout = new GridLayout();
    container.setLayout(layout);
    layout.numColumns = 1;
    layout.verticalSpacing = 9;
    initialize();
    dialogChanged();
    setControl(container);
  }

  /**
   * Tests if the current workbench selection is a suitable container to use.
   */

  private void initialize() {
    setImageDescriptor(GoPluginImages.WIZARD_SOURCE_ICON.getDescriptor());
    String path = null;
    IPath prjPath = null;
    if (selection != null && selection.isEmpty() == false
        && selection instanceof IStructuredSelection) {
      IStructuredSelection ssel = (IStructuredSelection) selection;
      if (ssel.size() > 1)
        return;
      Object obj = ssel.getFirstElement();
      if (obj instanceof IResource) {
        IContainer container;
        if (obj instanceof IContainer)
          container = (IContainer) obj;
        else
          container = ((IResource) obj).getParent();
        path = container.getFullPath().toString();
        prjPath = ((IResource) obj).getProject().getLocation();
      }
      if (path != null) {
        sourceFileComposite.getSourceFolderName().setText(path);
      }
    }
   
    final String newFilePrefix = "new_file";
    String fName = newFilePrefix + ".go";
    if (path != null && prjPath != null) {
      sourceFileComposite.getSourceFolderName().setText(path);
      String fullPath = prjPath.removeLastSegments(1).append(path).toOSString();
      File f = new File(fullPath);
     
      String[] newFiles = f.list(new FilenameFilter() {
       
        @Override
        public boolean accept(File arg0, String name) {
          if (name.startsWith(newFilePrefix) && name.endsWith(".go")) {
            return true;
          }
          return false;
        }
      });
     
      if (newFiles != null && newFiles.length > 0) {
        int i = newFiles.length + 1;
        while (true) {
          fName = newFilePrefix + "_" + i + ".go";
          File nf = new File(fullPath + File.separator + fName);
          if (nf.exists()) {
            i ++;
            continue;
          }
          break;
        }
      }
    }
   
    int pos = fName.indexOf(".go");
    sourceFileComposite.getSourceFilename().setText(fName);
    sourceFileComposite.getSourceFilename().setSelection(0, pos);
    sourceFileComposite.getSourceFilename().forceFocus();
  }

  /**
   * Ensures that both text fields are set.
   */
  @Override
    public void dialogChanged() {
   
    IResource container = ResourcesPlugin.getWorkspace().getRoot()
        .findMember(new Path(getContainerName()));
   
    String fileName = getFileName();
   
    IResource file = ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(getContainerName()+"/"+fileName));

    if(file!=null){
      updateStatus("File " + fileName + " already exists. Choose a new name.");
      return;
    }
   
    if (getContainerName().length() == 0) {
      updateStatus("File container must be specified");
      return;
    }
   
    if (container == null
        || (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) {
      updateStatus("File container must exist");
      return;
    }
   
    if (!container.isAccessible()) {
      updateStatus("Project must be writable");
      return;
    }
   
    if (fileName.length() == 0) {
      updateStatus("File name must be specified");
      return;
    }
   
    if (fileName.replace('\\', '/').indexOf('/', 1) > 0) {
      updateStatus("File name must be valid");
      return;
    }
   
    int dotLoc = fileName.lastIndexOf('.');
    if (dotLoc != -1) {
      String ext = fileName.substring(dotLoc + 1);
      if (ext.equalsIgnoreCase("go") == false) {
        updateStatus("File extension must be \"go\"");
        return;
      }
    }
   
    if(sourceFileComposite.getSourceFileType()==SourceFileType.TEST){
      if(!sourceFileComposite.getSourceFilename().getText().endsWith("_test.go")){
        updateStatus("Tests must end with \"_test.go\" suffix");
        return;
      }
    }
   
    updateStatus(null);
  }

  /**
   * @param message
   */
  private void updateStatus(String message) {
    setErrorMessage(message);
    setPageComplete(message == null);
  }

  /**
   * @return name of the container
   */
  public String getContainerName() {
    return sourceFileComposite.getSourceFolderName().getText();
  }

  /**
   * @return name of the file
   */
  public String getFileName() {
    return sourceFileComposite.getSourceFilename().getText();
  }
 
  /**
   * @return {@link SourceFileType}
   */
  public SourceFileType getSourFileType() {
    return sourceFileComposite.getSourceFileType();
  }
}
TOP

Related Classes of com.googlecode.goclipse.ui.wizards.NewGoWizardPage

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.