Package com.dubture.composer.ui.wizard.importer

Source Code of com.dubture.composer.ui.wizard.importer.WizardResourceImportPage

package com.dubture.composer.ui.wizard.importer;

import java.io.File;
import java.io.IOException;

import org.eclipse.core.internal.resources.ProjectDescription;
import org.eclipse.core.internal.resources.ProjectDescriptionReader;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.IStringButtonAdapter;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.StringButtonDialogField;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.StringDialogField;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.WizardDataTransferPage;

import com.dubture.composer.core.log.Logger;
import com.dubture.composer.ui.ComposerUIPlugin;
import com.dubture.composer.ui.wizard.ValidationException;
import com.dubture.composer.ui.wizard.ValidationException.Severity;
import com.dubture.getcomposer.core.ComposerConstants;
import com.dubture.getcomposer.core.ComposerPackage;
import com.dubture.getcomposer.json.ParseException;

/**
*
* @author Robert Gruendler <r.gruendler@gmail.com>
*
*/
@SuppressWarnings("restriction")
public class WizardResourceImportPage extends WizardDataTransferPage {

  protected String source;
  protected String target;
  protected String projectName;
  protected StringButtonDialogField sourcePath;
  protected IPath json;
  protected ComposerPackage composerPackage;
  protected StringDialogField projectNameField;
  protected IWorkspace workspace;
  protected StringButtonDialogField targetPath;
  protected Button useWorkspaceLocation;
  protected final String defaultMessage = "Select an existing Composer project to automatically setup your project";
  protected String lastNameFromProjectFile = null;
 
  protected boolean useWorkspace = true;
 
  public WizardResourceImportPage(IWorkbench aWorkbench, IStructuredSelection selection, String[] strings) {
    super("Import existing Composer project");
    setTitle("Import an existing Composer project");
    setDescription(defaultMessage);
  }

  @Override
  public void handleEvent(Event event) {

  }
 
  public String getProjectName() {
    return projectName;
  }
 
  public String getSourcePath() {
    return source;
  }
 
  public String getTargetPath() {
    return target;
  }
 
  public boolean doUseWorkspace() {
    return useWorkspace;
  }

  @Override
  public void createControl(Composite parent) {

    Composite control = new Composite(parent, SWT.NONE);
   
    int numColumns = 3;
    GridLayoutFactory.fillDefaults().numColumns(numColumns).applyTo(control);
   
    projectNameField = new StringDialogField();
    projectNameField.setLabelText("Project name");
    projectNameField.doFillIntoGrid(control, numColumns);
    LayoutUtil.setHorizontalGrabbing(projectNameField.getTextControl(null));
   
    projectNameField.setDialogFieldListener(new IDialogFieldListener() {
      @Override
      public void dialogFieldChanged(DialogField field) {
        projectName = projectNameField.getText();
        updatePageCompletion();
      }
    });
   

    sourcePath = new StringButtonDialogField(new IStringButtonAdapter() {
      @Override
      public void changeControlPressed(DialogField field) {
        DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN);
        dialog.setMessage("Select an existing composer project");
        source = dialog.open();
        try {
          handleSourcePathChange();
        } catch (Exception e) {
          Logger.logException(e);
        }
      }
    });
   
    sourcePath.setLabelText("Source path");
    sourcePath.setButtonLabel("Browse");
    sourcePath.doFillIntoGrid(control, numColumns);
    sourcePath.getTextControl(null).setEnabled(false);
   
    useWorkspaceLocation = new Button(control, SWT.CHECK);
    useWorkspaceLocation.setText("Use default workspace location");
    useWorkspaceLocation.setSelection(true);
   
    GridDataFactory.fillDefaults().grab(true, false).span(3, 1).applyTo(useWorkspaceLocation);
   
