svnno****@sourc*****
svnno****@sourc*****
2009年 9月 15日 (火) 00:02:22 JST
Revision: 3562 http://sourceforge.jp/projects/jiemamy/svn/view?view=rev&revision=3562 Author: daisuke_m Date: 2009-09-15 00:02:22 +0900 (Tue, 15 Sep 2009) Log Message: ----------- ScriptModelを修正。 Modified Paths: -------------- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultSqlEmitter.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/script/ScriptModelImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/sql/SqlStatementImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomBuilder.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/script/PlainScriptEngine.java hercules/trunk/jiemamy-integration-test/src/test/java/org/jiemamy/internal/serializer/JiemamySerializerTest.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/Jiemamy.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptEngine.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptModel.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/package-info.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/utils/Advisable.java zeus/trunk/jiemamy-test-helper/src/main/java/org/jiemamy/internal/test/ModelUtil.java Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultSqlEmitter.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultSqlEmitter.java 2009-09-14 15:01:27 UTC (rev 3561) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultSqlEmitter.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -97,13 +97,7 @@ // THINK RootBeginScript と CreateSchemaStatement、どっちが先? - ScriptModel rootBeginScriptModel = rootModel.getBeginScript(); - if (rootBeginScriptModel != null) { - String beginScriptResilt = rootBeginScriptModel.process(); - if (StringUtils.isEmpty(beginScriptResilt) == false) { - result.add(new SqlStatementImpl(Literal.of(beginScriptResilt, LiteralType.FRAGMENT))); - } - } + emitScript(rootModel.getBeginScript(), result); if (StringUtils.isEmpty(rootModel.getSchemaName()) == false && config.emitCreateSchemaStatement()) { if (config.emitDropStatements()) { @@ -127,14 +121,9 @@ && Boolean.TRUE.equals(entityModel.getAdapter(Disablable.class).isDisabled())) { continue; } - ScriptModel entityBeginScriptModel = entityModel.getBeginScript(); - if (entityBeginScriptModel != null) { - String beginScriptResult = entityBeginScriptModel.process(); - if (StringUtils.isEmpty(beginScriptResult) == false) { - result.add(new SqlStatementImpl(Literal.of(beginScriptResult, LiteralType.FRAGMENT))); - } - } + emitScript(entityModel.getBeginScript(), result); + result.add(emitCreateStatement(entityModel)); if (entityModel instanceof TableModel) { @@ -151,13 +140,8 @@ result.add(emitCreateIndexStatement(tableModel, indexModel)); } } - ScriptModel entityEndScriptModel = entityModel.getEndScript(); - if (entityEndScriptModel != null) { - String endScriptResult = entityEndScriptModel.process(); - if (StringUtils.isEmpty(endScriptResult) == false) { - result.add(new SqlStatementImpl(Literal.of(endScriptResult, LiteralType.FRAGMENT))); - } - } + + emitScript(entityModel.getEndScript(), result); } int dataSetIndex = config.getDataSetIndex(); @@ -188,13 +172,7 @@ result.add(new SqlStatementImpl(Keyword.of("COMMIT"), Separator.SEMICOLON)); } - ScriptModel rootEndScriptModel = rootModel.getEndScript(); - if (rootEndScriptModel != null) { - String endScriptResult = rootEndScriptModel.process(); - if (StringUtils.isEmpty(endScriptResult) == false) { - result.add(new SqlStatementImpl(Literal.of(endScriptResult, LiteralType.FRAGMENT))); - } - } + emitScript(rootModel.getEndScript(), result); return result; } @@ -369,6 +347,22 @@ return new SqlStatementImpl(tokens); } + private void emitScript(ScriptModel script, List<SqlStatement> result) { + if (script == null) { + return; + } + + try { + String beginScriptResilt = script.process(); + if (StringUtils.isEmpty(beginScriptResilt) == false) { + result.add(new SqlStatementImpl(Literal.of(beginScriptResilt, LiteralType.FRAGMENT))); + } + } catch (ClassNotFoundException e) { + result.add(new SqlStatementImpl(Literal.of("-- ERROR: Cannot resolve " + script.getScriptEngineClassName() + + "\n", LiteralType.FRAGMENT))); + } + } + /** * 属性の出力戦略列挙型。 Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/script/ScriptModelImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/script/ScriptModelImpl.java 2009-09-14 15:01:27 UTC (rev 3561) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/script/ScriptModelImpl.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -20,8 +20,6 @@ import java.util.UUID; -import org.apache.commons.lang.Validate; - import org.jiemamy.Jiemamy; import org.jiemamy.internal.model.AbstractJiemamyElement; import org.jiemamy.model.script.ScriptEngine; @@ -37,7 +35,7 @@ private String script; - private String scriptEngine = PlainScriptEngine.class.getName(); + private String scriptEngineClassName = PlainScriptEngine.class.getName(); /** @@ -54,36 +52,22 @@ return script; } - public String getScriptEngine() { - return scriptEngine; + public String getScriptEngineClassName() { + return scriptEngineClassName; } - public String process() { + public String process() throws ClassNotFoundException { ScriptEngine engine; - try { - engine = getJiemamy().getInstanceProvider(ScriptEngine.class).getInstance(scriptEngine); - return engine.process(script); - } catch (ClassNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return script; + engine = getJiemamy().getInstanceProvider(ScriptEngine.class).getInstance(scriptEngineClassName); + return engine.process(script); } public void setScript(String script) { this.script = script; } - public void setScriptEngine(ScriptEngine scriptEngine) { - Validate.notNull(scriptEngine); - if (ScriptEngine.class.isAssignableFrom(scriptEngine.getClass()) == false) { - throw new IllegalArgumentException(); - } - this.scriptEngine = scriptEngine.getClass().getName(); + public void setScriptEngineClassName(String scriptEngine) { + scriptEngineClassName = scriptEngine; } - public void setScriptEngine(String scriptEngine) { - this.scriptEngine = scriptEngine; - } - } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/sql/SqlStatementImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/sql/SqlStatementImpl.java 2009-09-14 15:01:27 UTC (rev 3561) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/sql/SqlStatementImpl.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -69,8 +69,13 @@ } /** - * TODO for daisuke - * @return the tokens + * ステートメントを構成するトークンシーケンスを取得する。 + * + * <p>このメソッドは、インスタンスの持つフィールドをそのまま返す。返される{@link List}を直接操作することで、 + * このオブジェクトのフィールドとして保持される{@link List}を変更することができる。</p> + * + * @return トークンシーケンス + * @see #toTokens() */ public List<Token> getTokens() { return tokens; Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomBuilder.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomBuilder.java 2009-09-14 15:01:27 UTC (rev 3561) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomBuilder.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -420,7 +420,7 @@ Element scriptElement; scriptElement = DomUtil.newChild(parentElement, qName); scriptElement.setAttribute(CoreQName.ID.getQNameString(), scriptModel.getId().toString()); - scriptElement.setAttribute(CoreQName.ENGINE.getQNameString(), scriptModel.getScriptEngine()); + scriptElement.setAttribute(CoreQName.ENGINE.getQNameString(), scriptModel.getScriptEngineClassName()); scriptElement.setTextContent(scriptModel.getScript()); writeAdapters(parentElement, scriptModel.getAdapters()); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java 2009-09-14 15:01:27 UTC (rev 3561) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -513,7 +513,7 @@ scriptModel = factory.newModel(ScriptModel.class, getUUID(script, CoreQName.ID)); Attr engine = smartXpath.getAttr(script, "@engine"); if (engine != null) { - scriptModel.setScriptEngine(engine.getValue()); + scriptModel.setScriptEngineClassName(engine.getValue()); } scriptModel.setScript(script.getTextContent()); } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/script/PlainScriptEngine.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/script/PlainScriptEngine.java 2009-09-14 15:01:27 UTC (rev 3561) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/script/PlainScriptEngine.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -21,7 +21,7 @@ import org.jiemamy.model.script.ScriptEngine; /** - * TODO for daisuke + * スクリプトの内容をそのまま出力するプレーン文字列スクリプトエンジン。 * * @author daisuke */ Modified: hercules/trunk/jiemamy-integration-test/src/test/java/org/jiemamy/internal/serializer/JiemamySerializerTest.java =================================================================== --- hercules/trunk/jiemamy-integration-test/src/test/java/org/jiemamy/internal/serializer/JiemamySerializerTest.java 2009-09-14 15:01:27 UTC (rev 3561) +++ hercules/trunk/jiemamy-integration-test/src/test/java/org/jiemamy/internal/serializer/JiemamySerializerTest.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -150,8 +150,8 @@ assertThat(rootModel.getSchemaName(), is("FOO")); assertThat(rootModel.getBeginScript().getScript(), is("BEGIN;")); assertThat(rootModel.getEndScript().getScript(), is("COMMIT;")); - assertThat(rootModel.getBeginScript().getScriptEngine(), is(PlainScriptEngine.class.getName())); - assertThat(rootModel.getEndScript().getScriptEngine(), is(PlainScriptEngine.class.getName())); + assertThat(rootModel.getBeginScript().getScriptEngineClassName(), is(PlainScriptEngine.class.getName())); + assertThat(rootModel.getEndScript().getScriptEngineClassName(), is(PlainScriptEngine.class.getName())); assertThat(rootModel.getDescription(), is("Jiemamyテストモデル1")); assertThat(rootModel.getEntities().size(), is(3)); Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/Jiemamy.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/Jiemamy.java 2009-09-14 15:01:27 UTC (rev 3561) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/Jiemamy.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -77,7 +77,7 @@ * @since 0.2 */ public static Jiemamy newInstance() { - return newInstance(findDefaultImplementation(), new DefaultInstanceProvider<Dialect>()); + return newInstance(findDefaultImplementation(), new HashMap<Class<?>, InstanceProvider<?>>()); } /** @@ -101,6 +101,7 @@ * @throws IllegalArgumentException 引数に{@code null}を与えた場合 * @since 0.2 */ + @Deprecated public static Jiemamy newInstance(InstanceProvider<Dialect> defaultDialectProvider) { return new Jiemamy(findDefaultImplementation(), defaultDialectProvider); } @@ -127,7 +128,7 @@ * @since 0.2 */ public static Jiemamy newInstance(JiemamyImplementation defaultImplementation) { - return newInstance(defaultImplementation, new DefaultInstanceProvider<Dialect>()); + return newInstance(defaultImplementation, new HashMap<Class<?>, InstanceProvider<?>>()); } /** @@ -152,12 +153,65 @@ * @throws IllegalArgumentException 引数に{@code null}を与えた場合 * @since 0.2 */ + @Deprecated public static Jiemamy newInstance(JiemamyImplementation implementation, InstanceProvider<Dialect> defaultDialectProvider) { return new Jiemamy(implementation, defaultDialectProvider); } /** + * Jiemamyインスタンスを生成する。 + * + * <p>このメソッドで初期化を行った場合、各動作のデフォルトは下記の通りとなる。</p> + * + * <table style="border:1px solid black; border-collapse: collapse;"> + * <tr> + * <td style="border:1px solid black">{@link JiemamyFactory}で使用されるデフォルトのJiemamy実装</td> + * <td style="border:1px solid black">引数に指定したもの</td> + * </tr> + * <tr> + * <td style="border:1px solid black">デフォルトの{@link Dialect}プロバイダ</td> + * <td style="border:1px solid black">引数に指定したもの</td> + * </tr> + * </table> + * + * @param implementation {@link JiemamyFactory}で使用されるデフォルトのJiemamy実装 + * @param instanceProviders {@link JiemamyFactory}で使用されるデフォルトのインスタンス取得戦略 + * @return Jiemamyインスタンス + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @since 0.2 + */ + public static Jiemamy newInstance(JiemamyImplementation implementation, + Map<Class<?>, InstanceProvider<?>> instanceProviders) { + return new Jiemamy(implementation, instanceProviders); + } + + /** + * Jiemamyインスタンスを生成する。 + * + * <p>このメソッドで初期化を行った場合、各動作のデフォルトは下記の通りとなる。</p> + * + * <table style="border:1px solid black; border-collapse: collapse;"> + * <tr> + * <td style="border:1px solid black">{@link JiemamyFactory}で使用されるデフォルトのJiemamy実装</td> + * <td style="border:1px solid black">Artemis</td> + * </tr> + * <tr> + * <td style="border:1px solid black">デフォルトの{@link Dialect}プロバイダ</td> + * <td style="border:1px solid black">引数に指定したもの</td> + * </tr> + * </table> + * + * @param instanceProviders {@link JiemamyFactory}で使用されるデフォルトのインスタンス取得戦略のMap + * @return Jiemamyインスタンス + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @since 0.2 + */ + public static Jiemamy newInstance(Map<Class<?>, InstanceProvider<?>> instanceProviders) { + return new Jiemamy(findDefaultImplementation(), instanceProviders); + } + + /** * デフォルトの{@link JiemamyImplementation}実装のインスタンスを取得する。 * * @return デフォルトのJiemamy実装 @@ -186,8 +240,7 @@ /** デフォルトで使用するJiemamy実装 */ private final JiemamyImplementation defaultImplementation; - /** デフォルトで使用する{@link Dialect}取得戦略 */ - private final InstanceProvider<Dialect> dialectProvider; + private final Map<Class<?>, InstanceProvider<?>> instanceProviders; /** @@ -197,15 +250,34 @@ * @param dialectProvider デフォルトで使用する{@link Dialect}取得戦略 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 */ + @Deprecated private Jiemamy(JiemamyImplementation defaultImplementation, InstanceProvider<Dialect> dialectProvider) { if (defaultImplementation == null || dialectProvider == null) { throw new IllegalArgumentException(); } this.defaultImplementation = defaultImplementation; - this.dialectProvider = dialectProvider; + + Map<Class<?>, InstanceProvider<?>> instanceProviders = new HashMap<Class<?>, InstanceProvider<?>>(); + instanceProviders.put(Dialect.class, dialectProvider); + this.instanceProviders = instanceProviders; } /** + * インスタンスを生成する。 + * + * @param defaultImplementation デフォルトで使用するJiemamy実装 + * @param instanceProviders デフォルトで使用するインスタンス取得戦略群 + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + */ + private Jiemamy(JiemamyImplementation defaultImplementation, Map<Class<?>, InstanceProvider<?>> instanceProviders) { + if (defaultImplementation == null || instanceProviders == null) { + throw new IllegalArgumentException(); + } + this.defaultImplementation = defaultImplementation; + this.instanceProviders = new HashMap<Class<?>, InstanceProvider<?>>(instanceProviders); + } + + /** * {@link RootModel}を{@link SqlStatement}のリストに変換する。 * * @param rootModel 変換対象 @@ -236,12 +308,15 @@ * @throws ClassNotFoundException SQL方言クラスがクラスパス内に見つからなかった場合 * @throws IllegalArgumentException 引数に{@code null}を与えた場合 * @since 0.2 + * @deprecated use {@link #getInstanceProvider(Class)}, {@link RootModel#getDialectClassName()} + * and {@link InstanceProvider#getInstance(String)} */ + @Deprecated public Dialect getDialect(RootModel rootModel) throws ClassNotFoundException { if (rootModel == null) { throw new IllegalArgumentException("The validated object is null"); } - return dialectProvider.getInstance(rootModel.getDialectClassName()); + return getInstanceProvider(Dialect.class).getInstance(rootModel.getDialectClassName()); } /** @@ -269,15 +344,19 @@ } /** - * TODO for daisuke + * インスタンス取得戦略を取得する。 * - * @param <T> - * @param clazz - * @return - * @since 0.2 + * @param <T> インスタンス取得対象の型 + * @param clazz インスタンス取得対象の型 + * @return インスタンス取得戦略 + * @since 0.3 */ public <T>InstanceProvider<T> getInstanceProvider(Class<T> clazz) { - return new DefaultInstanceProvider<T>(); + InstanceProvider<T> instanceProvider = (InstanceProvider<T>) instanceProviders.get(clazz); + if (instanceProvider == null) { + return new DefaultInstanceProvider<T>(); + } + return instanceProvider; } /** Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptEngine.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptEngine.java 2009-09-14 15:01:27 UTC (rev 3561) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptEngine.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -19,13 +19,20 @@ package org.jiemamy.model.script; /** - * TODO for daisuke + * スクリプトの処理エンジンインターフェイス。 * - * @since 0.2 + * @since 0.3 * @author daisuke */ public interface ScriptEngine { + /** + * スクリプトを実行し、結果を得る。 + * + * @param script 実行するスクリプト + * @return スクリプト実行結果 + * @since 0.3 + */ String process(String script); } Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptModel.java 2009-09-14 15:01:27 UTC (rev 3561) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/script/ScriptModel.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -21,23 +21,52 @@ import org.jiemamy.model.JiemamyElement; /** - * TODO for daisuke + * 開始/終了スクリプトモデル。 * * @since 0.3 * @author daisuke */ public interface ScriptModel extends JiemamyElement { + /** + * スクリプトを取得する。 + * + * @return スクリプト + * @since 0.3 + */ String getScript(); - String getScriptEngine(); + /** + * スクリプトエンジンのクラス名を取得する。 + * + * @return スクリプトエンジンのクラス名 + * @since 0.3 + */ + String getScriptEngineClassName(); - String process(); + /** + * スクリプトを実行し、結果を得る。 + * + * @return スクリプト実行結果 + * @throws ClassNotFoundException スクリプトエンジンのクラスが解決できない場合 + * @since 0.3 + */ + String process() throws ClassNotFoundException; + /** + * スクリプトを設定する。 + * + * @param script スクリプト + * @since 0.3 + */ void setScript(String script); - void setScriptEngine(ScriptEngine scriptEngine); + /** + * スクリプトエンジンのクラス名を設定する。 + * + * @param scriptEngineClassName スクリプトエンジンのクラス名 + * @since 0.3 + */ + void setScriptEngineClassName(String scriptEngineClassName); - void setScriptEngine(String scriptEngine); - } Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/package-info.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/package-info.java 2009-09-14 15:01:27 UTC (rev 3561) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/package-info.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -19,7 +19,7 @@ * <p>JIRAのカテゴリが不明な場合は、<a href="http://jira.jiemamy.org/jira/browse/GEN">統括プロジェクト</a> * に対して課題登録をして頂ければ問題ありません。コミッタが適切なカテゴリに移動を行います。</p> * - * <p>全体把握の際は、このパッケージの次に{@link org.jiemamy.model}パッケージを把握するとよい。</p> + * <p>全体把握の際は、このパッケージの次に{@code org.jiemamy.model}パッケージを把握するとよい。</p> * * @author daisuke */ Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/utils/Advisable.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/utils/Advisable.java 2009-09-14 15:01:27 UTC (rev 3561) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/utils/Advisable.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -21,7 +21,7 @@ import org.jiemamy.model.script.ScriptModel; /** - * TODO for daisuke + * モデルのSQL出力前後に、任意のスクリプトを挿入可能なモデル。 * * @since 0.3 * @author daisuke Modified: zeus/trunk/jiemamy-test-helper/src/main/java/org/jiemamy/internal/test/ModelUtil.java =================================================================== --- zeus/trunk/jiemamy-test-helper/src/main/java/org/jiemamy/internal/test/ModelUtil.java 2009-09-14 15:01:27 UTC (rev 3561) +++ zeus/trunk/jiemamy-test-helper/src/main/java/org/jiemamy/internal/test/ModelUtil.java 2009-09-14 15:02:22 UTC (rev 3562) @@ -52,8 +52,8 @@ JiemamyFactory factory = jiemamy.getFactory(); RootModel rootModel = factory.getRootModel(); try { - Dialect dialect = jiemamy.getDialect(rootModel); - BuiltinDataTypeMold mold = dialect.findDataTypeMold(category); + Dialect dialect = jiemamy.getInstanceProvider(Dialect.class).getInstance(rootModel.getDialectClassName()); + BuiltinDataTypeMold mold = dialect.getMoldManager().findDataTypeMold(category); return factory.newDataType(mold); } catch (ClassNotFoundException e) { throw new UnexpectedConditionError("", e); // TODO doc