/**
   * ルールセット定義を取得する。<br>
   * 指定されたルールセットIDに対応する設定ファイルが見つからない場合は、<br>
   * デフォルトのルールセット定義を取得する。
   *
   * @param id ルールセットID
   * @return ルールセット定義
   * @throws RuleCreateException ルールセット定義ファイル読み込みに失敗した場合
   */
  public RuleSetDef getRuleSetDef(final String id) throws RuleCreateException {
    RuleSetDef def = this.ruleSetMap_.get(id);
    if (def != null) {
      return def;
    }

    if (id.equals(DEFAULT_RULESET_ID)) {
      def = this.accessor_.findRuleSet(DEFAULT_RULESET_FILE);
      def.setName(this.ruleSetConfigMap_.get(id).getName());
    } else if (id.equals(DEFAULT_HP_UX_RULESET_ID)) {
      def = this.accessor_.findRuleSet(DEFAULT_HP_UX_RULESET_FILE);
      def.setName(this.ruleSetConfigMap_.get(id).getName());
    } else if (id.equals(DEFAULT_JAVA_RULESET_ID)) {
      def = this.accessor_.findRuleSet(DEFAULT_JAVA_RULESET_FILE);
      def.setName(this.ruleSetConfigMap_.get(id).getName());
    } else if (id.equals(DEFAULT_DB_RULESET_ID)) {
      def = this.accessor_.findRuleSet(DEFAULT_DB_RULESET_FILE);
      def.setName(this.ruleSetConfigMap_.get(id).getName());
    } else {
      RuleSetConfig config = this.ruleSetConfigMap_.get(id);
      if (config == null) {
        throw new RuleCreateException("InvalidRuleSetDef", new Object[] {id});
      }
      String fileName = config.getFileName();
      def = this.accessor_.findRuleSet(fileName);
    }

    this.ruleSetMap_.put(id, def);

    return def;
  }
  /**
   * プリファレンスストアからルールセット定義(RuleSetConfigインスタンス)を取得する。
   *
   * @param ruleSetId ルールセットID
   * @return ルールセット定義。定義が見つからない場合でも、ルールセット定義を返す。
   */
  public static RuleSetConfig loadRuleSet(final String ruleSetId) {
    String name = preferenceMap__.get(CONFIG_RULESET_NAME_PREFIX + ruleSetId);
    String fileName = preferenceMap__.get(CONFIG_RULESET_FILE_PREFIX + ruleSetId);

    RuleSetConfig config = new RuleSetConfig();
    config.setId(ruleSetId);
    config.setName(name);
    config.setFileName(fileName);

    return config;
  }
  /** ルールセット定義などをプリファレンスストア、xmlファイルに保存する。 */
  @SuppressWarnings("deprecation")
  public synchronized void commit() {
    // アクティブなルールセットIDの保存。
    RulePreferenceUtil.saveActiveRuleSetId(this.activeRuleSetId_);

    // ルールセット詳細一覧の保存。
    List<String> ruleSetIdList = new ArrayList<String>();
    Collection<RuleSetConfig> ruleSetConfigs = this.ruleSetConfigMap_.values();

    for (RuleSetConfig config : ruleSetConfigs) {
      String id = config.getId();
      if (isDefaultRuleSet(id)) {
        continue;
      }

      RulePreferenceUtil.saveRuleSet(config);

      //
      ruleSetIdList.add(id);
    }

    // ルールセットID一覧の保存。
    String[] ruleSetIds = ruleSetIdList.toArray(new String[ruleSetIdList.size()]);
    RulePreferenceUtil.saveRuleSetIds(ruleSetIds);

    // ルールセットの保存。
    // 変更があったルールセットのみ保存する。
    for (String ruleId : this.dirtyRuleSetIds_) {
      if (isDefaultRuleSet(ruleId)) {
        continue;
      }

      RuleSetConfig config = this.ruleSetConfigMap_.get(ruleId);
      if (config == null) {
        continue;
      }
      RuleSetDef def = this.ruleSetMap_.get(ruleId);
      this.accessor_.updateRuleSet(def, config.getFileName());
    }

    // ルールセットの保存。
    // ファイルが存在しないルールセットについて、
    // デフォルトのルールを元にファイルを作成する。
    for (RuleSetConfig config : ruleSetConfigs) {
      String id = config.getId();
      if (isDefaultRuleSet(id)) {
        continue;
      }

      File file = new File(config.getFileName());
      if (file.exists() && file.isFile()) {
        continue;
      }

      File parentFile = file.getParentFile();

      if (parentFile != null && parentFile.exists() == false) {
        try {
          parentFile.mkdirs();
        } catch (SecurityException ex) {
          LOGGER.error(ex.getMessage(), ex);
        }
      }

      // デフォルトのルールをコピーして保存する
      try {
        RuleSetDef defaultRuleSetClone = new RuleSetDef(getRuleSetDef(DEFAULT_RULESET_ID));
        defaultRuleSetClone.setName(config.getName());
        this.accessor_.updateRuleSet(defaultRuleSetClone, config.getFileName());
      } catch (RuleCreateException ex) {
        LOGGER.error(ex.getMessage(), ex);
      }
    }

    // ルールファイルを削除する。
    for (RuleSetConfig config : this.removeList_) {
      File file = new File(config.getFileName());
      if (file.exists()) {
        try {
          file.delete();
        } catch (SecurityException ex) {
          LOGGER.error(ex.getMessage(), ex);
        }
      }
    }
    this.removeList_ = Collections.synchronizedList(new ArrayList<RuleSetConfig>());
  }
 /**
  * アクティブなルールセットを設定する。
  *
  * @param ruleSetConfig ルールセット定義
  */
 public void setActiveRuleSetConfig(final RuleSetConfig ruleSetConfig) {
   this.activeRuleSetId_ = ruleSetConfig.getId();
 }
 /**
  * ルールセット定義(RuleSetConfigインスタンス)を利用可能なルールセットに追加する。
  *
  * @param config ルールセット定義
  */
 public void addRuleSetConfig(final RuleSetConfig config) {
   this.ruleSetConfigMap_.put(config.getId(), config);
 }
  /**
   * 初期ルールセット定義マップを作成する。
   *
   * @return ルールセット定義マップ(デフォルト定義のみ)
   */
  private HashMap<String, RuleSetConfig> createDefaultConfigMap() {
    HashMap<String, RuleSetConfig> map = new LinkedHashMap<String, RuleSetConfig>();
    RuleSetConfig config = new RuleSetConfig();
    RuleSetConfig hpUxRuleSetConfig = new RuleSetConfig();
    RuleSetConfig javaRuleSetConfig = new RuleSetConfig();
    RuleSetConfig dbRuleSetConfig = new RuleSetConfig();

    // デフォルトのルールセットを定義する。
    config.setId(DEFAULT_RULESET_ID);
    config.setName(DEFAULT_RULESET_NAME);
    config.setFileName(DEFAULT_RULESET_FILE);
    map.put(DEFAULT_RULESET_ID, config);

    // HP_UX用のルールセットを定義する。
    hpUxRuleSetConfig.setId(DEFAULT_HP_UX_RULESET_ID);
    hpUxRuleSetConfig.setName(DEFAULT_HP_UX_RULESET_NAME);
    hpUxRuleSetConfig.setFileName(DEFAULT_HP_UX_RULESET_FILE);
    map.put(DEFAULT_HP_UX_RULESET_ID, hpUxRuleSetConfig);

    // java用のルールセットを定義する。
    javaRuleSetConfig.setId(DEFAULT_JAVA_RULESET_ID);
    javaRuleSetConfig.setName(DEFAULT_JAVA_RULESET_NAME);
    javaRuleSetConfig.setFileName(DEFAULT_JAVA_RULESET_FILE);
    map.put(DEFAULT_JAVA_RULESET_ID, javaRuleSetConfig);

    // DB用のルールセットを定義する。
    dbRuleSetConfig.setId(DEFAULT_DB_RULESET_ID);
    dbRuleSetConfig.setName(DEFAULT_DB_RULESET_NAME);
    dbRuleSetConfig.setFileName(DEFAULT_DB_RULESET_FILE);
    map.put(DEFAULT_DB_RULESET_ID, dbRuleSetConfig);

    return map;
  }
  /**
   * プリファレンスストアにルールセット定義を保存する。
   *
   * @param config ルールセット定義
   */
  public static void saveRuleSet(final RuleSetConfig config) {
    String id = config.getId();

    preferenceMap__.put(CONFIG_RULESET_NAME_PREFIX + id, config.getName());
    preferenceMap__.put(CONFIG_RULESET_FILE_PREFIX + id, config.getFileName());
  }