/** Default constructor. */
  public WAProjectWizard() {
    setWindowTitle(Messages.pWizWindowTitle);
    String zipFile = "";
    try {
      zipFile =
          String.format(
              "%s%s%s%s%s",
              PluginUtil.pluginFolder,
              File.separator,
              Messages.pluginId,
              File.separator,
              Messages.starterKitFileName);

      // Extract the WAStarterKitForJava.zip to temp dir
      waProjMgr = WindowsAzureProjectManager.create(zipFile);
      //	By deafult - disabling remote access
      //  when creating new project
      waProjMgr.setRemoteAccessAllRoles(false);
      waProjMgr.setClassPathInPackage("azure.lib.dir", PluginUtil.getAzureLibLocation());
      waRole = waProjMgr.getRoles().get(0);
      // remove http endpoint
      WindowsAzureEndpoint endpoint = waRole.getEndpoint(Messages.httpEp);
      if (endpoint != null) {
        endpoint.delete();
      }
    } catch (IOException e) {
      PluginUtil.displayErrorDialogAndLog(
          this.getShell(), Messages.pWizErrTitle, Messages.pWizErrMsg, e);
    } catch (Exception e) {
      errorTitle = Messages.adRolErrTitle;
      errorMessage = Messages.pWizErrMsgBox1 + Messages.pWizErrMsgBox2;
      PluginUtil.displayErrorDialogAndLog(this.getShell(), errorTitle, errorMessage, e);
    }
  }
 /**
  * This method gets called when wizard's finish button is clicked.
  *
  * @return True, if project gets created successfully; else false.
  */
 @Override
 public boolean performFinish() {
   final String projName = waProjWizPage.getTextProjName();
   final String projLocation = waProjWizPage.getTextLocation();
   final boolean isDefault = waProjWizPage.isDefaultLocation();
   final WorkingSetGroup workingSetGroup = waProjWizPage.getWorkingSetGroup();
   final IWorkingSet[] selWorkingSets = workingSetGroup.getSelectedWorkingSets();
   final IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager();
   final Map<String, String> depParams = getDeployPageValues();
   final Map<String, Boolean> keyFtr = getKeyFtrPageValues();
   final IProject proj = getSelectProject();
   boolean retVal = true;
   IRunnableWithProgress runnable =
       new IRunnableWithProgress() {
         public void run(IProgressMonitor monitor) throws InvocationTargetException {
           try {
             doFinish(
                 projName,
                 projLocation,
                 isDefault,
                 selWorkingSets,
                 workingSetManager,
                 depParams,
                 keyFtr,
                 proj);
           } finally {
             monitor.done();
           }
         }
       };
   try {
     /*
      * Check if third party JDK and server is selected
      * then license is accepted or not.
      */
     boolean tempAccepted = true;
     if (WATabPage.isThirdPartyJdkChecked() && !WATabPage.isAccepted()) {
       tempAccepted = JdkSrvConfig.createAccLicenseAggDlg(getShell(), true);
     }
     if (WATabPage.isThirdPartySrvChecked() && !WATabPage.isServerAccepted()) {
       tempAccepted = JdkSrvConfig.createAccLicenseAggDlg(getShell(), false);
     }
     if (tempAccepted) {
       getContainer().run(true, false, runnable);
     } else {
       return false;
     }
   } catch (InterruptedException e) {
     PluginUtil.displayErrorDialog(this.getShell(), Messages.pWizErrTitle, Messages.pWizErrMsg);
     retVal = false;
   } catch (InvocationTargetException e) {
     PluginUtil.displayErrorDialogAndLog(
         this.getShell(), Messages.pWizErrTitle, Messages.pWizErrMsg, e);
     retVal = false;
   }
   // re-initializing context menu to default option : false
   Activator.getDefault().setContextMenu(false);
   return retVal;
 }
 /**
  * This method will refresh the workspace.If any changes are made in any configuration files
  * through UI in that case it will refresh the workspace so that user can see the correct/modified
  * files.
  *
  * @param errorTitle
  * @param errorMessage
  */
 public static void refreshWorkspace(String errorTitle, String errorMessage) {
   try {
     IWorkspace workspace = ResourcesPlugin.getWorkspace();
     IWorkspaceRoot root = workspace.getRoot();
     root.refreshLocal(IResource.DEPTH_INFINITE, null);
   } catch (CoreException e) {
     PluginUtil.displayErrorDialogAndLog(new Shell(), errorTitle, errorMessage, e);
   }
 }
 /**
  * Method returns array of project names which are open and has windows azure nature.
  *
  * @return String[]
  */
 private String[] getProjects() {
   IWorkspace workspace = ResourcesPlugin.getWorkspace();
   IWorkspaceRoot root = workspace.getRoot();
   String[] projects = null;
   ArrayList<String> projList = new ArrayList<String>();
   try {
     for (IProject wRoot : root.getProjects()) {
       if (wRoot.isOpen() && !wRoot.hasNature(Messages.waProjNature)) {
         projList.add(wRoot.getProject().getName());
       }
     }
     projects = new String[projList.size()];
     projects = projList.toArray(projects);
   } catch (Exception e) {
     PluginUtil.displayErrorDialogAndLog(
         this.getShell(), Messages.projSelTtl, Messages.projSelMsg, e);
   }
   return projects;
 }
 /**
  * This method finds the project in workspace.
  *
  * @param path : import path
  * @return : matched project
  */
 public static IProject findProjectFromWorkSpace(String path) {
   IWorkspace workspace = ResourcesPlugin.getWorkspace();
   IWorkspaceRoot root = workspace.getRoot();
   IProject project = null;
   ArrayList<IProject> projList = new ArrayList<IProject>();
   try {
     for (IProject wRoot : root.getProjects()) {
       if (wRoot.isOpen() && !wRoot.hasNature(Messages.stUpProjNature)) {
         projList.add(wRoot);
       }
     }
     IProject[] arr = new IProject[projList.size()];
     arr = projList.toArray(arr);
     for (int i = 0; i < arr.length; i++) {
       if (arr[i].getLocation().toOSString().equalsIgnoreCase(path)) {
         project = arr[i];
       }
     }
   } catch (Exception e) {
     PluginUtil.displayErrorDialogAndLog(new Shell(), Messages.prjSelErr, Messages.prjSelMsg, e);
   }
   return project;
 }
  @Override
  protected void okPressed() {
    boolean isValid = true;
    if ((fileRadioBtn.getSelection() && !fileTxt.getText().isEmpty())) {
      File file = new File(fileTxt.getText());
      if (!file.exists()) {
        isValid = false;
        PluginUtil.displayErrorDialog(
            this.getShell(), Messages.appDlgInvFileTtl, Messages.appDlgInvFileMsg);
      }
    } else if (projRadioBtn.getSelection()
        && !asNameTxt.getText().isEmpty()
        && !projCombo.getText().isEmpty()) {
      boolean isValidName = true;
      try {
        isValidName = windowsAzureRole.isValidDeployName(asNameTxt.getText());
      } catch (Exception e) {
        isValidName = false;
      }
      if (!isValidName) {
        isValid = false;
        PluginUtil.displayErrorDialog(
            this.getShell(), Messages.appDlgInvNmeTtl, Messages.appDlgInvNmeMsg);
      }
    }
    if (isValid) {
      ArrayList<String> cmpList = null;
      if (depPage == null) {
        cmpList = serverConf.getAppsAsNames();
      } else {
        cmpList = depPage.getAppsAsNames();
      }

      if (fileRadioBtn.getSelection()) {
        if (cmpList.contains(new File(fileTxt.getText()).getName())) {
          PluginUtil.displayErrorDialog(
              this.getShell(), Messages.appDlgDupNmeTtl, Messages.appDlgDupNmeMsg);
          return;
        }
        try {
          List<WindowsAzureRoleComponent> components = windowsAzureRole.getComponents();
          for (int i = 0; i < components.size(); i++) {
            if (components
                .get(i)
                .getDeployName()
                .equalsIgnoreCase(new File(fileTxt.getText()).getName())) {
              PluginUtil.displayErrorDialog(
                  this.getShell(), Messages.appDlgDupNmeTtl, Messages.appDlgDupNmeMsg);
              return;
            }
          }
        } catch (WindowsAzureInvalidProjectOperationException e) {
          PluginUtil.displayErrorDialogAndLog(
              this.getShell(), Messages.addAppErrTtl, Messages.addAppErrMsg, e);
        }

        if (depPage == null) {
          serverConf.addToAppList(
              fileTxt.getText(), new File(fileTxt.getText()).getName(), Messages.methodCopy);
        } else {
          depPage.addToAppList(
              fileTxt.getText(), new File(fileTxt.getText()).getName(), Messages.methodCopy);
        }

      } else if (projRadioBtn.getSelection()) {
        IWorkspace workspace = ResourcesPlugin.getWorkspace();
        IWorkspaceRoot root = workspace.getRoot();
        IProject proj = root.getProject(projCombo.getText());
        if (cmpList.contains(new File(asNameTxt.getText()).getName())) {
          PluginUtil.displayErrorDialog(
              this.getShell(), Messages.appDlgDupNmeTtl, Messages.appDlgDupNmeMsg);
          return;
        }
        if (depPage == null) {
          serverConf.addToAppList(
              proj.getLocation().toOSString(), asNameTxt.getText(), Messages.methodAuto);
        } else {
          depPage.addToAppList(
              proj.getLocation().toOSString(), asNameTxt.getText(), Messages.methodAuto);
        }
      }
      super.okPressed();
    }
  }
  /**
   * Method creates tree structure of windows azure property pages. and opens property dialog with
   * desired property page selected & active.
   *
   * @param windowsAzureRole : worker role
   * @param pageToDisplay : property page Id which should be active after opening dialog
   * @return integer
   */
  public static int openRolePropertyDialog(
      WindowsAzureRole windowsAzureRole, String pageToDisplay) {
    int retVal = Window.CANCEL; // value corresponding to cancel
    try {
      // Node creation
      PreferenceNode nodeGeneral =
          new PreferenceNode(
              Messages.cmhIdGeneral, Messages.cmhLblGeneral, null, WARGeneral.class.toString());
      nodeGeneral.setPage(new WARGeneral());
      nodeGeneral.getPage().setTitle(Messages.cmhLblGeneral);

      PreferenceNode nodeCache =
          new PreferenceNode(
              Messages.cmhIdCach, Messages.cmhLblCach, null, WARCaching.class.toString());
      nodeCache.setPage(new WARCaching());
      nodeCache.getPage().setTitle(Messages.cmhLblCach);

      PreferenceNode nodeCmpnts =
          new PreferenceNode(
              Messages.cmhIdCmpnts, Messages.cmhLblCmpnts, null, WARComponents.class.toString());
      nodeCmpnts.setPage(new WARComponents());
      nodeCmpnts.getPage().setTitle(Messages.cmhLblCmpnts);

      PreferenceNode nodeDebugging =
          new PreferenceNode(
              Messages.cmhIdDbg, Messages.cmhLblDbg, null, WARDebugging.class.toString());
      nodeDebugging.setPage(new WARDebugging());
      nodeDebugging.getPage().setTitle(Messages.cmhLblDbg);

      PreferenceNode nodeEndPts =
          new PreferenceNode(
              Messages.cmhIdEndPts, Messages.cmhLblEndPts, null, WAREndpoints.class.toString());
      nodeEndPts.setPage(new WAREndpoints());
      nodeEndPts.getPage().setTitle(Messages.cmhLblEndPts);

      PreferenceNode nodeEnvVars =
          new PreferenceNode(
              Messages.cmhIdEnvVars, Messages.cmhLblEnvVars, null, WAREnvVars.class.toString());
      nodeEnvVars.setPage(new WAREnvVars());
      nodeEnvVars.getPage().setTitle(Messages.cmhLblEnvVars);

      PreferenceNode nodeLdBlnc =
          new PreferenceNode(
              Messages.cmhIdLdBlnc, Messages.cmhLblLdBlnc, null, WARLoadBalance.class.toString());
      nodeLdBlnc.setPage(new WARLoadBalance());
      nodeLdBlnc.getPage().setTitle(Messages.cmhLblLdBlnc);

      PreferenceNode nodeLclStg =
          new PreferenceNode(
              Messages.cmhIdLclStg, Messages.cmhLblLclStg, null, WARLocalStorage.class.toString());
      nodeLclStg.setPage(new WARLocalStorage());
      nodeLclStg.getPage().setTitle(Messages.cmhLblLclStg);

      PreferenceNode nodeSrvCnfg =
          new PreferenceNode(
              Messages.cmhIdSrvCnfg,
              Messages.cmhLblSrvCnfg,
              null,
              WAServerConfiguration.class.toString());
      nodeSrvCnfg.setPage(new WAServerConfiguration());
      nodeSrvCnfg.getPage().setTitle(Messages.cmhLblSrvCnfg);

      /*
       * Tree structure creation.
       * Don't change order while adding nodes.
       * Its the default alphabetical order given by eclipse.
       */
      nodeGeneral.add(nodeCache);
      nodeGeneral.add(nodeCmpnts);
      nodeGeneral.add(nodeDebugging);
      nodeGeneral.add(nodeEndPts);
      nodeGeneral.add(nodeEnvVars);
      nodeGeneral.add(nodeLdBlnc);
      nodeGeneral.add(nodeLclStg);
      nodeGeneral.add(nodeSrvCnfg);

      PreferenceManager mgr = new PreferenceManager();
      mgr.addToRoot(nodeGeneral);
      // Dialog creation
      PreferenceDialog dialog =
          new PreferenceDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), mgr);
      // make desired property page active.
      dialog.setSelectedNode(pageToDisplay);
      dialog.create();
      String dlgTitle = String.format(Messages.cmhPropFor, windowsAzureRole.getName());
      dialog.getShell().setText(dlgTitle);
      dialog.open();
      // return whether user has pressed OK or Cancel button
      retVal = dialog.getReturnCode();
    } catch (Exception ex) {
      PluginUtil.displayErrorDialogAndLog(
          new Shell(), Messages.rolsDlgErr, Messages.rolsDlgErrMsg, ex);
    }
    return retVal;
  }