/**
  * Returns configurations done on WATagPage.
  *
  * @return Map<String, String>
  */
 @SuppressWarnings("static-access")
 private Map<String, String> getDeployPageValues() {
   Map<String, String> values = new HashMap<String, String>();
   // JDK
   values.put("jdkChecked", Boolean.valueOf(tabPg.isJdkChecked()).toString());
   values.put("jdkLoc", tabPg.getJdkLoc());
   // JDK download group
   values.put("jdkDwnldChecked", Boolean.valueOf(tabPg.isJdkDownloadChecked()).toString());
   values.put("jdkAutoDwnldChecked", Boolean.valueOf(tabPg.isJdkAutoUploadChecked()).toString());
   values.put("jdkThrdPartyChecked", Boolean.valueOf(tabPg.isThirdPartyJdkChecked()).toString());
   values.put("jdkName", tabPg.getJdkName());
   values.put("jdkUrl", tabPg.getJdkUrl());
   values.put("jdkKey", tabPg.getJdkKey());
   values.put("javaHome", tabPg.getJavaHome());
   // Server
   values.put("serChecked", Boolean.valueOf(tabPg.isSrvChecked()).toString());
   values.put("servername", JdkSrvConfig.getServerName());
   values.put("serLoc", tabPg.getServerLoc());
   values.put("tempFile", WAEclipseHelper.getTemplateFile(Messages.cmpntFile));
   // Server download group
   values.put("srvDwnldChecked", Boolean.valueOf(JdkSrvConfig.isSrvDownloadChecked()).toString());
   values.put(
       "srvAutoDwnldChecked", Boolean.valueOf(JdkSrvConfig.isSrvAutoUploadChecked()).toString());
   values.put("srvThrdPartyChecked", Boolean.valueOf(tabPg.isThirdPartySrvChecked()).toString());
   values.put("srvThrdPartyName", tabPg.getThirdPartyServerName());
   values.put("srvThrdAltSrc", JdkSrvConfig.getServerCloudAltSource());
   values.put("srvUrl", tabPg.getSrvUrl());
   values.put("srvKey", tabPg.getSrvKey());
   values.put("srvHome", tabPg.getSrvHomeDir());
   return values;
 }
 @Override
 public boolean performOk() {
   boolean okToProceed = true;
   try {
     if (!Activator.getDefault().isSaved()) {
       waProjManager.save();
       Activator.getDefault().setSaved(true);
     }
     WAEclipseHelper.refreshWorkspace(Messages.rolsRefTitle, Messages.rolsRefMsg);
   } catch (WindowsAzureInvalidProjectOperationException e) {
     errorTitle = Messages.adRolErrTitle;
     errorMessage = Messages.adRolErrMsgBox1 + Messages.adRolErrMsgBox2;
     MessageUtil.displayErrorDialog(this.getShell(), errorTitle, errorMessage);
     Activator.getDefault().log(errorMessage, e);
     okToProceed = false;
   }
   if (okToProceed) {
     okToProceed = super.performOk();
   }
   return okToProceed;
 }
  /**
   * Returns the server name whose detection patterns is matched under path.
   *
   * @param serverDetectors
   * @param path
   * @return
   */
  public static String detectServer(File path) {
    Map<String, String> serverDetectors;

    // Get the templates files
    String templateFilePath = WAEclipseHelper.getTemplateFile();
    if (templateFilePath == null || path == null || !path.isDirectory() || !path.exists()) {
      return null;
    }

    // Get the server detectors from the templates
    try {
      if (null
          == (serverDetectors =
              WindowsAzureProjectManager.getServerTemplateDetectors(new File(templateFilePath)))) {
        return null;
      }
    } catch (WindowsAzureInvalidProjectOperationException e) {
      return null;
    }

    // Check each pattern
    for (Map.Entry<String, String> entry : serverDetectors.entrySet()) {
      String serverName = entry.getKey();
      String patternText = entry.getValue();
      if (patternText == null || patternText.isEmpty()) {
        continue;
      }

      /*
       * Fast path: Check the pattern directly
       * (like, if it has no wild cards)
       */
      File basePathFile = new File(path, patternText);
      if (basePathFile.exists()) {
        return serverName;
      }

      /*
       * Split pattern path into parts
       * and check for existence of each part
       */
      basePathFile = path;
      String[] pathParts = patternText.split("\\\\");
      boolean foundSoFar = false;
      for (int i = 0; i < pathParts.length; i++) {
        String pathPart = pathParts[i];
        // Try direct match first
        File pathPartFile = new File(basePathFile, pathPart);
        if (pathPartFile.exists()) {
          foundSoFar = true;
          // Check for wildcards
        } else if (!pathPart.contains("*") && !pathPart.contains("?")) {
          foundSoFar = false;
          // Wildcards present, so check pattern
        } else {
          String[] fileNames = basePathFile.list();
          String patternRegex = windowsPathToRegex(pathPart) + "$";
          Pattern pattern = Pattern.compile(patternRegex);
          Matcher matcher = pattern.matcher("");
          foundSoFar = false;
          for (String fileName : fileNames) {
            matcher.reset(fileName);
            if (matcher.find()) {
              foundSoFar = true;
              break;
            }
          }
        }

        if (foundSoFar) {
          basePathFile = new File(basePathFile, pathPart);
        } else {
          break;
        }
      }

      if (foundSoFar) {
        return serverName;
      }
    }
    // No matches found
    return null;
  }