docs: @Override
      public void doExecute(ExecutionContext context) {
          CommandConsole commandConsole = context.getCommandConsole();
  
          File installDir = context.getAttribute(CommandConstants.WLP_INSTALLATION_LOCATION, File.class);
          Map<String, ProductInfo> productIdToVersionPropertiesMap = null;
          try {
              productIdToVersionPropertiesMap = VersionUtils.getAllProductInfo(installDir);
          } catch (VersionParsingException e1) {
              // The VersionParsingException will contain the translated message to print it out
              commandConsole.printErrorMessage(e1.getMessage());
  
              // This is fatal for the version command so exit
              return;
          }
  
          // Display information
          boolean verboseDisplayMode = context.optionExists(VERBOSE_OPTION);
  
          for (ProductInfo versionProperties : productIdToVersionPropertiesMap.values()) {
              if (verboseDisplayMode) {
                  File file = versionProperties.getFile();
                  commandConsole.printlnInfoMessage(file.getName() + ":");
                  BufferedReader reader = null;
                  try {
                      reader = new BufferedReader(new FileReader(versionProperties.getFile()));
                      String currentLine;
                      while ((currentLine = reader.readLine()) != null) {
                          if (!currentLine.startsWith("#")) {
                              commandConsole.printlnInfoMessage("\t" + currentLine);
                          }
                      }
                  } catch (IOException e) {
                      commandConsole.printlnErrorMessage(getMessage("ERROR_UNABLE_READ_FILE", versionProperties.getFile().getAbsoluteFile(), e.getMessage()));
                      return;
                  } finally {
                      if (reader != null)
                          try {
                              reader.close();
                          } catch (Exception e) {
                          }
                  }
                  commandConsole.printlnInfoMessage("");
              } else if (versionProperties.getReplacedBy() == null) {
                  commandConsole.printInfoMessage(getMessage("product.name"));
                  commandConsole.printlnInfoMessage(" " + versionProperties.getName());
                  commandConsole.printInfoMessage(getMessage("product.version"));
                  commandConsole.printlnInfoMessage(" " + versionProperties.getVersion());
                  commandConsole.printInfoMessage(getMessage("product.edition"));
                  commandConsole.printlnInfoMessage(" " + versionProperties.getEdition());
                  commandConsole.printlnInfoMessage("");
              }
          }
  
          if (context.optionExists(IFIXES_OPTION)) {
              Set<IFixInfo> iFixInfos = IFixUtils.getInstalledIFixes(installDir, commandConsole);
              // get a map keyed off the APAR id whose value set of fix ids that contain that APAR
              Map<String, Set<String>> fixInfo = new HashMap<String, Set<String>>();
              for (IFixInfo iFix : iFixInfos) {
                  String fixId = iFix.getId();
                  if (fixId != null) {
                      Resolves r = iFix.getResolves();
                      if (r != null) {
                          List<Problem> probs = r.getProblems();
                          if (probs != null) {
                              for (Problem p : probs) {
                                  String aparId = p.getDisplayId();
                                  if (aparId != null) {
                                      Set<String> fixIds = fixInfo.get(aparId);
                                      if (fixIds == null) {
                                          fixIds = new HashSet<String>();
                                          fixInfo.put(aparId, fixIds);
                                      }
                                      fixIds.add(fixId);
                                  }
                              }
                          }
                      }
                  }
              }
  
              for (Map.Entry<String, Set<String>> apar : fixInfo.entrySet()) {
                  commandConsole.printlnInfoMessage(getMessage("compare.ifix.apar.info", apar.getKey(), apar.getValue()));
              }
          }
      }