    useWorkspaceLocation.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        targetPath.setEnabled(useWorkspaceLocation.getSelection() == false);
        useWorkspace = useWorkspaceLocation.getSelection();
        updatePageCompletion();
      }
    });
   
    // don't know if we can use this in the future. for now, simply use the source location as the project location
    useWorkspaceLocation.setVisible(false);
   
    /*
    targetPath = new StringButtonDialogField(new IStringButtonAdapter() {
      @Override
      public void changeControlPressed(DialogField field) {
        DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN);
        dialog.setMessage("Select the target location");
        target = dialog.open();
        try {
          handleTargetPathChange();
        } catch (IOException e) {
          Logger.logException(e);
        }
      }
    });
   
    targetPath.setLabelText("Target path");
    targetPath.setButtonLabel("Browse");
    targetPath.doFillIntoGrid(control, numColumns);
    targetPath.getTextControl(null).setEnabled(false);
    targetPath.setEnabled(false);
    */
   
    LayoutUtil.setHorizontalGrabbing(sourcePath.getTextControl(null));
    setControl(control);
   
    workspace = ResourcesPlugin.getWorkspace();
    PlatformUI.getWorkbench().getHelpSystem().setHelp(control, ComposerUIPlugin.PLUGIN_ID + "." + "help_context_wizard_importer");
    setPageComplete(false);
  }
 
 
  protected void handleTargetPathChange() throws IOException{
   
    if (target != null) {
      //targetPath.setText(target);
    }
   
    updatePageCompletion();
  }

  protected void handleSourcePathChange() throws IOException, ParseException {
   
    if (source != null) {
      sourcePath.setText(source);
      json = new Path(source).append(ComposerConstants.COMPOSER_JSON);
     
      if (json != null && json.toFile().exists()) {
        composerPackage = new ComposerPackage(json.toFile());
      } else {
        composerPackage = null;
      }
      setProjectNameFromJson();
    }
   
    updatePageCompletion();
  }
 
 
  protected void setProjectNameFromJson() {
   
    if (projectNameField.getText().length() > 0 || composerPackage == null) {
      return;
    }
   
    String name = composerPackage.getName();
    if (name != null) {
      if (name.contains("/")) {
        String[] split = name.split("/");
        if (split.length == 2) {
          name = split[1];
        }
      }

      try {
        validateProjectName(name);
      } catch (ValidationException e) {
        setErrorMessage(e.getMessage());
        updatePageCompletion();
        return;
      }
      projectNameField.setText(name);
    }
  }
 
  protected void validateProjectName(String name) throws ValidationException {
   
    IProject project = workspace.getRoot().getProject(name);
    if (project != null && project.exists()) {
      throw new ValidationException("A project with the same name already exists in the workspace", Severity.ERROR);
    }
  }

  @Override
  protected boolean validateSourceGroup() {
   
    projectNameField.getTextControl(null).setEnabled(true);
   
    if (json == null || json.toFile().exists() == false) {
      setErrorMessage("The selected folder does not contain a composer.json file.");
      return false;
    }
   
    IPath sourceProject = new Path(source).append(".project");
   
    if (sourceProject.toFile().exists()) {
      try {
        ProjectDescriptionReader reader = new ProjectDescriptionReader();
        ProjectDescription projectDescription = reader.read(sourceProject);
       
        if (projectDescription == null) {
          setErrorMessage("Cannot read the source project.");
          return false;
        }
       
        projectName = projectDescription.getName();
        projectNameField.setTextWithoutUpdate(projectName);
        projectNameField.getTextControl(null).setEnabled(false);
        lastNameFromProjectFile = projectName;
       
        setMessage("The target location contains already an eclipse project. The wizard will use the existing information to import the project");
        return true;
       
      } catch (IOException e) {
        Logger.logException(e);
        setErrorMessage("Error reading source project");
        return false;
      }
    }
   
   
    projectNameField.getTextControl(null).setEnabled(true);
   
    setMessage(defaultMessage);
   
    return true;
  }
 
  @Override
  protected boolean validateDestinationGroup() {
   
    if (projectName == null || projectName.length() == 0) {
      setErrorMessage("Please enter a project name");
      return false;
    }
   
    try {
      validateProjectName(projectName);
    } catch (ValidationException e) {
      setErrorMessage(e.getMessage());
      return false;
    }
   
    if (useWorkspaceLocation.getSelection() == true) {
      return true;
    }
   
    if (target == null) {
      setMessage("Please select a target path");
      return false;
    }
   
    IPath targetPath = new Path(target);
    File file = targetPath.toFile();
   
    if (file == null || ! file.exists()  || ! file.isDirectory()) {
      setErrorMessage("The selected target location is invalid");
      return false;
    }
   
    IPath targetProjectPath = targetPath.append(projectName);
   
    File targetProject = targetProjectPath.toFile();
   
    if (targetProject == null || targetProject.exists()) {
      setErrorMessage("The target folder already contains a file/folder with the specified project name");
      return false;
    }
   
    setMessage(defaultMessage);
   
    return true;
  }

  @Override
  protected boolean allowNewContainerName() {
    return false;
  }
 
 
 
}
TOP

Related Classes of com.dubture.composer.ui.wizard.importer.WizardResourceImportPage

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.