/**
   * Get the singleton instance of this registry
   *
   * @return singleton {@link TeiidRuntimeRegistry}
   * @throws Exception
   */
  public static TeiidRuntimeRegistry getInstance() throws Exception {
    if (registry == null) {
      registry = new TeiidRuntimeRegistry();
      registry.load();
    }

    return registry;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.teiid.designer.ui.preferences.IGeneralPreferencePageContributor#performOk()
   */
  @Override
  public boolean performOk() {
    // persist value
    String versionString = versionCombo.getText();
    ITeiidServerVersion version = new TeiidServerVersion(versionString);

    if (versionString.equals(getPreferenceStoreValue(false))) return true; // same value - no change

    if (ModelerCore.getTeiidServerManager().getDefaultServer() == null && hasOpenEditors()) {
      // No default teiid instance and open editors so modelling diagrams may close which could
      // surprise!
      boolean changeVersion =
          MessageDialog.openQuestion(
              shell,
              Util.getStringOrKey(PREFIX + "versionChangeQuestionTitle"), // $NON-NLS-1$
              Util.getStringOrKey(PREFIX + "versionChangeQuestionMessage")); // $NON-NLS-1$

      if (!changeVersion) return false;
    }

    try {
      for (ITeiidServerVersion regVersion :
          TeiidRuntimeRegistry.getInstance().getSupportedVersions()) {
        if (regVersion.compareTo(version)) {
          getPreferenceStore().setValue(PREF_ID, regVersion.toString());
          return true;
        }
      }
    } catch (Exception ex) {
      Util.log(ex);
    }

    boolean changeVersion =
        MessageDialog.openQuestion(
            shell,
            Util.getStringOrKey(PREFIX + "unsupportedVersionQuestionTitle"), // $NON-NLS-1$
            Util.getStringOrKey(PREFIX + "unsupportedVersionQuestionMesssage")); // $NON-NLS-1$
    if (changeVersion) {
      getPreferenceStore().setValue(PREF_ID, version.toString());
      return true;
    }

    // No runtime client to support default version
    return false;
  }
  /**
   * Updates the radio buttons selection states corresponding to the new value.
   *
   * @param value the new value
   */
  private void update(String value) {

    List<String> items = new ArrayList<String>();

    try {
      Collection<ITeiidServerVersion> registeredServerVersions =
          TeiidRuntimeRegistry.getInstance().getSupportedVersions();
      items = TeiidServerVersion.orderVersions(registeredServerVersions, true);
    } catch (Exception ex) {
      Util.log(ex);
      for (VersionID versionId : VersionID.values()) {
        items.add(versionId.toString());
      }
    }

    versionCombo.setItems(items.toArray(new String[0]));
    versionCombo.setText(value);
  }