/** * ルールセット定義を取得する。<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; }
/** * ルールをコピーします。<br> * * @param orgId コピー元 ID * @param dstId コピー先 ID * @param dstName コピー先ルールセットの名前 * @throws RuleCreateException ルールセット定義ファイル読み込みに失敗した場合 */ public void copyRuleSetDef(final String orgId, final String dstId, final String dstName) throws RuleCreateException { RuleSetDef orgDef = getRuleSetDef(orgId); RuleSetDef dstDef = new RuleSetDef(orgDef); dstDef.setName(dstName); this.ruleSetMap_.put(dstId, dstDef); }
/** * アクティブなルールセットに含まれる、ルールインスタンスの一覧を取得する。 アクティブなルールセット中の要素中にあるルール名が不正であるために、 * インスタンス生成に失敗した場合には、RuleCreateExceptionをスローする。 * * @return ルールインスタンスの一覧 * @throws RuleCreateException ルール定義ファイルの読み込みに失敗した場合 */ public List<PerformanceRule> getActiveRules() throws RuleCreateException { List<PerformanceRule> ruleList = new ArrayList<PerformanceRule>(); List<String> errorMessageList = new ArrayList<String>(); RuleSetDef ruleSetDef = getActiveRuleSetDef(); for (RuleDef ruleDef : ruleSetDef.getRuleDefs()) { try { PerformanceRule rule = RuleInstanceUtil.createRuleInstance(ruleDef); if (rule != null) { ruleList.add(rule); } } catch (RuleCreateException ex) { errorMessageList.add(ex.getMessage()); } } if (errorMessageList.size() > 0) { String[] messages = errorMessageList.toArray(new String[errorMessageList.size()]); throw new RuleCreateException(RULE_CREATE_ERROR, null, messages); } return ruleList; }
/** ルールセット定義などをプリファレンスストア、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>()); }