RuleDictionaryModelオブジェクトの作成方法

ルール・ディクショナリ・エディタ・コンポーネントには、RuleDictionaryModelオブジェクトを作成するために、oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModelオブジェクトが必要です。

RuleDictionaryModelオブジェクトを作成するには:

  1. プロジェクトにJavaクラス(たとえばSomeBean.java)を作成するには、「ファイル」メニューから、「新規」を選択し、次に「Javaクラス」を選択します。
  2. SomeBean.javaで、RuleDictionaryModelオブジェクトを返すメソッドを指定します。このルール・ファイルの場所およびパスを指定する必要があります。SomeBean.javaの例を次に示します。
    package view;
     
    import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.Serializable;
     
    import java.net.MalformedURLException;
    import java.net.URL;
     
    import oracle.bpel.ruledictionarydc.model.impl.RuleDictionaryModel;
    import oracle.bpel.ruledictionarydc.model.impl.RulesEditorPreferencesImpl;
    import oracle.bpel.ruledictionarydc.model.interfaces.RulesEditorPreferences;
    import oracle.bpel.rulesdc.model.decisiontable.impl.DecisionTablePrefsImpl;
    import oracle.bpel.rulesdc.model.decisiontable.interfaces.DecisionTablePrefs;
    import oracle.bpel.rulesdc.model.impl.IfThenPreferencesImpl;
    import oracle.bpel.rulesdc.model.interfaces.IfThenPreferences;
    import oracle.bpel.rulessharedutils.impl.RulesSharedUtils;
     
    import oracle.rules.sdk2.decisionpoint.DecisionPointDictionaryFinder;
    import oracle.rules.sdk2.dictionary.DictionaryFinder;
    import oracle.rules.sdk2.dictionary.RuleDictionary;
    import oracle.rules.sdk2.exception.SDKException;
     
    public class SomeBean {
        private RuleDictionaryModel ruleDictModel;
        private RulesEditorPreferences rulesEditorPrefs;
        private boolean viewOnly = true;
     
        //on windows
        //private static final String RULES_FILE1 =
     "file:///D:/scratch/asuraj/system_MAIN/rules_
     files/insurancequoteproject/CarInsuranceRules.rules";
        
        // on linux
        private static final String RULES_FILE1 =
        "file:////scratch/asuraj/backup/rules_files/ApprovalRules.rules";
        
        public SomeBean() {
            super();
        }
     
        public RuleDictionaryModel getRuleDictModel() {
            if (ruleDictModel != null)
                return ruleDictModel;
     
        ruleDictModel = new RuleDictionaryModel(openRulesDict(RULES_FILE1, new
        DecisionPointDictionaryFinder()));
        return ruleDictModel;
        }
     
        public void saveDictionary() {
            RuleDictionary dict = null;
    
     
            if (this.ruleDictModel == null)
                return;
            dict = this.ruleDictModel.getRuleDictionary().getDictionary();
     
     
            if (dict == null)
                return;
     
            if (dict.isModified())
                RulesSharedUtils.updateDictionary(dict);
            if (!dict.isTransactionInProgress())
                saveDictionary(dict, RULES_FILE1);
        }
     
        public void validate() {
            if (this.ruleDictModel == null)
                return;
     
            this.ruleDictModel.validate();
        }
     
        public void toggleMode() {
            viewOnly = !viewOnly;
        }
     
        public boolean isViewOnly() {
            return viewOnly;
        }
     
        public RulesEditorPreferences getRulesEditorPrefs() {
            if (rulesEditorPrefs == null)
                rulesEditorPrefs = new MyRulesEditorPrefs();
            return rulesEditorPrefs;
        }
     
        //utility methods
     
        public static RuleDictionary openRulesDict(String fileName, DictionaryFinder finder) {
            URL url = null;
            try {
                url = new URL(fileName);
            } catch (MalformedURLException e) {
                System.err.println(e);
                return null;
            }
            RuleDictionary dict = null;
     
            try {
                dict = readFromDisk(url, finder);
            } catch (Exception e) {
                System.err.println(e);
                return null;
            }
            return dict;
        }
    
        public static RuleDictionary readFromDisk(URL dictURL, DictionaryFinder
     finder) {
            BufferedReader buf = null;
            try {
                buf = new BufferedReader(new
     InputStreamReader(dictURL.openStream(), "UTF-8"));
                return RuleDictionary.readDictionary(buf, finder);
            } catch (SDKException e) {
                System.err.println(e);
            } catch (IOException e) {
                System.err.println(e);
            } finally {
                if (buf != null)
                    try {
                        buf.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
            }
            return null;    }    public static boolean saveDictionary(RuleDictionary dict, String
     ruleFileName) {
            if (dict == null || ruleFileName == null)
                return false;
    
            if (dict.isTransactionInProgress())
                System.out.println("Transaction in progress, cannot save
     dictionary");
    
            try {
                writeToDisk(dict, new URL(ruleFileName));
            } catch (MalformedURLException e) {
                System.err.println(e);
                return false;
            } catch (Exception e) {
                System.err.println(e);
                return false;
            }
            return true;
        }
    
        public static void writeToDisk(RuleDictionary dic, URL dictURL) {
            OutputStreamWriter writer = null;
            try {
                writer = new OutputStreamWriter(new
     FileOutputStream(dictURL.getPath()), "UTF-8");
                dic.writeDictionary(writer);
            } catch (IOException e) {
                System.err.println(e);
            } catch (SDKException e) {
                System.err.println(e);
            } finally {
                if (writer != null)
                    try {
                        writer.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
            }
        }
    
        public class MyRulesEditorPrefs extends RulesEditorPreferencesImpl
     implements Serializable {
    
            private DecisionTablePrefs dtPrefs;
            private IfThenPreferences ifThenPrefs;
    
            @Override
            public DecisionTablePrefs getDecisionTablePreferences() {
                if (dtPrefs == null)
                    dtPrefs = new DTPreferences();
                return dtPrefs;
            }
    
            @Override
            public IfThenPreferences getIfThenPreferences() {
                if (ifThenPrefs == null)
                    ifThenPrefs = new MyIfThenPrefs();
                return ifThenPrefs;
            }
    
            @Override
            public boolean isShowRSButtons() {
                return true;
            }
        }
    
        public class MyIfThenPrefs extends IfThenPreferencesImpl implements
     Serializable {
    
            @Override
            public boolean isGenericAction() {
                return true;
            }
    
            @Override
            public boolean isGenericCondition() {
                return true;
            }
        }    public class DTPreferences extends DecisionTablePrefsImpl implements
     Serializable {
    
            @Override
            public boolean isShowDTButtons() {
                return true;
            }
        }
    }
    
  3. adfc-config.xmlのSomeBean.javaを指します(Bean名はsomeBeanで、スコープはsessionです)。たとえば、adfc-config.xmlです。
  4. 「項目」「Javaクラス」が選択されていることを確認し、「OK」をクリックして「Javaクラスの作成」ダイアログ・ボックスを表示します。
    <?xml version="1.0" encoding="UTF-8" ?>
    <adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
      <managed-bean id="__1">
        <managed-bean-name>someBean</managed-bean-name>
        <managed-bean-class>view.SomeBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
      </managed-bean>
    </adfc-config>
    
  5. ADF/JSFフレームワークによって、SomeBean.javaへのコールが複数回実行され、ユーザー・インタフェースがレンダリングされます。たとえば、someBean.ruleDictModelが複数回コールされます。そのため、毎回再作成するのではなく、ruleDictModelを一度作成したら、それをキャッシュして返すことは、より効率的です。