Package com.github.masahirosuzuka.PhoneGapIntelliJPlugin.runner

Source Code of com.github.masahirosuzuka.PhoneGapIntelliJPlugin.runner.PhoneGapAddPlatformBeforeRun$PhoneGapAddPlatformTask

package com.github.masahirosuzuka.PhoneGapIntelliJPlugin.runner;

import com.github.masahirosuzuka.PhoneGapIntelliJPlugin.commandLine.PhoneGapCommandLine;
import com.intellij.execution.BeforeRunTask;
import com.intellij.execution.BeforeRunTaskProvider;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionHelper;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.process.ProcessOutput;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.util.concurrency.Semaphore;
import icons.PhoneGapIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

public class PhoneGapAddPlatformBeforeRun extends BeforeRunTaskProvider<PhoneGapAddPlatformBeforeRun.PhoneGapAddPlatformTask> {

  public static final Key<PhoneGapAddPlatformTask> ID = Key.create("PhonegapTask");

  @Override
  public Key<PhoneGapAddPlatformTask> getId() {
    return ID;
  }

  @Override
  public String getName() {
    return "Init PhoneGap/Cordova platform";
  }

  @Override
  public String getDescription(PhoneGapAddPlatformTask task) {
    return "Init PhoneGap/Cordova platform";
  }

  @Override
  public boolean isConfigurable() {
    return false;
  }


  @Override
  public Icon getIcon() {
    return PhoneGapIcons.PhonegapIntegration;
  }

  @Nullable
  @Override
  public PhoneGapAddPlatformTask createTask(RunConfiguration runConfiguration) {
    return runConfiguration instanceof PhoneGapRunConfiguration ? new PhoneGapAddPlatformTask(ID) : null;
  }

  @Override
  public boolean configureTask(RunConfiguration runConfiguration, PhoneGapAddPlatformTask task) {
    return false;
  }

  @Override
  public boolean canExecuteTask(RunConfiguration configuration, PhoneGapAddPlatformTask task) {
    return configuration instanceof PhoneGapRunConfiguration;
  }

  @Override
  public boolean executeTask(DataContext context,
                             final RunConfiguration configuration,
                             ExecutionEnvironment env,
                             PhoneGapAddPlatformTask task) {

    final PhoneGapRunConfiguration phoneGapRunConfiguration = (PhoneGapRunConfiguration)configuration;
    final PhoneGapCommandLine line = phoneGapRunConfiguration.getCommandLine();

    //skip for phonegap (it do platform add in run command)
    if (!line.needAddPlatform()) {
      return true;
    }

    final Project project = configuration.getProject();
    final Semaphore targetDone = new Semaphore();
    final Ref<Boolean> result = new Ref<Boolean>(true);
    final List<Exception> exceptions = new ArrayList<Exception>();
    ApplicationManager.getApplication().invokeAndWait(new Runnable() {
      public void run() {

        //Save all opened documents
        FileDocumentManager.getInstance().saveAllDocuments();
        targetDone.down();

        new Task.Backgroundable(project, "Init PhoneGap/Cordova platform", true) {

          public boolean shouldStartInBackground() {
            return true;
          }

          public void run(@NotNull final ProgressIndicator indicator) {
            try {
              String platform = phoneGapRunConfiguration.getPlatform();
              assert platform != null;
              ProcessOutput output = line.platformAdd(platform);
              if (output.getExitCode() != 0) {
                ExecutionHelper.showOutput(project, output, "Init PhoneGap/Cordova platform", null, true);
                result.set(false);
                targetDone.up();
                return;
              }

              targetDone.up();
            }
            catch (final ExecutionException e) {
              exceptions.add(e);
              result.set(false);
              targetDone.up();
            }
          }
        }.queue();
      }
    }, ModalityState.NON_MODAL);
    targetDone.waitFor();
    if (!exceptions.isEmpty()) {
      ExecutionHelper.showErrors(project, exceptions, "Cannot Init Platform", null);
    }


    return result.get();
  }

  public static class PhoneGapAddPlatformTask extends BeforeRunTask<PhoneGapAddPlatformTask> {

    protected PhoneGapAddPlatformTask(@NotNull Key<PhoneGapAddPlatformTask> providerId) {
      super(providerId);
      setEnabled(true);
    }
  }
}
TOP

Related Classes of com.github.masahirosuzuka.PhoneGapIntelliJPlugin.runner.PhoneGapAddPlatformBeforeRun$PhoneGapAddPlatformTask

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.