svnno****@sourc*****
svnno****@sourc*****
2009年 3月 23日 (月) 12:57:47 JST
Revision: 2980 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=2980 Author: daisuke_m Date: 2009-03-23 12:57:47 +0900 (Mon, 23 Mar 2009) Log Message: ----------- [ECL-19] ファサードは JiemamyFactory#getFacade() で取得できるようになった。 型安全じゃないのが気になるが…。 [ECL-11] TypeOptionManagerを1カラムあたり1インスタンス生成するようにした。 setNotNull/setCheckメソッドが残っていたので、setNotNullConstraint/setCheckConstraintにリネーム。 Modified Paths: -------------- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/Artemis.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/ArtemisJiemamyFactory.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/enhance/FactoryExtension.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainModelImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder2.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ArtemisJiemamyFactoryTest.java artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/ArtemisView.java artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewFacadeImplTest.java artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewPropertyTest.java charon/jiemamy-html-exporter/trunk/pom.xml hestia/trunk/org.jiemamy.eclipse.dialect.mysql/src/main/java/org/jiemamy/eclipse/dialect/mysql/MySqlTypeOptionHandler.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/JiemamyUIPlugin.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ExportAction.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ImportAction.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeColorCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeConstraintCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateBendpointCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateConnectionCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateNodeCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteBendpointCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteConnectionCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteNodeCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DirectEditNodeCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/MoveBendpointCommand.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/AbstractTypeOptionHandler.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionHandler.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialog.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ForeignKeyEditPart.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/RootEditPart.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/StickyEditPart.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/TableEditPart.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ViewEditPart.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/TableTreeEditPart.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/ViewTreeEditPart.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/Jiemamy.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyFactory.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyImplementation.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DomainModel.java Added Paths: ----------- artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancePointcut.java artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancer.java zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataTypeHolder.java -------------- next part -------------- Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/Artemis.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/Artemis.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/Artemis.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -26,6 +26,7 @@ import org.apache.commons.lang.Validate; import org.jiemamy.exception.UnexpectedConditionError; +import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.internal.ArtemisJiemamyFactory; import org.jiemamy.internal.EventBrokerImpl; import org.jiemamy.internal.ReferenceResolverImpl; @@ -148,6 +149,10 @@ return ArtemisVersion.INSTANCE; } + public <T extends JiemamyFacade>T newFacade(Jiemamy jiemamy) { + return getFactory(jiemamy).getFacade(); + } + private static class ArtemisVersion implements Version { Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/ArtemisJiemamyFactory.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/ArtemisJiemamyFactory.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/ArtemisJiemamyFactory.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -30,6 +30,7 @@ import org.jiemamy.OptionalSpec; import org.jiemamy.dialect.BuiltinDataTypeMold; import org.jiemamy.exception.IllegalImplementationException; +import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.internal.enhance.FactoryExtension; import org.jiemamy.internal.model.datatype.BuiltinDataTypeImpl; import org.jiemamy.internal.serializer.JiemamyDomSerializer; @@ -46,11 +47,7 @@ import org.jiemamy.model.entity.TableRef; import org.jiemamy.serializer.JiemamySerializer; import org.jiemamy.utils.ValidateUtil; -import org.jiemamy.utils.builder.ColumnBuilder; -import org.jiemamy.utils.builder.ColumnBuilderImpl; import org.jiemamy.utils.builder.JiemamyBuilder; -import org.jiemamy.utils.builder.TableBuilder; -import org.jiemamy.utils.builder.TableBuilderImpl; /** * {@link JiemamyFactory}のArtemis用実装。 @@ -69,6 +66,12 @@ private RootModel rootModel; + @SuppressWarnings("unchecked") + public <T extends JiemamyFacade>T getFacade() { + checkInitialized(); + return (T) new JiemamyFacadeImpl(jiemamy); + } + public JiemamyImplementation getImplementation() { checkInitialized(); return implementation; @@ -111,16 +114,20 @@ return rootModel != null; } - @SuppressWarnings("unchecked") + public <T>T newAdapter(Class<T> clazz) { + Validate.notNull(clazz); + checkInitialized(); + T adapter = new FactoryExtension<T>().newAdapter(clazz); + if (adapter == null) { + throw new IllegalArgumentException(); + } + return adapter; + } + public <M extends JiemamyElement, T extends JiemamyBuilder<M>>T newBuilder(Class<T> clazz) { Validate.notNull(clazz); checkInitialized(); - T builder = null; - if (clazz.getName().equals(TableBuilder.class.getName())) { - builder = (T) new TableBuilderImpl(this); - } else if (clazz.getName().equals(ColumnBuilder.class.getName())) { - builder = (T) new ColumnBuilderImpl(this); - } + T builder = new FactoryExtension<T>().newBuilder(clazz, jiemamy.getFactory()); if (builder == null) { throw new IllegalArgumentException(); } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/enhance/FactoryExtension.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/enhance/FactoryExtension.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/enhance/FactoryExtension.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -29,6 +29,7 @@ import java.util.UUID; import org.jiemamy.Jiemamy; +import org.jiemamy.JiemamyFactory; import org.jiemamy.ReferenceResolver; import org.jiemamy.dialect.generic.GenericDialect; import org.jiemamy.internal.model.RootModelImpl; @@ -74,7 +75,12 @@ import org.jiemamy.model.entity.ViewModel; import org.jiemamy.model.index.IndexColumnModel; import org.jiemamy.model.index.IndexModel; +import org.jiemamy.utils.Disablable; import org.jiemamy.utils.DisablableImpl; +import org.jiemamy.utils.builder.ColumnBuilder; +import org.jiemamy.utils.builder.ColumnBuilderImpl; +import org.jiemamy.utils.builder.TableBuilder; +import org.jiemamy.utils.builder.TableBuilderImpl; /** * factory-enhancerによる拡張ポイントとなる。 @@ -85,6 +91,49 @@ public class FactoryExtension<T> { /** + * TODO for daisuke + * + * @param clazz + * @return + */ + @SuppressWarnings("unchecked") + public T newAdapter(Class<T> clazz) { + T adapter = null; + if (clazz == Disablable.class) { + adapter = (T) new DisablableImpl(); + } else if (clazz.isInterface() == false) { + try { + adapter = clazz.newInstance(); + } catch (InstantiationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalAccessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return adapter; + } + + /** + * TODO for daisuke + * + * @param clazz + * @param factory + * @return + */ + @SuppressWarnings("unchecked") + public T newBuilder(Class<T> clazz, JiemamyFactory factory) { + T builder = null; + if (TableBuilder.class.isAssignableFrom(clazz)) { + builder = (T) new TableBuilderImpl(factory); + } else if (ColumnBuilder.class.isAssignableFrom(clazz)) { + builder = (T) new ColumnBuilderImpl(factory); + } + return builder; + } + + /** * 新しいインスタンスを生成する。 * * @param clazz 生成したいインスタンスの型 Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainModelImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainModelImpl.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/model/datatype/DomainModelImpl.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -26,6 +26,7 @@ import org.jiemamy.model.attribute.constraint.ColumnCheckConstraint; import org.jiemamy.model.attribute.constraint.NotNullConstraint; import org.jiemamy.model.datatype.BuiltinDataType; +import org.jiemamy.model.datatype.DataType; import org.jiemamy.model.datatype.DomainModel; /** @@ -119,12 +120,15 @@ dataType.registerAdapter(adapter); } - public void setCheck(ColumnCheckConstraint check) { + public void setCheckConstraint(ColumnCheckConstraint check) { checkConstraint = check; } - public void setDataType(BuiltinDataType dataType) { - this.dataType = dataType; + public void setDataType(DataType dataType) { + if ((dataType instanceof BuiltinDataType) == false) { + throw new IllegalArgumentException(); + } + this.dataType = (BuiltinDataType) dataType; } public void setDescription(String description) { @@ -139,7 +143,7 @@ this.name = name; } - public void setNotNull(NotNullConstraint notNullConstraint) { + public void setNotNullConstraint(NotNullConstraint notNullConstraint) { this.notNullConstraint = notNullConstraint; } 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-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -397,7 +397,7 @@ factory.newModel(NotNullConstraint.class, DomUtil.getUUID(nnNode, CoreQName.ID)); nnModel.setName(XpathUtil.getTextContent(nnElement, "core:name")); readAdapter(nnElement, nnModel); - domainModel.setNotNull(nnModel); + domainModel.setNotNullConstraint(nnModel); } Node checkNode = XpathUtil.getNode(domainNode, "core:columnCheck"); @@ -408,7 +408,7 @@ checkConstraint.setExpression(XpathUtil.getTextContent(checkElement, "core:expression")); readAdapter(checkElement, checkConstraint); checkConstraint.setName(XpathUtil.getTextContent(checkElement, "core:name")); - domainModel.setCheck(checkConstraint); + domainModel.setCheckConstraint(checkConstraint); } domainModel.setDescription(XpathUtil.getTextContent(domainNode, "core:description")); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -319,12 +319,12 @@ domainId.setDataType(new DataTypeBuilderImpl(factory, DataTypeCategory.INTEGER).build()); NotNullConstraint notNull = factory.newModel(NotNullConstraint.class, uuid.get("af4845dc-7f3a-434d-b5ac-2f25b74d7e76")); - domainId.setNotNull(notNull); + domainId.setNotNullConstraint(notNull); ColumnCheckConstraint check = factory.newModel(ColumnCheckConstraint.class, uuid.get("48b76d76-b288-480a-afa4-111247379f8d")); check.setName("hoge"); check.setExpression("VALUE > 0"); - domainId.setCheck(check); + domainId.setCheckConstraint(check); domainId.getDataType().getAdapter(SerialDataTypeAdapter.class).setSerial(true); rootModel.getDomains().add(domainId); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder2.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder2.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/test/TestModelBuilder2.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -314,7 +314,7 @@ idDomain = factory.newModel(DomainModel.class, uuid.get("9a3ba23c-b328-4c70-a32d-3e4be3ee3f08")); idDomain.setName("ID"); idDomain.setDataType(new DataTypeBuilderImpl(factory, DataTypeCategory.INTEGER).build()); - idDomain.setNotNull(factory.newModel(NotNullConstraint.class)); + idDomain.setNotNullConstraint(factory.newModel(NotNullConstraint.class)); idDomain.getAdapter(SerialDataTypeAdapter.class).setSerial(true); rootModel.getDomains().add(idDomain); Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ArtemisJiemamyFactoryTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ArtemisJiemamyFactoryTest.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ArtemisJiemamyFactoryTest.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -104,6 +104,7 @@ assertThat(factory.getImplementation(), is(notNullValue())); assertThat(factory.getSerializer(), is(notNullValue())); assertThat(factory.getSupportedSpecs(), is(notNullValue())); + assertThat(factory.getFacade(), is(notNullValue())); } /** Modified: artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/ArtemisView.java =================================================================== --- artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/ArtemisView.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/ArtemisView.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -24,6 +24,8 @@ import org.jiemamy.internal.enhance.ViewDomSerializerEnhancePointcut; import org.jiemamy.internal.enhance.ViewDomSerializerEnhancer; +import org.jiemamy.internal.enhance.ViewFacadeEnhancePointcut; +import org.jiemamy.internal.enhance.ViewFacadeEnhancer; import org.jiemamy.internal.enhance.ViewFactoryExtensionEnhancePointcut; import org.jiemamy.internal.enhance.ViewFactoryExtensionEnhancer; import org.jiemamy.utils.CollectionsUtil; @@ -42,6 +44,7 @@ enhances.add(new Enhance(new ViewFactoryExtensionEnhancePointcut(), new ViewFactoryExtensionEnhancer())); // enhances.add(new Enhance(new ViewFactoryExtensionEnhancePointcut2(), new ViewFactoryExtensionEnhancer2())); enhances.add(new Enhance(new ViewDomSerializerEnhancePointcut(), new ViewDomSerializerEnhancer())); + enhances.add(new Enhance(new ViewFacadeEnhancePointcut(), new ViewFacadeEnhancer())); return enhances; } Added: artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancePointcut.java =================================================================== --- artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancePointcut.java (rev 0) +++ artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancePointcut.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -0,0 +1,47 @@ +/* + * Copyright 2009 Jiemamy Project and the Others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.jiemamy.internal.enhance; + +import javassist.CtBehavior; +import javassist.CtClass; +import javassist.CtConstructor; +import javassist.NotFoundException; + +import org.jiemamy.JiemamyFactory; +import org.jiemamy.internal.JiemamyFacadeImpl; +import org.jiemamy.utils.enhancer.InvocationPointcut; + +/** + * {@link JiemamyFactory#getSerializer()}の拡張位置を指定するポイントカット。 + * + * @author daisuke + */ +public class ViewFacadeEnhancePointcut implements InvocationPointcut { + + public boolean isTarget(CtClass self, CtBehavior behavior) { + if (self.getName().equals(JiemamyFacadeImpl.class.getName()) == false) { + return false; + } + if ((behavior instanceof CtConstructor) == false) { + return false; + } + try { + return behavior.getParameterTypes().length == 1; + } catch (NotFoundException e) { + return false; + } + } +} Property changes on: artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancePointcut.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancer.java =================================================================== --- artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancer.java (rev 0) +++ artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancer.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -0,0 +1,36 @@ +/* + * Copyright 2009 Jiemamy Project and the Others. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.jiemamy.internal.enhance; + +import org.jiemamy.Jiemamy; +import org.jiemamy.JiemamyFactory; +import org.jiemamy.internal.JiemamyViewFacadeImpl; +import org.jiemamy.utils.enhancer.Invocation; +import org.jiemamy.utils.enhancer.InvocationHandler; + +/** + * {@link JiemamyFactory#getSerializer()}を拡張する。 + * + * @author daisuke + */ +public class ViewFacadeEnhancer implements InvocationHandler { + + public Object handle(Invocation invocation) throws Throwable { + // new JiemamyFacadeImpl() -> new JiemamyViewFacadeImpl(); + Jiemamy jiemamy = (Jiemamy) invocation.getArguments()[0]; + return new JiemamyViewFacadeImpl(jiemamy); + } +} Property changes on: artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/enhance/ViewFacadeEnhancer.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewFacadeImplTest.java =================================================================== --- artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewFacadeImplTest.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewFacadeImplTest.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -80,8 +80,8 @@ @Before public void setUp() { jiemamyWithView = Jiemamy.newInstance(new Artemis(new ArtemisView())); - viewFacade = new JiemamyViewFacadeImpl(jiemamyWithView); factory = jiemamyWithView.getFactory(); + viewFacade = factory.getFacade(); rootModel = factory.getRootModel(); referenceResolver = jiemamyWithView.getReferenceResolver(); diagramPresentationModel = factory.newModel(DiagramPresentationModel.class); Modified: artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewPropertyTest.java =================================================================== --- artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewPropertyTest.java 2009-03-22 03:38:28 UTC (rev 2979) +++ artemis/trunk/jiemamy-view/src/test/java/org/jiemamy/internal/JiemamyViewPropertyTest.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -104,12 +104,14 @@ Class<?> interfaceClass = annot.value(); String implClassName = interfaceClass.getName() + "Impl"; + implClassName = implClassName.replace(".model.", ".internal.model."); Class<?> targetModelClass; try { targetModelClass = Class.forName(implClassName); } catch (ClassNotFoundException e) { String packageName = ClassUtils.getPackageName(interfaceClass); + packageName = packageName.replace(".model.", ".internal.model."); String shortClassName = ClassUtils.getShortClassName(interfaceClass); implClassName = packageName + ".Abstract" + shortClassName; Modified: charon/jiemamy-html-exporter/trunk/pom.xml =================================================================== --- charon/jiemamy-html-exporter/trunk/pom.xml 2009-03-22 03:38:28 UTC (rev 2979) +++ charon/jiemamy-html-exporter/trunk/pom.xml 2009-03-23 03:57:47 UTC (rev 2980) @@ -53,23 +53,6 @@ <version>0.94</version> <scope>test</scope> </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>1.1.102</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.4</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.osgi</groupId> - <artifactId>osgi_R4_core</artifactId> - <version>1.0</version> - </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> @@ -96,17 +79,6 @@ <version>2.3.11</version> </dependency> <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - <version>1.8.0</version> - <exclusions> - <exclusion> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> <groupId>${project.groupId}</groupId> <artifactId>jiemamy-spec-core</artifactId> <version>0.2-SNAPSHOT</version> Modified: hestia/trunk/org.jiemamy.eclipse.dialect.mysql/src/main/java/org/jiemamy/eclipse/dialect/mysql/MySqlTypeOptionHandler.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.dialect.mysql/src/main/java/org/jiemamy/eclipse/dialect/mysql/MySqlTypeOptionHandler.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.dialect.mysql/src/main/java/org/jiemamy/eclipse/dialect/mysql/MySqlTypeOptionHandler.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -28,6 +28,9 @@ import org.jiemamy.dialect.mysql.adapter.Unsigned; import org.jiemamy.eclipse.editor.dialog.AbstractTypeOptionHandler; import org.jiemamy.eclipse.editor.dialog.EditListener; +import org.jiemamy.model.datatype.BuiltinDataType; +import org.jiemamy.model.datatype.DataType; +import org.jiemamy.model.datatype.DataTypeHolder; /** * TODO for daisuke @@ -40,16 +43,21 @@ private Button chkUnsigned; - private Unsigned unsigned; + private DataTypeHolder holder; - public void createControl(Composite composite, EditListener editListener, Class<?> adapterClass) { + public void createControl(DataTypeHolder holder, Composite composite, EditListener editListener) { logger.trace("createControl"); + this.holder = holder; - if (Unsigned.class.isAssignableFrom(adapterClass)) { - chkUnsigned = new Button(composite, SWT.CHECK); - chkUnsigned.setText("UNSIGNED"); // RESOURCE - chkUnsigned.addKeyListener(editListener); + DataType dataType = holder.getDataType(); + if (dataType instanceof BuiltinDataType) { + BuiltinDataType builtinDataType = (BuiltinDataType) dataType; + if (builtinDataType.hasAdapter(Unsigned.class)) { + chkUnsigned = new Button(composite, SWT.CHECK); + chkUnsigned.setText("UNSIGNED"); // RESOURCE + chkUnsigned.addKeyListener(editListener); + } } } @@ -63,21 +71,32 @@ setEnabledIfAlive(chkUnsigned, true); } - public void setValue(Object adapter) { + public void setValue(Class<?> adapterClass) { logger.trace("setValue"); - Class<?> adapterClass = adapter.getClass(); + DataType dataType = holder.getDataType(); + if ((dataType instanceof BuiltinDataType) == false) { + return; + } + BuiltinDataType builtinDataType = (BuiltinDataType) dataType; + if (Unsigned.class.isAssignableFrom(adapterClass)) { - unsigned = (Unsigned) adapter; - Boolean unsigned = this.unsigned.getUnsigned(); - chkUnsigned.setSelection(BooleanUtils.isTrue(unsigned)); + Unsigned unsigned = (Unsigned) builtinDataType.getAdapter(adapterClass); + Boolean isUnsigned = unsigned.getUnsigned(); + chkUnsigned.setSelection(BooleanUtils.isTrue(isUnsigned)); } } public void writeBackToAdapter() { logger.trace("writeBackToAdapter"); - if (isAlive(chkUnsigned) && unsigned != null) { + DataType dataType = holder.getDataType(); + if ((dataType instanceof BuiltinDataType) == false) { + return; + } + BuiltinDataType builtinDataType = (BuiltinDataType) dataType; + + if (isAlive(chkUnsigned) && builtinDataType.hasAdapter(Unsigned.class)) { boolean value = chkUnsigned.getSelection(); - unsigned.setUnsigned(value == false ? null : value); + builtinDataType.getAdapter(Unsigned.class).setUnsigned(value == false ? null : value); } } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/JiemamyUIPlugin.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/JiemamyUIPlugin.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/JiemamyUIPlugin.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -38,6 +38,7 @@ import org.jiemamy.eclipse.preference.JiemamyPreference; import org.jiemamy.eclipse.preference.JiemamyPreferenceImpl; +import org.jiemamy.eclipse.utils.ExceptionHandler; /** * Jiemamy Eclipse Core PluginのActivatorクラス。 @@ -115,7 +116,10 @@ * ログを記録する。 * * @param throwable 発生した例外等 + * @deprecated use {@link ExceptionHandler#handleException(Throwable)} + */ + @Deprecated public static void log(Throwable throwable) { IStatus status = null; if (throwable instanceof CoreException) { Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ExportAction.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ExportAction.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ExportAction.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -18,7 +18,6 @@ */ package org.jiemamy.eclipse.action; -import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.Validate; @@ -28,6 +27,7 @@ import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalViewer; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardDialog; @@ -43,6 +43,7 @@ import org.jiemamy.eclipse.ui.ExporterWizard; import org.jiemamy.eclipse.utils.ExceptionHandler; import org.jiemamy.model.RootModel; +import org.jiemamy.utils.CollectionsUtil; import org.jiemamy.utils.LogMarker; /** @@ -94,7 +95,7 @@ wizard.setInput(input); IStructuredSelection selection = (IStructuredSelection) getViewer().getSelection(); - List<Object> selectedModels = new ArrayList<Object>(); + List<Object> selectedModels = CollectionsUtil.newArrayList(); for (Object selectedObject : selection.toList()) { if (selectedObject instanceof EditPart) { EditPart editPart = (EditPart) selectedObject; @@ -115,12 +116,17 @@ // 実行 exporter.exportModel(rootModel, config); - // リフレッシュ - ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); + MessageDialog.openInformation(null, "export succeeded", "エクスポートが正常に完了しました。"); // RESOURCE } catch (ExportException e) { ExceptionHandler.handleException(e); - } catch (CoreException e) { - ExceptionHandler.handleException(e); + } finally { + // リフレッシュ + try { + ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, + new NullProgressMonitor()); + } catch (CoreException e) { + ExceptionHandler.handleException(e); + } } } } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ImportAction.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ImportAction.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ImportAction.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -18,7 +18,6 @@ */ package org.jiemamy.eclipse.action; -import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.Validate; @@ -28,6 +27,7 @@ import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalViewer; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardDialog; @@ -43,6 +43,7 @@ import org.jiemamy.eclipse.ui.ImporterWizard; import org.jiemamy.eclipse.utils.ExceptionHandler; import org.jiemamy.model.RootModel; +import org.jiemamy.utils.CollectionsUtil; import org.jiemamy.utils.LogMarker; /** @@ -93,7 +94,7 @@ wizard.setInput(input); IStructuredSelection selection = (IStructuredSelection) getViewer().getSelection(); - List<Object> selectedModels = new ArrayList<Object>(); + List<Object> selectedModels = CollectionsUtil.newArrayList(); for (Object selectedObject : selection.toList()) { if (selectedObject instanceof EditPart) { EditPart editPart = (EditPart) selectedObject; @@ -114,12 +115,18 @@ // 実行 importer.importModel(rootModel, config); - // リフレッシュ - ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); + MessageDialog.openInformation(null, "import succeeded", "インポートが正常に完了しました。"); // RESOURCE } catch (ImportException e) { ExceptionHandler.handleException(e); - } catch (CoreException e) { - ExceptionHandler.handleException(e); + } finally { + // リフレッシュ + try { + ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, + new NullProgressMonitor()); + } catch (CoreException e) { + ExceptionHandler.handleException(e); + } + } } } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeColorCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeColorCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeColorCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -22,7 +22,6 @@ import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.geometory.JmColor; import org.jiemamy.model.node.NodeAdapter; @@ -33,19 +32,19 @@ * @author daisuke */ public class ChangeNodeColorCommand extends Command { - + /** ダイアグラムエディタのインデックス(エディタ内のタブインデックス) */ private int diagramIndex; - + private NodeAdapter nodeAdapter; - + private JmColor newColor; - + private JiemamyViewFacade jiemamyFacade; - + private SavePoint save; + - /** * インスタンスを生成する。 * @@ -58,16 +57,16 @@ this.diagramIndex = diagramIndex; this.nodeAdapter = nodeAdapter; this.newColor = newColor; - - jiemamyFacade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + + jiemamyFacade = rootModel.getJiemamy().getFactory().getFacade(); } - + @Override public void execute() { save = jiemamyFacade.save(); jiemamyFacade.changeNodeColor(diagramIndex, nodeAdapter, newColor); } - + @Override public void undo() { jiemamyFacade.rollback(save); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeConstraintCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeConstraintCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/ChangeNodeConstraintCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -30,7 +30,6 @@ import org.jiemamy.eclipse.utils.ConvertUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.DiagramPresentationModel; import org.jiemamy.model.DiagramPresentations; import org.jiemamy.model.RootModel; @@ -47,25 +46,25 @@ * @author daisuke */ public class ChangeNodeConstraintCommand extends AbstractMovePositionCommand { - + private static Logger logger = LoggerFactory.getLogger(ChangeNodeConstraintCommand.class); - + private final RootModel rootModel; - + /** ダイアグラムエディタのインデックス(エディタ内のタブインデックス) */ private final int diagramIndex; - + private final NodeAdapter nodeAdapter; - + private final JmRectangle boundary; - + private final JmRectangle oldBoundary; - + private final EditPartViewer viewer; - + private SavePoint save; + - /** * インスタンスを生成する。 * @@ -77,7 +76,7 @@ */ public ChangeNodeConstraintCommand(RootModel rootModel, int diagramIndex, NodeAdapter nodeAdapter, JmRectangle boundary, EditPartViewer viewer) { - super(diagramIndex, new JiemamyViewFacadeImpl(rootModel.getJiemamy())); + super(diagramIndex, (JiemamyViewFacade) rootModel.getJiemamy().getFactory().getFacade()); this.rootModel = rootModel; this.diagramIndex = diagramIndex; this.nodeAdapter = nodeAdapter; @@ -86,13 +85,13 @@ oldBoundary = presentationModel.getNodeProfiles().get(nodeAdapter).getBoundary(); this.boundary = boundary; this.viewer = viewer; - + // 移動量の計算 int shiftX = boundary.x < 0 ? Math.abs(boundary.x) : 0; int shiftY = boundary.y < 0 ? Math.abs(boundary.y) : 0; setShift(new JmPoint(shiftX, shiftY)); } - + /** * インスタンスを生成する。 * @@ -106,39 +105,39 @@ Rectangle rectangle, EditPartViewer viewer) { this(rootModel, diagramIndex, nodeAdapter, ConvertUtil.convert(rectangle), viewer); } - + @Override public void execute() { logger.debug(LogMarker.LIFECYCLE, "execute"); - + JiemamyViewFacade jiemamyFacade = getJiemamyFacade(); save = jiemamyFacade.save(); // 本体の移動 jiemamyFacade.changeNodeBoundary(diagramIndex, nodeAdapter, boundary); - + // ベンドポイントの移動 shiftBendpoints(false); - + // 負領域に移動した際、全体を移動させ、すべて正領域に shiftPosition(false); } - + @Override public void undo() { JiemamyViewFacade jiemamyFacade = getJiemamyFacade(); jiemamyFacade.rollback(save); } - + private void shiftBendpoints(boolean positive) { JmPoint delta = JmPointUtil.delta(oldBoundary, boundary); - + // 選択されたモデルのリストを得る List<Object> selectedModels = new ArrayList<Object>(); for (Object obj : viewer.getSelectedEditParts()) { EditPart ep = (EditPart) obj; selectedModels.add(ep.getModel()); } - + // ベンドポイントも同時に移動させる(必要なもののみ) for (ConnectionAdapter connection : nodeAdapter.getSourceConnections()) { if (selectedModels.contains(connection.getSource()) && selectedModels.contains(connection.getTarget())) { Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateBendpointCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateBendpointCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateBendpointCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -23,7 +23,6 @@ import org.jiemamy.eclipse.utils.ConvertUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.connection.ConnectionAdapter; import org.jiemamy.model.geometory.JmPoint; @@ -34,20 +33,20 @@ * @author daisuke */ public class CreateBendpointCommand extends AbstractMovePositionCommand { - + private ConnectionAdapter connectionAdapter; - + private Point location; - + /** source側からtarget側に向かって数えたベンドポイントのインデックス */ private int bendpointIndex; - + private SavePoint save; - + /** ダイアグラムエディタのインデックス(エディタ内のタブインデックス) */ private int diagramIndex; + - /** * インスタンスを生成する。 * @@ -59,18 +58,18 @@ */ public CreateBendpointCommand(RootModel rootModel, int diagramIndex, ConnectionAdapter connectionAdapter, Point location, int bendpointIndex) { - super(diagramIndex, new JiemamyViewFacadeImpl(rootModel.getJiemamy())); + super(diagramIndex, (JiemamyViewFacade) rootModel.getJiemamy().getFactory().getFacade()); this.diagramIndex = diagramIndex; this.connectionAdapter = connectionAdapter; this.location = location; this.bendpointIndex = bendpointIndex; - + // 移動量の計算 int shiftX = location.x < 0 ? Math.abs(location.x) : 0; int shiftY = location.y < 0 ? Math.abs(location.y) : 0; setShift(new JmPoint(shiftX, shiftY)); } - + @Override public void execute() { JiemamyViewFacade jiemamyFacade = getJiemamyFacade(); @@ -78,11 +77,11 @@ jiemamyFacade.addBendpoint(diagramIndex, connectionAdapter, bendpointIndex, ConvertUtil.convert(location)); shiftPosition(false); } - + @Override public void undo() { JiemamyViewFacade jiemamyFacade = getJiemamyFacade(); jiemamyFacade.rollback(save); } - + } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateConnectionCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateConnectionCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateConnectionCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -30,7 +30,6 @@ import org.jiemamy.exception.ElementNotFoundException; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.attribute.constraint.LocalKeyConstraint; import org.jiemamy.model.connection.ConnectionAdapter; @@ -47,30 +46,30 @@ * @author daisuke */ public class CreateConnectionCommand extends Command { - + private static Logger logger = LoggerFactory.getLogger(CreateConnectionCommand.class); - + /** 接続元ノード */ private NodeAdapter source; - + /** ダイアグラムエディタのインデックス(エディタ内のタブインデックス) */ private int diagramIndex; - + /** 接続先ノード */ private NodeAdapter target; - + /** 作成するコネクションモデル */ private ConnectionAdapter connection; - + /** Figureサイズ */ @SuppressWarnings("unused") private Dimension figureSize; - + private JiemamyViewFacade jiemamyFacade; - + private SavePoint save; + - /** * インスタンスを生成する。 * @@ -81,11 +80,11 @@ public CreateConnectionCommand(RootModel rootModel, int diagramIndex, ConnectionAdapter connection) { this.diagramIndex = diagramIndex; this.connection = connection; - - jiemamyFacade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + + jiemamyFacade = rootModel.getJiemamy().getFactory().getFacade(); logger.debug(LogMarker.LIFECYCLE, "construct"); } - + @Override public boolean canExecute() { logger.debug(LogMarker.LIFECYCLE, "canExecute"); @@ -96,36 +95,36 @@ // logger.debug("ModelConsistenceException"); // return false; // } - + if (source == null || target == null) { logger.debug("source or target is null: " + source + " " + target); return false; } - + // Viewとはコネクションが貼れない if (source.unwrap() instanceof ViewModel || target.unwrap() instanceof ViewModel) { LogUtil.log(JiemamyUIPlugin.getDefault(), "attempt to connect with VIEW"); // RESOURCE return false; } - + // 現状、付箋とはコネクションが貼れない if (source.unwrap() instanceof StickyModel || target.unwrap() instanceof StickyModel) { LogUtil.log(JiemamyUIPlugin.getDefault(), "attempt to connect with STICKY"); // RESOURCE return false; } - + // カラムが1つもないテーブルからは外部キーが貼れない if (TableUtil.getColumns((TableModel) source.unwrap()).size() < 1) { LogUtil.log(JiemamyUIPlugin.getDefault(), "attempt to connect from TABLE without columns"); // RESOURCE return false; } - + // ローカルキーが1つもないテーブルへは外部キーが貼れない if (getKey((TableModel) target.unwrap()) == null) { LogUtil.log(JiemamyUIPlugin.getDefault(), "attempt to connect to TABLE without local keys"); // RESOURCE return false; } - + // THINK 違うキー同士で参照してる可能性は? // if (connection.unwrap() != null) { // // 循環参照の禁止(ターゲットの親に自分がいたら、参照不可) @@ -136,10 +135,10 @@ // return false; // } // } - + return true; } - + @Override public void execute() { logger.debug(LogMarker.LIFECYCLE, "execute"); @@ -151,10 +150,10 @@ } else { // TODO wrapping connectionしか対応していない。 } - + jiemamyFacade.resetBendpoint(diagramIndex, connection); } - + /** * Figureサイズを設定する。 * @@ -163,7 +162,7 @@ public void setFigureSize(Dimension figureSize) { this.figureSize = figureSize; } - + /** * 接続元ノードを設定する。 * @@ -175,7 +174,7 @@ this.source = source; // connection.setSource(source); } - + /** * 接続先ノードを設定する。 * @@ -187,7 +186,7 @@ this.target = target; // connection.setTarget(target); } - + @Override public void undo() { logger.debug(LogMarker.LIFECYCLE, "undo"); @@ -197,7 +196,7 @@ // TODO wrapping connectionしか対応していない。 } } - + /** * 主キーがあれば主キー、なければ何らかのLocalKeyConstraintを取得する。 * Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateNodeCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateNodeCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateNodeCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -26,7 +26,6 @@ import org.jiemamy.eclipse.utils.ConvertUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.node.NodeAdapter; import org.jiemamy.utils.LogMarker; @@ -37,21 +36,21 @@ * @author daisuke */ public class CreateNodeCommand extends Command { - + private static Logger logger = LoggerFactory.getLogger(CreateNodeCommand.class); - + /** ダイアグラムエディタのインデックス(エディタ内のタブインデックス) */ private final int diagramIndex; - + private NodeAdapter nodeAdapter; - + private Rectangle rectangle; - + private JiemamyViewFacade jiemamyFacade; - + private SavePoint savePoint; + - /** * インスタンスを生成する。 * @@ -64,18 +63,18 @@ this.diagramIndex = diagramIndex; this.nodeAdapter = nodeAdapter; this.rectangle = rectangle; - - jiemamyFacade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + + jiemamyFacade = rootModel.getJiemamy().getFactory().getFacade(); logger.debug(LogMarker.LIFECYCLE, "construct"); } - + @Override public void execute() { logger.debug(LogMarker.LIFECYCLE, "execute"); savePoint = jiemamyFacade.save(); jiemamyFacade.addNode(diagramIndex, nodeAdapter, ConvertUtil.convert(rectangle)); } - + @Override public void undo() { logger.debug(LogMarker.LIFECYCLE, "undo"); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteBendpointCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteBendpointCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteBendpointCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -22,7 +22,6 @@ import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.connection.ConnectionAdapter; @@ -32,21 +31,21 @@ * @author daisuke */ public class DeleteBendpointCommand extends Command { - + /** ダイアグラムエディタのインデックス(エディタ内のタブインデックス) */ private int diagramIndex; - + /** 削除元のコネクション */ private ConnectionAdapter connectionAdapter; - + /** source側からtarget側に向かって数えたベンドポイントのインデックス */ private int bendpointIndex; - + private JiemamyViewFacade jiemamyFacade; - + private SavePoint save; + - /** * インスタンスを生成する。 * @param rootModel @@ -59,16 +58,16 @@ this.diagramIndex = diagramIndex; this.connectionAdapter = connectionAdapter; this.bendpointIndex = bendpointIndex; - - jiemamyFacade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + + jiemamyFacade = rootModel.getJiemamy().getFactory().getFacade(); } - + @Override public void execute() { save = jiemamyFacade.save(); jiemamyFacade.removeBendpoint(diagramIndex, connectionAdapter, bendpointIndex); } - + @Override public void undo() { jiemamyFacade.rollback(save); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteConnectionCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteConnectionCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteConnectionCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -22,7 +22,6 @@ import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.attribute.constraint.ForeignKey; import org.jiemamy.model.connection.ConnectionAdapter; @@ -36,16 +35,16 @@ * @author daisuke */ public class DeleteConnectionCommand extends Command { - + private RootModel rootModel; - + private ConnectionAdapter connection; - + private JiemamyViewFacade jiemamyFacade; - + private SavePoint save; + - /** * インスタンスを生成する。 * @@ -55,19 +54,19 @@ public DeleteConnectionCommand(RootModel rootModel, ConnectionAdapter connection) { this.rootModel = rootModel; this.connection = connection; - - jiemamyFacade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + + jiemamyFacade = rootModel.getJiemamy().getFactory().getFacade(); } - + @Override public void execute() { ForeignKey foreignKey = connection.unwrap(); TableModel definedTable = AttributeUtil.getDefinedTable(foreignKey); - + save = jiemamyFacade.save(); jiemamyFacade.removeAttribute(definedTable, foreignKey); } - + @Override public void undo() { jiemamyFacade.rollback(save); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteNodeCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteNodeCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DeleteNodeCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -22,7 +22,6 @@ import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.node.NodeAdapter; @@ -32,18 +31,18 @@ * @author daisuke */ public class DeleteNodeCommand extends Command { - + /** 削除されるノード */ private NodeAdapter nodeAdapter; - + private JiemamyViewFacade jiemamyFacade; - + private SavePoint save; - + /** ダイアグラムエディタのインデックス(エディタ内のタブインデックス) */ private int diagramIndex; + - /** * インスタンスを生成する。 * @@ -54,18 +53,18 @@ public DeleteNodeCommand(RootModel rootModel, int diagramIndex, NodeAdapter nodeAdapter) { this.diagramIndex = diagramIndex; this.nodeAdapter = nodeAdapter; - jiemamyFacade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + jiemamyFacade = rootModel.getJiemamy().getFactory().getFacade(); } - + @Override public void execute() { save = jiemamyFacade.save(); jiemamyFacade.removeNode(diagramIndex, nodeAdapter); } - + @Override public void undo() { jiemamyFacade.rollback(save); } - + } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DirectEditNodeCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DirectEditNodeCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/DirectEditNodeCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -30,7 +30,6 @@ import org.jiemamy.exception.IllegalImplementationException; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.Mode; import org.jiemamy.model.RootModel; import org.jiemamy.model.entity.EntityModel; @@ -43,29 +42,29 @@ * @author daisuke */ public class DirectEditNodeCommand extends Command { - + /** 変更後の値 */ private String newValue; - + /** 編集対象 */ private NodeAdapter nodeAdapter; - + private DisplayStatus displayStatus; - + private JiemamyViewFacade jiemamyFacade; - + private SavePoint savePoint; + - /** * インスタンスを生成する。 * * @param rootModel */ public DirectEditNodeCommand(RootModel rootModel) { - jiemamyFacade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + jiemamyFacade = rootModel.getJiemamy().getFactory().getFacade(); } - + @Override public void execute() { EntityModel entityModel = nodeAdapter.unwrap(); @@ -87,7 +86,7 @@ throw new IllegalImplementationException(nodeAdapter, "Unknown node: " + nodeAdapter.getClass()); } } - + /** * displayModeを設定する。 * @@ -96,7 +95,7 @@ public void setDisplayMode(DisplayStatus displayStatus) { this.displayStatus = displayStatus; } - + /** * 変更後の値を設定する。 * @@ -105,7 +104,7 @@ public void setNewValue(String newValue) { this.newValue = newValue; } - + /** * 編集対象を設定する。 * @@ -116,7 +115,7 @@ Validate.notNull(nodeAdapter); this.nodeAdapter = nodeAdapter; } - + @Override public void undo() { jiemamyFacade.rollback(savePoint); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/MoveBendpointCommand.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/MoveBendpointCommand.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/MoveBendpointCommand.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -23,7 +23,6 @@ import org.jiemamy.eclipse.utils.ConvertUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.RootModel; import org.jiemamy.model.connection.ConnectionAdapter; import org.jiemamy.model.geometory.JmPoint; @@ -34,20 +33,20 @@ * @author daisuke */ public class MoveBendpointCommand extends AbstractMovePositionCommand { - + private ConnectionAdapter connectionAdapter; - + /** ベンドポイントの移動先座標 */ private Point newLocation; - + /** source側からtarget側に向かって数えたベンドポイントのインデックス */ private int bendpointIndex; - + private SavePoint savePoint; - + private int diagramIndex; + - /** * インスタンスを生成する。 * @@ -59,17 +58,17 @@ */ public MoveBendpointCommand(RootModel rootModel, int diagramIndex, ConnectionAdapter connectionAdapter, int bendpointIndex, Point newLocation) { - super(diagramIndex, new JiemamyViewFacadeImpl(rootModel.getJiemamy())); + super(diagramIndex, (JiemamyViewFacade) rootModel.getJiemamy().getFactory().getFacade()); this.diagramIndex = diagramIndex; this.connectionAdapter = connectionAdapter; this.bendpointIndex = bendpointIndex; this.newLocation = newLocation; - + int shiftX = newLocation.x < 0 ? Math.abs(newLocation.x) : 0; int shiftY = newLocation.y < 0 ? Math.abs(newLocation.y) : 0; setShift(new JmPoint(shiftX, shiftY)); } - + @Override public void execute() { JiemamyViewFacade jiemamyFacade = getJiemamyFacade(); @@ -77,7 +76,7 @@ jiemamyFacade.moveBendpoint(diagramIndex, connectionAdapter, bendpointIndex, ConvertUtil.convert(newLocation)); shiftPosition(false); } - + @Override public void undo() { JiemamyViewFacade jiemamyFacade = getJiemamyFacade(); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/AbstractTypeOptionHandler.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/AbstractTypeOptionHandler.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/AbstractTypeOptionHandler.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -31,7 +31,7 @@ * TODO for daisuke * * @param control - * @return + * @return 生きている場合は{@code true}、そうでない場合は{@code false} */ public static boolean isAlive(Control control) { return control != null && control.isDisposed() == false; Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionHandler.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionHandler.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionHandler.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -20,6 +20,8 @@ import org.eclipse.swt.widgets.Composite; +import org.jiemamy.model.datatype.DataTypeHolder; + /** * TODO for daisuke * @@ -30,11 +32,11 @@ /** * TODO for daisuke * + * @param holder * @param composite * @param editListener - * @param adapterClass */ - void createControl(Composite composite, EditListener editListener, Class<?> adapterClass); + void createControl(DataTypeHolder holder, Composite composite, EditListener editListener); /** * TODO for daisuke @@ -53,7 +55,7 @@ * * @param adapter */ - void setValue(Object adapter); + void setValue(Class<?> adapter); /** * TODO for daisuke Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -36,10 +36,14 @@ import org.jiemamy.eclipse.ui.UIConstant; import org.jiemamy.eclipse.ui.helper.TextSelectionAdapter; +import org.jiemamy.eclipse.utils.ExceptionHandler; import org.jiemamy.internal.model.datatype.adapter.PrecisionedDataTypeAdapter; import org.jiemamy.internal.model.datatype.adapter.SerialDataTypeAdapter; import org.jiemamy.internal.model.datatype.adapter.SizedDataTypeAdapter; import org.jiemamy.internal.model.datatype.adapter.TimezonedDataTypeAdapter; +import org.jiemamy.model.datatype.BuiltinDataType; +import org.jiemamy.model.datatype.DataType; +import org.jiemamy.model.datatype.DataTypeHolder; import org.jiemamy.utils.LogMarker; /** @@ -48,57 +52,55 @@ * @author daisuke */ public class TypeOptionManager { - + private static Logger logger = LoggerFactory.getLogger(TypeOptionManager.class); - + + private final DataTypeHolder holder; + /** オプションコントロール描画対象の親 */ private final Composite composite; - + /** コントロールの操作を検知するリスナ */ private final EditListener editListener; - + private final TypeOptionHandler handler; - + /** サイズコントロール */ private Text txtSize; - + /** 精度コントロール */ private Text txtPrecision; - + /** 位取りコントロール */ private Text txtScale; - + /** タイムゾーンコントロール */ private Button chkWithTimezone; - + /** 自動採番コントロール */ private Button chkSerial; + - private SizedDataTypeAdapter sizedDataTypeAdapter; - - private PrecisionedDataTypeAdapter precisionedDataTypeAdapter; - - private TimezonedDataTypeAdapter timezonedDataTypeAdapter; - - private SerialDataTypeAdapter serialDataTypeAdapter; - - /** * インスタンスを生成する。 * + * @param holder * @param composite オプションコントロール描画対象の親 * @param editListener コントロールの操作を検知するリスナ * @param handler may be null * @throws IllegalArgumentException 引数に{@code null}を与えた場合 */ - public TypeOptionManager(Composite composite, EditListener editListener, TypeOptionHandler handler) { + public TypeOptionManager(DataTypeHolder holder, Composite composite, EditListener editListener, + TypeOptionHandler handler) { + Validate.notNull(holder); Validate.notNull(composite); Validate.notNull(editListener); + this.holder = holder; this.composite = composite; this.editListener = editListener; this.handler = handler; } - + /** * オプションコントロールを全て破棄する。 */ @@ -108,7 +110,7 @@ control.dispose(); } } - + /** * データ型装飾アダプタに適したコントロールを生成する。 * @@ -118,41 +120,62 @@ */ public void createTypeOptionControl(Collection<Class<?>> adapterClasses) { clearTypeOptionControl(); - for (Class<?> adapterClass : adapterClasses) { - if (SizedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - Label label = new Label(composite, SWT.NULL); - label.setText("サイズ"); // RESOURCE - - txtSize = new Text(composite, SWT.BORDER); - txtSize.addFocusListener(new TextSelectionAdapter(txtSize)); - txtSize.addKeyListener(editListener); - } else if (PrecisionedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - Label label = new Label(composite, SWT.NULL); - label.setText("精度"); // RESOURCE - - txtPrecision = new Text(composite, SWT.BORDER); - txtPrecision.addFocusListener(new TextSelectionAdapter(txtPrecision)); - txtPrecision.addKeyListener(editListener); - - label = new Label(composite, SWT.NULL); - label.setText("位取り"); // RESOURCE - - txtScale = new Text(composite, SWT.BORDER); - txtScale.addFocusListener(new TextSelectionAdapter(txtScale)); - txtScale.addKeyListener(editListener); - } else if (TimezonedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - chkWithTimezone = new Button(composite, SWT.CHECK); - chkWithTimezone.setText("WITH TIMEZONE"); // RESOURCE - chkWithTimezone.addKeyListener(editListener); - } else if (SerialDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - chkSerial = new Button(composite, SWT.CHECK); - chkSerial.setText("自動採番"); // RESOURCE - chkSerial.addKeyListener(editListener); - } else if (handler != null) { - handler.createControl(composite, editListener, adapterClass); + + DataType dataType = holder.getDataType(); + if ((dataType instanceof BuiltinDataType) == false) { + return; + } + BuiltinDataType builtinDataType = (BuiltinDataType) dataType; + for (Class<?> clazz : adapterClasses) { + if (builtinDataType.hasAdapter(clazz) == false) { + try { + builtinDataType.registerAdapter(clazz.newInstance()); + } catch (InstantiationException e) { + ExceptionHandler.handleException(e); + } catch (IllegalAccessException e) { + ExceptionHandler.handleException(e); + } } } - + + if (builtinDataType.hasAdapter(SizedDataTypeAdapter.class)) { + Label label = new Label(composite, SWT.NULL); + label.setText("サイズ"); // RESOURCE + + txtSize = new Text(composite, SWT.BORDER); + txtSize.addFocusListener(new TextSelectionAdapter(txtSize)); + txtSize.addKeyListener(editListener); + } + if (builtinDataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { + Label label = new Label(composite, SWT.NULL); + label.setText("精度"); // RESOURCE + + txtPrecision = new Text(composite, SWT.BORDER); + txtPrecision.addFocusListener(new TextSelectionAdapter(txtPrecision)); + txtPrecision.addKeyListener(editListener); + + label = new Label(composite, SWT.NULL); + label.setText("位取り"); // RESOURCE + + txtScale = new Text(composite, SWT.BORDER); + txtScale.addFocusListener(new TextSelectionAdapter(txtScale)); + txtScale.addKeyListener(editListener); + } + if (builtinDataType.hasAdapter(TimezonedDataTypeAdapter.class)) { + chkWithTimezone = new Button(composite, SWT.CHECK); + chkWithTimezone.setText("WITH TIMEZONE"); // RESOURCE + chkWithTimezone.addKeyListener(editListener); + } + if (builtinDataType.hasAdapter(SerialDataTypeAdapter.class)) { + chkSerial = new Button(composite, SWT.CHECK); + chkSerial.setText("自動採番"); // RESOURCE + chkSerial.addKeyListener(editListener); + } + + if (handler != null) { + handler.createControl(holder, composite, editListener); + } + // HACK 再描画されない問題への暫定解決策。 // Swingでのバッドノウハウをそのまま継承して試したところ、あっさり動作したが、BKはBK。 // なんとかしたいが、なんともならない。こんな実装したくないとか言う以前に他の解決策が見つからない。 @@ -176,12 +199,12 @@ // ちなみに、幅を-1しているが、pack()すると元に戻るので後調整は必要無い。 Rectangle bounds = composite.getBounds(); composite.setBounds(bounds.x, bounds.y, bounds.width - 1, bounds.height); - + logger.debug(LogMarker.DETAIL, "before pack: " + composite.getSize()); composite.pack(true); logger.debug(LogMarker.DETAIL, "after pack: " + composite.getSize()); } - + /** * オプションコントロールをすべて無効にする。 */ @@ -195,7 +218,7 @@ handler.disable(); } } - + /** * オプションコントロールをすべて有効にする。 */ @@ -209,43 +232,59 @@ handler.enable(); } } - + /** * TODO for daisuke * - * @param adapter + * @param clazz */ - public void setValue(Object adapter) { - Class<?> adapterClass = adapter.getClass(); - if (SizedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - sizedDataTypeAdapter = (SizedDataTypeAdapter) adapter; - Integer size = sizedDataTypeAdapter.getSize(); - txtSize.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(size), "")); - } else if (PrecisionedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - precisionedDataTypeAdapter = (PrecisionedDataTypeAdapter) adapter; - Integer precision = precisionedDataTypeAdapter.getPrecision(); - Integer scale = precisionedDataTypeAdapter.getScale(); - txtPrecision.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(precision), "")); - txtPrecision.setData(adapter); - txtScale.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(scale), "")); - } else if (TimezonedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - timezonedDataTypeAdapter = (TimezonedDataTypeAdapter) adapter; - Boolean withTimeZone = timezonedDataTypeAdapter.isWithTimezone(); - chkWithTimezone.setSelection(BooleanUtils.isTrue(withTimeZone)); - } else if (SerialDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - serialDataTypeAdapter = (SerialDataTypeAdapter) adapter; - Boolean serial = serialDataTypeAdapter.isSerial(); - chkSerial.setSelection(BooleanUtils.isTrue(serial)); - } else if (handler != null) { - handler.setValue(adapter); + public void setValue(Class<?> clazz) { + DataType dataType = holder.getDataType(); + if ((dataType instanceof BuiltinDataType) == false) { + return; } + BuiltinDataType builtinDataType = (BuiltinDataType) dataType; + + for (Object adapter : builtinDataType.getAdapters()) { + if (adapter instanceof SizedDataTypeAdapter) { + SizedDataTypeAdapter sizedDataTypeAdapter = (SizedDataTypeAdapter) adapter; + Integer size = sizedDataTypeAdapter.getSize(); + txtSize.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(size), "")); + } + if (adapter instanceof PrecisionedDataTypeAdapter) { + PrecisionedDataTypeAdapter precisionedDataTypeAdapter = (PrecisionedDataTypeAdapter) adapter; + Integer precision = precisionedDataTypeAdapter.getPrecision(); + Integer scale = precisionedDataTypeAdapter.getScale(); + txtPrecision.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(precision), "")); + txtScale.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(scale), "")); + } + if (adapter instanceof TimezonedDataTypeAdapter) { + TimezonedDataTypeAdapter timezonedDataTypeAdapter = (TimezonedDataTypeAdapter) adapter; + Boolean withTimeZone = timezonedDataTypeAdapter.isWithTimezone(); + chkWithTimezone.setSelection(BooleanUtils.isTrue(withTimeZone)); + } + if (adapter instanceof SerialDataTypeAdapter) { + SerialDataTypeAdapter serialDataTypeAdapter = (SerialDataTypeAdapter) adapter; + Boolean serial = serialDataTypeAdapter.isSerial(); + chkSerial.setSelection(BooleanUtils.isTrue(serial)); + } + if (handler != null) { + handler.setValue(clazz); + } + } } - + /** * コントロールからアダプタにデータを書き戻す。 */ public void writeBackToAdapter() { - if (AbstractTypeOptionHandler.isAlive(txtSize) && sizedDataTypeAdapter != null) { + DataType dataType = holder.getDataType(); + if ((dataType instanceof BuiltinDataType) == false) { + return; + } + BuiltinDataType builtinDataType = (BuiltinDataType) dataType; + + if (AbstractTypeOptionHandler.isAlive(txtSize) && builtinDataType.hasAdapter(SizedDataTypeAdapter.class)) { String text = txtSize.getText(); Integer value = null; try { @@ -254,9 +293,10 @@ } catch (NumberFormatException e) { txtSize.setBackground(UIConstant.COLOR_ERROR); } - sizedDataTypeAdapter.setSize(value); + builtinDataType.getAdapter(SizedDataTypeAdapter.class).setSize(value); } - if (AbstractTypeOptionHandler.isAlive(txtPrecision) && precisionedDataTypeAdapter != null) { + if (AbstractTypeOptionHandler.isAlive(txtPrecision) + && builtinDataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { String text = txtPrecision.getText(); Integer value = null; try { @@ -265,9 +305,9 @@ } catch (NumberFormatException e) { txtPrecision.setBackground(UIConstant.COLOR_ERROR); } - precisionedDataTypeAdapter.setPrecision(value); + builtinDataType.getAdapter(PrecisionedDataTypeAdapter.class).setPrecision(value); } - if (AbstractTypeOptionHandler.isAlive(txtScale) && precisionedDataTypeAdapter != null) { + if (AbstractTypeOptionHandler.isAlive(txtScale) && builtinDataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { String text = txtScale.getText(); Integer value = null; if (StringUtils.isEmpty(text)) { @@ -280,19 +320,20 @@ txtScale.setBackground(UIConstant.COLOR_ERROR); } } - precisionedDataTypeAdapter.setScale(value); + builtinDataType.getAdapter(PrecisionedDataTypeAdapter.class).setScale(value); } - if (AbstractTypeOptionHandler.isAlive(chkWithTimezone) && timezonedDataTypeAdapter != null) { + if (AbstractTypeOptionHandler.isAlive(chkWithTimezone) + && builtinDataType.hasAdapter(TimezonedDataTypeAdapter.class)) { boolean value = chkWithTimezone.getSelection(); - timezonedDataTypeAdapter.setWithTimezone(value == false ? null : value); + builtinDataType.getAdapter(TimezonedDataTypeAdapter.class).setWithTimezone(value == false ? null : value); } - if (AbstractTypeOptionHandler.isAlive(chkSerial) && serialDataTypeAdapter != null) { + if (AbstractTypeOptionHandler.isAlive(chkSerial) && builtinDataType.hasAdapter(SerialDataTypeAdapter.class)) { boolean value = chkSerial.getSelection(); - serialDataTypeAdapter.setSerial(value == false ? null : value); + builtinDataType.getAdapter(SerialDataTypeAdapter.class).setSerial(value == false ? null : value); } if (handler != null) { handler.writeBackToAdapter(); } } - + } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/root/RootEditDialogDomainTab.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -19,6 +19,7 @@ package org.jiemamy.eclipse.editor.dialog.root; import java.util.List; +import java.util.Map; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; @@ -42,6 +43,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.Table; @@ -70,6 +72,7 @@ import org.jiemamy.eclipse.ui.DefaultTableEditorConfig; import org.jiemamy.eclipse.ui.helper.TextSelectionAdapter; import org.jiemamy.eclipse.ui.tab.AbstractTab; +import org.jiemamy.eclipse.utils.ExceptionHandler; import org.jiemamy.editcommand.Command; import org.jiemamy.editcommand.CommandListener; import org.jiemamy.facade.JiemamyFacade; @@ -245,10 +248,12 @@ private Composite cmpTypeOption; - private TypeOptionManager typeOptionManager; + private Map<DomainModel, TypeOptionManager> typeOptionManagers = CollectionsUtil.newHashMap(); private final List<DomainModel> domains; + private TypeOptionHandler typeOptionHandler; + /** * インスタンスを生成する。 @@ -290,6 +295,14 @@ @Override public void widgetSelected(SelectionEvent e) { + Table table = getTableViewer().getTable(); + int index = table.getSelectionIndex(); + if (index < 0 || index >= table.getItemCount()) { + return; + } + + DomainModel domainModel = (DomainModel) getTableViewer().getElementAt(index); + TypeOptionManager typeOptionManager = typeOptionManagers.get(domainModel); DataTypeMold<?> dataTypeMold = allTypes.get(cmbDataType.getSelectionIndex()); if (dataTypeMold instanceof BuiltinDataTypeMold) { BuiltinDataTypeMold builtinDataTypeMold = (BuiltinDataTypeMold) dataTypeMold; @@ -300,20 +313,6 @@ } }); - ExtensionResolver<Dialect> dialectResolver = JiemamyCorePlugin.getDialectResolver(); - IConfigurationElement dialectElement = - dialectResolver.getExtensionConfigurationElements().get(rootModel.getDialectClassName()); - IConfigurationElement[] children = dialectElement.getChildren("typeOptionHandler"); - TypeOptionHandler handler = null; - if (ArrayUtils.isEmpty(children) == false) { - try { - handler = (TypeOptionHandler) children[0].createExecutableExtension("class"); - } catch (Exception e) { - JiemamyUIPlugin.log(e); - } - } - typeOptionManager = new TypeOptionManager(cmpTypeOption, editListener, handler); - chkIsNotNull.addSelectionListener(editListener); txtCheckName.addFocusListener(new TextSelectionAdapter(txtCheckName)); @@ -330,32 +329,32 @@ protected void configureTable(final Table table) { super.configureTable(table); - // THINK ↓要る? - // final Menu menu = new Menu(table); - // table.setMenu(menu); - // menu.addMenuListener(new MenuAdapter() { - // - // @Override - // public void menuShown(MenuEvent evt) { - // for (MenuItem item : menu.getItems()) { - // item.dispose(); - // } - // int index = table.getSelectionIndex(); - // if (index == -1) { - // return; - // } - // - // MenuItem removeItem = new MenuItem(menu, SWT.PUSH); - // removeItem.setText("&Remove"); // RESOURCE - // removeItem.addSelectionListener(new SelectionAdapter() { - // - // @Override - // public void widgetSelected(SelectionEvent evt) { - // removeTableSelectionItem(); - // } - // }); - // } - // }); +// THINK ↓要る? +// final Menu menu = new Menu(table); +// table.setMenu(menu); +// menu.addMenuListener(new MenuAdapter() { +// +// @Override +// public void menuShown(MenuEvent evt) { +// for (MenuItem item : menu.getItems()) { +// item.dispose(); +// } +// int index = table.getSelectionIndex(); +// if (index == -1) { +// return; +// } +// +// MenuItem removeItem = new MenuItem(menu, SWT.PUSH); +// removeItem.setText("&Remove"); // RESOURCE +// removeItem.addSelectionListener(new SelectionAdapter() { +// +// @Override +// public void widgetSelected(SelectionEvent evt) { +// removeTableSelectionItem(); +// } +// }); +// } +// }); } @Override @@ -376,6 +375,25 @@ } }); + + ExtensionResolver<Dialect> dialectResolver = JiemamyCorePlugin.getDialectResolver(); + IConfigurationElement dialectElement = + dialectResolver.getExtensionConfigurationElements().get(rootModel.getDialectClassName()); + IConfigurationElement[] children = dialectElement.getChildren("typeOptionHandler"); + if (ArrayUtils.isEmpty(children) == false) { + try { + typeOptionHandler = (TypeOptionHandler) children[0].createExecutableExtension("class"); + } catch (Exception e) { + ExceptionHandler.handleException(e); + } + } + + typeOptionManagers.clear(); + for (DomainModel domainModel : domains) { + TypeOptionManager typeOptionManager = + new TypeOptionManager(domainModel, cmpTypeOption, editListener, typeOptionHandler); + typeOptionManagers.put(domainModel, typeOptionManager); + } } @Override @@ -482,7 +500,9 @@ txtDescription.setEnabled(false); chkIsNotNull.setEnabled(false); - typeOptionManager.clearTypeOptionControl(); + for (Control control : cmpTypeOption.getChildren()) { + control.dispose(); + } } @Override @@ -502,7 +522,7 @@ for (Object adapter : adapters) { adapterClasses.add(adapter.getClass()); } - typeOptionManager.createTypeOptionControl(adapterClasses); + typeOptionManagers.get(domainModel).createTypeOptionControl(adapterClasses); // 現在値の設定 txtDomainName.setText(domainModel.getName()); @@ -520,17 +540,13 @@ cmbDataType.setText(dataType.getTypeName()); if (dataType.hasAdapter(SizedDataTypeAdapter.class)) { - SizedDataTypeAdapter sizedDataTypeAdapter = dataType.getAdapter(SizedDataTypeAdapter.class); - typeOptionManager.setValue(sizedDataTypeAdapter); + typeOptionManagers.get(domainModel).setValue(SizedDataTypeAdapter.class); } if (dataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { - PrecisionedDataTypeAdapter precisionedDataTypeAdapter = - dataType.getAdapter(PrecisionedDataTypeAdapter.class); - typeOptionManager.setValue(precisionedDataTypeAdapter); + typeOptionManagers.get(domainModel).setValue(PrecisionedDataTypeAdapter.class); } if (dataType.hasAdapter(TimezonedDataTypeAdapter.class)) { - TimezonedDataTypeAdapter timezonedDataTypeAdapter = dataType.getAdapter(TimezonedDataTypeAdapter.class); - typeOptionManager.setValue(timezonedDataTypeAdapter); + typeOptionManagers.get(domainModel).setValue(TimezonedDataTypeAdapter.class); } } @@ -548,6 +564,10 @@ jiemamyFacade.addDomain(domainModel); + TypeOptionManager typeOptionManager = + new TypeOptionManager(domainModel, cmpTypeOption, editListener, typeOptionHandler); + typeOptionManagers.put(domainModel, typeOptionManager); + int addedIndex = domains.indexOf(domainModel); table.setSelection(addedIndex); enableEditControls(addedIndex); @@ -575,6 +595,10 @@ jiemamyFacade.addDomain(domainModel, index); } + TypeOptionManager typeOptionManager = + new TypeOptionManager(domainModel, cmpTypeOption, editListener, typeOptionHandler); + typeOptionManagers.put(domainModel, typeOptionManager); + int addedIndex = domains.indexOf(domainModel); table.setSelection(addedIndex); enableEditControls(addedIndex); @@ -626,6 +650,8 @@ tableViewer.remove(domainModel); table.setSelection(index); + typeOptionManagers.remove(domainModel); + disableEditControls(); return domainModel; @@ -658,7 +684,7 @@ jiemamyFacade.changeModelProperty(domainModel, DomainProperty.notNullConstraint, nnConstraint); } - typeOptionManager.writeBackToAdapter(); + typeOptionManagers.get(domainModel).writeBackToAdapter(); } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialog.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialog.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialog.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -107,7 +107,7 @@ shell.pack(); // int height = 400; // shell.setSize((int) (height * 1.618), height); - shell.setSize(647, 450); + shell.setSize(650, 500); } @Override Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; @@ -44,6 +45,7 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TabFolder; @@ -76,6 +78,7 @@ import org.jiemamy.eclipse.ui.DefaultTableEditorConfig; import org.jiemamy.eclipse.ui.helper.TextSelectionAdapter; import org.jiemamy.eclipse.ui.tab.AbstractTab; +import org.jiemamy.eclipse.utils.ExceptionHandler; import org.jiemamy.editcommand.Command; import org.jiemamy.editcommand.CommandListener; import org.jiemamy.exception.ElementNotFoundException; @@ -296,10 +299,12 @@ private Composite cmpTypeOption; - private TypeOptionManager typeOptionManager; + private Map<ColumnModel, TypeOptionManager> typeOptionManagers = CollectionsUtil.newHashMap(); private final List<AttributeModel> attributes; + private TypeOptionHandler typeOptionHandler; + /** * インスタンスを生成する。 @@ -350,6 +355,14 @@ @Override public void widgetSelected(SelectionEvent e) { + Table table = getTableViewer().getTable(); + int index = table.getSelectionIndex(); + if (index < 0 || index >= table.getItemCount()) { + return; + } + + ColumnModel columnModel = (ColumnModel) getTableViewer().getElementAt(index); + TypeOptionManager typeOptionManager = typeOptionManagers.get(columnModel); DataTypeMold<?> dataTypeMold = allTypes.get(cmbDataType.getSelectionIndex()); if (dataTypeMold instanceof BuiltinDataTypeMold) { BuiltinDataTypeMold builtinDataTypeMold = (BuiltinDataTypeMold) dataTypeMold; @@ -360,25 +373,11 @@ } }); - ExtensionResolver<Dialect> dialectResolver = JiemamyCorePlugin.getDialectResolver(); - IConfigurationElement dialectElement = - dialectResolver.getExtensionConfigurationElements().get(rootModel.getDialectClassName()); - IConfigurationElement[] children = dialectElement.getChildren("typeOptionHandler"); - TypeOptionHandler handler = null; - if (ArrayUtils.isEmpty(children) == false) { - try { - handler = (TypeOptionHandler) children[0].createExecutableExtension("class"); - } catch (Exception e) { - JiemamyUIPlugin.log(e); - } - } - typeOptionManager = new TypeOptionManager(cmpTypeOption, editListener, handler); - chkIsPK.addSelectionListener(editListener); chkIsNotNull.addSelectionListener(editListener); - // chkIsRepresentation.addSelectionListener(editListener); +// chkIsRepresentation.addSelectionListener(editListener); txtDefaultValue.addFocusListener(new TextSelectionAdapter(txtDefaultValue)); txtDefaultValue.addKeyListener(editListener); @@ -391,32 +390,32 @@ protected void configureTable(final Table table) { super.configureTable(table); - // THINK ↓要る? - // final Menu menu = new Menu(table); - // table.setMenu(menu); - // menu.addMenuListener(new MenuAdapter() { - // - // @Override - // public void menuShown(MenuEvent evt) { - // for (MenuItem item : menu.getItems()) { - // item.dispose(); - // } - // int index = table.getSelectionIndex(); - // if (index == -1) { - // return; - // } - // - // MenuItem removeItem = new MenuItem(menu, SWT.PUSH); - // removeItem.setText("&Remove"); // RESOURCE - // removeItem.addSelectionListener(new SelectionAdapter() { - // - // @Override - // public void widgetSelected(SelectionEvent evt) { - // removeTableSelectionItem(); - // } - // }); - // } - // }); +// THINK ↓要る? +// final Menu menu = new Menu(table); +// table.setMenu(menu); +// menu.addMenuListener(new MenuAdapter() { +// +// @Override +// public void menuShown(MenuEvent evt) { +// for (MenuItem item : menu.getItems()) { +// item.dispose(); +// } +// int index = table.getSelectionIndex(); +// if (index == -1) { +// return; +// } +// +// MenuItem removeItem = new MenuItem(menu, SWT.PUSH); +// removeItem.setText("&Remove"); // RESOURCE +// removeItem.addSelectionListener(new SelectionAdapter() { +// +// @Override +// public void widgetSelected(SelectionEvent evt) { +// removeTableSelectionItem(); +// } +// }); +// } +// }); } @Override @@ -445,6 +444,29 @@ } }); + + ExtensionResolver<Dialect> dialectResolver = JiemamyCorePlugin.getDialectResolver(); + IConfigurationElement dialectElement = + dialectResolver.getExtensionConfigurationElements().get(rootModel.getDialectClassName()); + IConfigurationElement[] children = dialectElement.getChildren("typeOptionHandler"); + if (ArrayUtils.isEmpty(children) == false) { + try { + typeOptionHandler = (TypeOptionHandler) children[0].createExecutableExtension("class"); + } catch (Exception e) { + ExceptionHandler.handleException(e); + } + } + + typeOptionManagers.clear(); + for (AttributeModel attributeModel : attributes) { + if ((attributeModel instanceof ColumnModel) == false) { + continue; + } + ColumnModel columnModel = (ColumnModel) attributeModel; + TypeOptionManager typeOptionManager = + new TypeOptionManager(columnModel, cmpTypeOption, editListener, typeOptionHandler); + typeOptionManagers.put(columnModel, typeOptionManager); + } } @Override @@ -506,30 +528,30 @@ chkIsNotNull = new Button(cmpChecks, SWT.CHECK); chkIsNotNull.setText("NOT NULL(&N)"); // RESOURCE - // chkIsRepresentation = new Button(cmpChecks, SWT.CHECK); - // chkIsRepresentation.setText("代表"); // RESOURCE +// chkIsRepresentation = new Button(cmpChecks, SWT.CHECK); +// chkIsRepresentation.setText("代表"); // RESOURCE - // ExpandBar expandBar = new ExpandBar(parent, SWT.V_SCROLL); - // expandBar.setSpacing(8); - // expandBar.setBackground(ColorConstants.lightGray); - // gd = new GridData(GridData.FILL_HORIZONTAL); - // gd.horizontalSpan = 4; - // expandBar.setLayoutData(gd); - // layout = new GridLayout(1, false); - // layout.marginHeight = 0; - // layout.marginWidth = 0; - // expandBar.setLayout(layout); - // ExpandItem expAdvanced = new ExpandItem(expandBar, SWT.NULL); - // expAdvanced.setText("高度な設定"); // RESOURCE +// ExpandBar expandBar = new ExpandBar(parent, SWT.V_SCROLL); +// expandBar.setSpacing(8); +// expandBar.setBackground(ColorConstants.lightGray); +// gd = new GridData(GridData.FILL_HORIZONTAL); +// gd.horizontalSpan = 4; +// expandBar.setLayoutData(gd); +// layout = new GridLayout(1, false); +// layout.marginHeight = 0; +// layout.marginWidth = 0; +// expandBar.setLayout(layout); +// ExpandItem expAdvanced = new ExpandItem(expandBar, SWT.NULL); +// expAdvanced.setText("高度な設定"); // RESOURCE Group cmpAdvanced = new Group(parent, SWT.NULL); cmpAdvanced.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); layout = new GridLayout(4, false); - // layout.marginHeight = 0; - // layout.marginWidth = 0; +// layout.marginHeight = 0; +// layout.marginWidth = 0; cmpAdvanced.setLayout(layout); cmpAdvanced.setText("高度な設定"); // RESOURCE - // expAdvanced.setControl(cmpAdvanced); - // expAdvanced.setHeight(cmpAdvanced.computeSize(SWT.DEFAULT, SWT.DEFAULT).y); +// expAdvanced.setControl(cmpAdvanced); +// expAdvanced.setHeight(cmpAdvanced.computeSize(SWT.DEFAULT, SWT.DEFAULT).y); label = new Label(cmpAdvanced, SWT.NULL); label.setText("デフォルト値(&F)"); // RESOURCE @@ -615,7 +637,9 @@ txtDefaultValue.setEnabled(false); txtDescription.setEnabled(false); - typeOptionManager.clearTypeOptionControl(); + for (Control control : cmpTypeOption.getChildren()) { + control.dispose(); + } } @Override @@ -631,7 +655,7 @@ txtDescription.setEnabled(true); chkIsPK.setEnabled(true); chkIsNotNull.setEnabled(true); - // chkIsRepresentation.setEnabled(true); +// chkIsRepresentation.setEnabled(true); DataType dataType = columnModel.getDataType(); if (dataType instanceof BuiltinDataType) { @@ -640,9 +664,11 @@ for (Object adapter : adapters) { adapterClasses.add(adapter.getClass()); } - typeOptionManager.createTypeOptionControl(adapterClasses); + typeOptionManagers.get(columnModel).createTypeOptionControl(adapterClasses); } else { - typeOptionManager.clearTypeOptionControl(); + for (Control control : cmpTypeOption.getChildren()) { + control.dispose(); + } } // 現在値の設定 @@ -668,18 +694,13 @@ BuiltinDataType builtinDataType = (BuiltinDataType) dataType; cmbDataType.setText(builtinDataType.getTypeName()); if (builtinDataType.hasAdapter(SizedDataTypeAdapter.class)) { - SizedDataTypeAdapter sizedDataTypeAdapter = builtinDataType.getAdapter(SizedDataTypeAdapter.class); - typeOptionManager.setValue(sizedDataTypeAdapter); + typeOptionManagers.get(columnModel).setValue(SizedDataTypeAdapter.class); } if (builtinDataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { - PrecisionedDataTypeAdapter precisionedDataTypeAdapter = - builtinDataType.getAdapter(PrecisionedDataTypeAdapter.class); - typeOptionManager.setValue(precisionedDataTypeAdapter); + typeOptionManagers.get(columnModel).setValue(PrecisionedDataTypeAdapter.class); } if (builtinDataType.hasAdapter(TimezonedDataTypeAdapter.class)) { - TimezonedDataTypeAdapter timezonedDataTypeAdapter = - builtinDataType.getAdapter(TimezonedDataTypeAdapter.class); - typeOptionManager.setValue(timezonedDataTypeAdapter); + typeOptionManagers.get(columnModel).setValue(TimezonedDataTypeAdapter.class); } } txtDefaultValue.setText(StringUtils.defaultIfEmpty(columnModel.getDefaultValue(), "")); @@ -687,7 +708,7 @@ chkIsPK.setSelection(ColumnUtil.isPartOfPrimaryKeyColumns(columnModel)); - // chkIsTypical.setSelection(column.getConstraint(DefinitionModel.CONSTRAINT_TYPICAL)); +// chkIsTypical.setSelection(column.getConstraint(DefinitionModel.CONSTRAINT_TYPICAL)); } @Override @@ -704,6 +725,10 @@ jiemamyFacade.addAttribute(tableModel, columnModel); + TypeOptionManager typeOptionManager = + new TypeOptionManager(columnModel, cmpTypeOption, editListener, typeOptionHandler); + typeOptionManagers.put(columnModel, typeOptionManager); + int addedIndex = TableUtil.getColumns(tableModel).indexOf(columnModel); table.setSelection(addedIndex); enableEditControls(addedIndex); @@ -733,6 +758,10 @@ jiemamyFacade.addAttribute(tableModel, subjectIndex, columnModel); } + TypeOptionManager typeOptionManager = + new TypeOptionManager(columnModel, cmpTypeOption, editListener, typeOptionHandler); + typeOptionManagers.put(columnModel, typeOptionManager); + int addedIndex = TableUtil.getColumns(tableModel).indexOf(columnModel); table.setSelection(addedIndex); enableEditControls(addedIndex); @@ -796,6 +825,8 @@ tableViewer.remove(subject); table.setSelection(index); + typeOptionManagers.remove(subject); + disableEditControls(); return (JiemamyElement) subject; @@ -870,14 +901,14 @@ jiemamyFacade.changeModelProperty(checkConstraint, CheckConstraintProperty.expression, expression); } - // RepresentationAdapter representationAdapter = tableModel.getAdapter(RepresentationAdapter.class); - // if (chkIsRepresentation.getSelection()) { - // representationAdapter.setRepresentation(true); - // } else { - // representationAdapter.setRepresentation(null); +// RepresentationAdapter representationAdapter = tableModel.getAdapter(RepresentationAdapter.class); +// if (chkIsRepresentation.getSelection()) { +// representationAdapter.setRepresentation(true); +// } else { +// representationAdapter.setRepresentation(null); // } - typeOptionManager.writeBackToAdapter(); + typeOptionManagers.get(columnModel).writeBackToAdapter(); } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ForeignKeyEditPart.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ForeignKeyEditPart.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ForeignKeyEditPart.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -41,7 +41,6 @@ import org.jiemamy.eclipse.editor.utils.LabelStringUtil; import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.JiemamyElement; import org.jiemamy.model.RootModel; import org.jiemamy.model.attribute.constraint.ForeignKey; @@ -53,12 +52,12 @@ * @author daisuke */ public class ForeignKeyEditPart extends AbstractJmConnectionEditPart implements EditDialogSupport { - + private static Logger logger = LoggerFactory.getLogger(ForeignKeyEditPart.class); - + private Label label; + - /** * インスタンスを生成する。 * @@ -68,26 +67,26 @@ super(connectionAdapter); logger.debug(LogMarker.LIFECYCLE, "construct"); } - + public JiemamyElement getTargetModel() { ConnectionAdapter connection = getModel(); ForeignKey foreignKey = connection.unwrap(); return foreignKey; } - + public void openEditDialog() { logger.debug(LogMarker.LIFECYCLE, "openEditDialog"); - + RootModel rootModel = (RootModel) getRoot().getContents().getModel(); ConnectionAdapter connection = getModel(); ForeignKey foreignKey = connection.unwrap(); - + // 編集前のスナップショットを保存 - JiemamyFacade facade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + JiemamyFacade facade = rootModel.getJiemamy().getFactory().getFacade(); SavePoint beforeEditSavePoint = facade.save(); - + ForeignKeyEditDialog dialog = new ForeignKeyEditDialog(getViewer().getControl().getShell(), foreignKey, facade); - + if (dialog.open() == Dialog.OK) { // 編集後のスナップショットを保存 SavePoint afterEditSavePoint = facade.save(); @@ -99,7 +98,7 @@ facade.rollback(beforeEditSavePoint); } } - + @Override public void performRequest(Request req) { logger.info(LogMarker.LIFECYCLE, "Incoming GEF Request: " + req.getType()); @@ -109,28 +108,28 @@ } super.performRequest(req); } - + @Override public void refreshVisuals() { super.refreshVisuals(); updateLabel(); } - + @Override protected IFigure createFigure() { PolylineConnection connection = new PolylineConnection(); connection.setTargetDecoration(new PolylineDecoration()); - + label = new Label(); label.setLabelAlignment(PositionConstants.CENTER); label.setOpaque(true); label.setBackgroundColor(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); updateLabel(); connection.add(label, new ConnectionLocator(connection, ConnectionLocator.MIDDLE)); - + return connection; } - + /** * ラベルを更新する。 */ @@ -141,7 +140,7 @@ RootModel rootModel = (RootModel) getRoot().getContents().getModel(); ConnectionAdapter connection = getModel(); ForeignKey foreignKey = connection.unwrap(); - + String labelString = LabelStringUtil.getString(rootModel, foreignKey, DisplayPlace.FIGURE); label.setText(labelString); } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/RootEditPart.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/RootEditPart.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/RootEditPart.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -47,7 +47,6 @@ import org.jiemamy.editcommand.CommandListener; import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.DiagramPresentationModel; import org.jiemamy.model.DiagramPresentations; import org.jiemamy.model.JiemamyElement; @@ -62,11 +61,11 @@ * @author daisuke */ public class RootEditPart extends AbstractGraphicalEditPart implements EditDialogSupport, IPropertyChangeListener, -CommandListener { - + CommandListener { + private static Logger logger = LoggerFactory.getLogger(RootEditPart.class); + - /** * インスタンスを生成する。 * @@ -75,63 +74,63 @@ public RootEditPart(RootModel rootModel) { setModel(rootModel); } - + @Override public void activate() { logger.debug(LogMarker.LIFECYCLE, "activated"); super.activate(); - + IPreferenceStore ps = JiemamyUIPlugin.getDefault().getPreferenceStore(); ps.addPropertyChangeListener(this); - + RootModel rootModel = getModel(); rootModel.getJiemamy().getEventBroker().addListener(this); } - + public void commandExecuted(Command command) { refresh(); refreshChildren(); // JiemamyValidatorUtil.validate(getResource(), (RootModel) getModel()); } - + @Override public void deactivate() { logger.debug(LogMarker.LIFECYCLE, "deactivate"); RootModel rootModel = getModel(); rootModel.getJiemamy().getEventBroker().removeListener(this); - + IPreferenceStore ps = JiemamyUIPlugin.getDefault().getPreferenceStore(); ps.removePropertyChangeListener(this); - + super.deactivate(); } - + @Override public RootModel getModel() { return (RootModel) super.getModel(); } - + public JiemamyElement getTargetModel() { RootModel rootModel = getModel(); return rootModel; } - + public void openEditDialog() { logger.debug(LogMarker.LIFECYCLE, "openEditDialog"); RootModel rootModel = getModel(); - + // 編集前のスナップショットを保存 - JiemamyFacade facade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + JiemamyFacade facade = rootModel.getJiemamy().getFactory().getFacade(); SavePoint beforeEditSavePoint = facade.save(); - + RootEditDialog dialog = new RootEditDialog(getViewer().getControl().getShell(), rootModel, facade); - + if (dialog.open() == Dialog.OK) { // 編集後のスナップショットを保存 SavePoint afterEditSavePoint = facade.save(); - + org.eclipse.gef.commands.Command command = - new DialogEditCommand(facade, beforeEditSavePoint, afterEditSavePoint); + new DialogEditCommand(facade, beforeEditSavePoint, afterEditSavePoint); GraphicalViewer viewer = (GraphicalViewer) getViewer(); viewer.getEditDomain().getCommandStack().execute(command); } else { @@ -139,17 +138,17 @@ facade.rollback(beforeEditSavePoint); } } - + @Override public void performRequest(Request req) { logger.info(LogMarker.LIFECYCLE, "Incoming GEF Request: " + req.getType()); super.performRequest(req); } - + public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { setConnectionRouter(getFigure()); } - + @Override public void setModel(Object model) { if (model instanceof RootModel) { @@ -158,22 +157,22 @@ throw new IllegalArgumentException(); } } - + @Override protected void createEditPolicies() { installEditPolicy(EditPolicy.LAYOUT_ROLE, new JmLayoutEditPolicy()); } - + @Override protected IFigure createFigure() { Layer figure = new Layer(); figure.setLayoutManager(new XYLayout()); - + setConnectionRouter(figure); - + return figure; } - + @Override protected List<NodeAdapter> getModelChildren() { RootModel rootModel = getModel(); @@ -181,12 +180,12 @@ DiagramPresentationModel diagramPresentationModel = diagramPresentations.get(Migration.DIAGRAM_INDEX); return CollectionsUtil.newArrayList(diagramPresentationModel.getNodeProfiles().keySet()); } - + private void setConnectionRouter(IFigure figure) { JiemamyPreference ps = JiemamyUIPlugin.getPreference(); ConnectionRouter router = ps.getConnectionRouter().getRouter(figure); ConnectionLayer connLayer = (ConnectionLayer) getLayer(LayerConstants.CONNECTION_LAYER); connLayer.setConnectionRouter(router); } - + } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/StickyEditPart.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/StickyEditPart.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/StickyEditPart.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -42,7 +42,6 @@ import org.jiemamy.eclipse.utils.ConvertUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.DiagramPresentationModel; import org.jiemamy.model.DiagramPresentations; import org.jiemamy.model.JiemamyElement; @@ -59,10 +58,10 @@ * @author daisuke */ public class StickyEditPart extends AbstractJmNodeEditPart { - + private static Logger logger = LoggerFactory.getLogger(StickyEditPart.class); + - /** * インスタンスを生成する。 * @@ -71,29 +70,29 @@ public StickyEditPart(StickyModel stickyModel) { super(stickyModel); } - + public JiemamyElement getTargetModel() { StickyModel stickyModel = (StickyModel) getModel(); return stickyModel; } - + public void openEditDialog() { logger.debug(LogMarker.LIFECYCLE, "openEditDialog"); - + RootModel rootModel = (RootModel) getParent().getModel(); StickyModel stickyModel = (StickyModel) getModel(); - + // 編集前のスナップショットを保存 - JiemamyViewFacade facade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + JiemamyViewFacade facade = rootModel.getJiemamy().getFactory().getFacade(); SavePoint beforeEditSavePoint = facade.save(); - + Shell shell = getViewer().getControl().getShell(); StickyEditDialog dialog = new StickyEditDialog(shell, stickyModel, Migration.DIAGRAM_INDEX, facade); - + if (dialog.open() == Dialog.OK) { // 編集後のスナップショットを保存 SavePoint afterEditSavePoint = facade.save(); - + Command command = new DialogEditCommand(facade, beforeEditSavePoint, afterEditSavePoint); GraphicalViewer viewer = (GraphicalViewer) getViewer(); viewer.getEditDomain().getCommandStack().execute(command); @@ -102,38 +101,38 @@ facade.rollback(beforeEditSavePoint); } } - + @Override protected IFigure createFigure() { StickyFigure figure = new StickyFigure(); String contents = ((StickyModel) getModel()).getContents(); - + if (contents.length() > 0) { Panel tooltip = new Panel(); tooltip.setLayoutManager(new StackLayout()); tooltip.setBackgroundColor(ColorConstants.tooltipBackground); tooltip.add(new Label(contents)); - + figure.setToolTip(tooltip); } - + updateFigure(figure); return figure; } - + @Override protected DirectEditManager getDirectEditManager() { StickyFigure figure = (StickyFigure) getFigure(); CellEditorLocator locator = new NodeCellEditorLocator(figure.getContentsLabel()); return new StickyDirectEditManager(this, MultiLineTextCellEditor.class, locator); } - + @Override protected void refreshVisuals() { RootModel rootModel = (RootModel) getParent().getModel(); StickyModel stickyModel = (StickyModel) getModel(); GraphicalEditPart editPart = (GraphicalEditPart) getParent(); - + DiagramPresentations diagramPresentations = rootModel.getAdapter(DiagramPresentations.class); DiagramPresentationModel presentation = diagramPresentations.get(Migration.DIAGRAM_INDEX); NodeProfile nodeProfile = presentation.getNodeProfiles().get(stickyModel); @@ -143,10 +142,10 @@ JmRectangle boundary = nodeProfile.getBoundary(); editPart.setLayoutConstraint(this, getFigure(), ConvertUtil.convert(boundary)); } - + updateFigure(getFigure()); } - + /** * StickyFigureのアップデートを行う。 * @@ -157,7 +156,7 @@ RootModel rootModel = (RootModel) getParent().getModel(); StickyModel stickyModel = (StickyModel) getModel(); StickyFigure stickyFigure = (StickyFigure) figure; - + DiagramPresentations diagramPresentations = rootModel.getAdapter(DiagramPresentations.class); DiagramPresentationModel presentation = diagramPresentations.get(Migration.DIAGRAM_INDEX); NodeProfile nodeProfile = presentation.getNodeProfiles().get(stickyModel); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/TableEditPart.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/TableEditPart.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/TableEditPart.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -41,7 +41,6 @@ import org.jiemamy.eclipse.utils.ConvertUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.DiagramPresentationModel; import org.jiemamy.model.DiagramPresentations; import org.jiemamy.model.Level; @@ -60,10 +59,10 @@ * @author daisuke */ public class TableEditPart extends AbstractEntityNodeEditPart { - + private static Logger logger = LoggerFactory.getLogger(TableEditPart.class); + - /** * インスタンスを生成する。 * @@ -72,25 +71,25 @@ public TableEditPart(NodeAdapter nodeAdapter) { super(nodeAdapter); } - + public void openEditDialog() { logger.debug(LogMarker.LIFECYCLE, "openEditDialog"); - + RootModel rootModel = (RootModel) getParent().getModel(); NodeAdapter node = getModel(); TableModel tableModel = (TableModel) node.unwrap(); - + // 編集前のスナップショットを保存 - JiemamyViewFacade facade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + JiemamyViewFacade facade = rootModel.getJiemamy().getFactory().getFacade(); SavePoint beforeEditSavePoint = facade.save(); - + Shell shell = getViewer().getControl().getShell(); TableEditDialog dialog = new TableEditDialog(shell, tableModel, Migration.DIAGRAM_INDEX, facade); - + if (dialog.open() == Dialog.OK) { // 編集後のスナップショットを保存 SavePoint afterEditSavePoint = facade.save(); - + Command command = new DialogEditCommand(facade, beforeEditSavePoint, afterEditSavePoint); GraphicalViewer viewer = (GraphicalViewer) getViewer(); viewer.getEditDomain().getCommandStack().execute(command); @@ -99,33 +98,33 @@ facade.rollback(beforeEditSavePoint); } } - + @Override public void refresh() { logger.debug(LogMarker.LIFECYCLE, "refresh"); super.refresh(); } - + @Override protected IFigure createFigure() { logger.debug(LogMarker.LIFECYCLE, "createFigure"); TableFigure figure = new TableFigure(); NodeAdapter node = getModel(); String description = ((TableModel) node.unwrap()).getDescription(); - + if (StringUtils.isEmpty(description) == false) { Panel tooltip = new Panel(); tooltip.setLayoutManager(new StackLayout()); tooltip.setBackgroundColor(ColorConstants.tooltipBackground); tooltip.add(new Label(description)); - + figure.setToolTip(tooltip); } - + updateFigure(figure); return figure; } - + @Override protected void updateFigure(IFigure figure) { logger.debug(LogMarker.LIFECYCLE, "updateFigure"); @@ -133,54 +132,54 @@ NodeAdapter node = getModel(); TableModel tableModel = (TableModel) node.unwrap(); TableFigure tableFigure = (TableFigure) figure; - + String labelString = LabelStringUtil.getString(rootModel, tableModel, DisplayPlace.FIGURE); - + DiagramPresentations diagramPresentations = rootModel.getAdapter(DiagramPresentations.class); DiagramPresentationModel presentation = diagramPresentations.get(Migration.DIAGRAM_INDEX); NodeProfile nodeProfile = presentation.getNodeProfiles().get(node); - + tableFigure.setTableName(labelString); - + if (nodeProfile == null) { tableFigure.setBgColor(null); } else { JmColor color = nodeProfile.getColor(); tableFigure.setBgColor(ConvertUtil.convert(color)); } - + tableFigure.removeAllColumns(); - + for (ColumnModel columnModel : TableUtil.getColumns(tableModel)) { ColumnFigure[] columnFigure = createColumnFigure(columnModel); tableFigure.add(columnFigure[0], columnFigure[1]); } } - + private ColumnFigure[] createColumnFigure(ColumnModel columnModel) { RootModel rootModel = (RootModel) getRoot().getContents().getModel(); - + DiagramPresentations diagramPresentations = rootModel.getAdapter(DiagramPresentations.class); DiagramPresentationModel presentation = diagramPresentations.get(Migration.DIAGRAM_INDEX); - + if (presentation.getLevel() == Level.ENTITY) { return new ColumnFigure[0]; } - + ColumnFigure nameLabel = new ColumnFigure(); ColumnFigure typeLabel = new ColumnFigure(); - + nameLabel.setText(LabelStringUtil.getString(rootModel, columnModel, DisplayPlace.FIGURE)); typeLabel.setText(LabelStringUtil.getString(rootModel, columnModel.getDataType(), DisplayPlace.FIGURE)); - + if (ColumnUtil.isPartOfPrimaryKeyColumns(columnModel)) { nameLabel.setUnderline(true); typeLabel.setUnderline(true); } - + return new ColumnFigure[] { - nameLabel, - typeLabel + nameLabel, + typeLabel }; } } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ViewEditPart.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ViewEditPart.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/diagram/ViewEditPart.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -40,7 +40,6 @@ import org.jiemamy.eclipse.utils.ConvertUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.DiagramPresentationModel; import org.jiemamy.model.DiagramPresentations; import org.jiemamy.model.NodeProfile; @@ -56,10 +55,10 @@ * @author daisuke */ public class ViewEditPart extends AbstractEntityNodeEditPart { - + private static Logger logger = LoggerFactory.getLogger(ViewEditPart.class); + - /** * インスタンスを生成する。 * @@ -68,25 +67,25 @@ public ViewEditPart(NodeAdapter nodeAdapter) { super(nodeAdapter); } - + public void openEditDialog() { logger.debug(LogMarker.LIFECYCLE, "openEditDialog"); - + RootModel rootModel = (RootModel) getParent().getModel(); NodeAdapter node = getModel(); ViewModel viewModel = (ViewModel) node.unwrap(); - + // 編集前のスナップショットを保存 - JiemamyViewFacade facade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + JiemamyViewFacade facade = rootModel.getJiemamy().getFactory().getFacade(); SavePoint beforeEditSavePoint = facade.save(); - + Shell shell = getViewer().getControl().getShell(); ViewEditDialog dialog = new ViewEditDialog(shell, viewModel, Migration.DIAGRAM_INDEX, facade); - + if (dialog.open() == Window.OK) { // 編集後のスナップショットを保存 SavePoint afterEditSavePoint = facade.save(); - + Command command = new DialogEditCommand(facade, beforeEditSavePoint, afterEditSavePoint); GraphicalViewer viewer = (GraphicalViewer) getViewer(); viewer.getEditDomain().getCommandStack().execute(command); @@ -95,50 +94,50 @@ facade.rollback(beforeEditSavePoint); } } - + @Override protected IFigure createFigure() { ViewFigure figure = new ViewFigure(); NodeAdapter node = getModel(); ViewModel viewModel = (ViewModel) node.unwrap(); String definition = viewModel.getDefinition(); - + if (StringUtils.isEmpty(definition) == false) { Panel tooltip = new Panel(); tooltip.setLayoutManager(new StackLayout()); tooltip.setBackgroundColor(ColorConstants.tooltipBackground); tooltip.add(new Label(definition)); - + figure.setToolTip(tooltip); } - + updateFigure(figure); return figure; } - + @Override protected void updateFigure(IFigure figure) { RootModel rootModel = (RootModel) getRoot().getContents().getModel(); NodeAdapter node = getModel(); ViewModel viewModel = (ViewModel) node.unwrap(); ViewFigure viewFigure = (ViewFigure) figure; - + String labelString = LabelStringUtil.getString(rootModel, viewModel, DisplayPlace.FIGURE); DiagramPresentations diagramPresentations = rootModel.getAdapter(DiagramPresentations.class); DiagramPresentationModel presentation = diagramPresentations.get(Migration.DIAGRAM_INDEX); NodeProfile nodeProfile = presentation.getNodeProfiles().get(node); - + viewFigure.setEntityName(labelString); - + if (nodeProfile == null) { viewFigure.setBgColor(null); } else { JmColor color = nodeProfile.getColor(); viewFigure.setBgColor(ConvertUtil.convert(color)); } - + viewFigure.removeAllColumns(); - + // TODO カラム部の表示 } } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/TableTreeEditPart.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/TableTreeEditPart.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/TableTreeEditPart.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -39,7 +39,6 @@ import org.jiemamy.eclipse.editor.utils.LabelStringUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.JiemamyElement; import org.jiemamy.model.RootModel; import org.jiemamy.model.attribute.AttributeModel; @@ -51,10 +50,10 @@ * @author daisuke */ public class TableTreeEditPart extends AbstractEntityTreeEditPart { - + private static Logger logger = LoggerFactory.getLogger(TableTreeEditPart.class); + - /** * インスタンスを生成する。 * @@ -63,34 +62,34 @@ public TableTreeEditPart(TableModel tableModel) { setModel(tableModel); } - + @Override public TableModel getModel() { return (TableModel) super.getModel(); } - + public JiemamyElement getTargetModel() { TableModel model = getModel(); return model; } - + public void openEditDialog() { logger.debug(LogMarker.LIFECYCLE, "openEditDialog"); - + RootModel rootModel = (RootModel) getParent().getModel(); TableModel tableModel = getModel(); - + // 編集前のスナップショットを保存 - JiemamyViewFacade facade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + JiemamyViewFacade facade = rootModel.getJiemamy().getFactory().getFacade(); SavePoint beforeEditSavePoint = facade.save(); - + Shell shell = getViewer().getControl().getShell(); TableEditDialog dialog = new TableEditDialog(shell, tableModel, Migration.DIAGRAM_INDEX, facade); - + if (dialog.open() == Window.OK) { // 編集後のスナップショットを保存 SavePoint afterEditSavePoint = facade.save(); - + Command command = new DialogEditCommand(facade, beforeEditSavePoint, afterEditSavePoint); GraphicalViewer viewer = (GraphicalViewer) getViewer(); viewer.getEditDomain().getCommandStack().execute(command); @@ -99,7 +98,7 @@ facade.rollback(beforeEditSavePoint); } } - + @Override public void setModel(Object model) { if (model instanceof TableModel) { @@ -108,26 +107,26 @@ throw new IllegalArgumentException(); } } - + @Override protected void createEditPolicies() { installEditPolicy(EditPolicy.COMPONENT_ROLE, new JmTreeComponentEditPolicy()); } - + @Override protected List<AttributeModel> getModelChildren() { // ここで返された子モデルがツリーの子アイテムになる TableModel tableModel = getModel(); return tableModel.getAttributes(); } - + @Override protected void refreshVisuals() { RootModel rootModel = (RootModel) getRoot().getContents().getModel(); TableModel model = getModel(); // ツリー・アイテムのテキストとしてモデルのテキストを設定 setWidgetText(LabelStringUtil.getString(rootModel, model, DisplayPlace.OUTLINE_TREE)); - + ImageRegistry ir = JiemamyUIPlugin.getDefault().getImageRegistry(); setWidgetImage(ir.get(Images.ICON_TABLE)); } Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/ViewTreeEditPart.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/ViewTreeEditPart.java 2009-03-22 03:38:28 UTC (rev 2979) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/editpart/outlinetree/ViewTreeEditPart.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -37,7 +37,6 @@ import org.jiemamy.eclipse.editor.utils.LabelStringUtil; import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.facade.SavePoint; -import org.jiemamy.internal.JiemamyViewFacadeImpl; import org.jiemamy.model.JiemamyElement; import org.jiemamy.model.RootModel; import org.jiemamy.model.entity.ViewModel; @@ -49,10 +48,10 @@ * @author daisuke */ public class ViewTreeEditPart extends AbstractEntityTreeEditPart { - + private static Logger logger = LoggerFactory.getLogger(ViewTreeEditPart.class); + - /** * インスタンスを生成する。 * @@ -61,34 +60,34 @@ public ViewTreeEditPart(ViewModel viewModel) { setModel(viewModel); } - + @Override public ViewModel getModel() { return (ViewModel) super.getModel(); } - + public JiemamyElement getTargetModel() { ViewModel model = getModel(); return model; } - + public void openEditDialog() { logger.debug(LogMarker.LIFECYCLE, "openEditDialog"); - + RootModel rootModel = (RootModel) getParent().getModel(); ViewModel viewModel = getModel(); - + // 編集前のスナップショットを保存 - JiemamyViewFacade facade = new JiemamyViewFacadeImpl(rootModel.getJiemamy()); + JiemamyViewFacade facade = rootModel.getJiemamy().getFactory().getFacade(); SavePoint beforeEditSavePoint = facade.save(); - + Shell shell = getViewer().getControl().getShell(); ViewEditDialog dialog = new ViewEditDialog(shell, viewModel, Migration.DIAGRAM_INDEX, facade); - + if (dialog.open() == Window.OK) { // 編集後のスナップショットを保存 SavePoint afterEditSavePoint = facade.save(); - + Command command = new DialogEditCommand(facade, beforeEditSavePoint, afterEditSavePoint); GraphicalViewer viewer = (GraphicalViewer) getViewer(); viewer.getEditDomain().getCommandStack().execute(command); @@ -97,7 +96,7 @@ facade.rollback(beforeEditSavePoint); } } - + @Override public void setModel(Object model) { if (model instanceof ViewModel) { @@ -106,19 +105,19 @@ throw new IllegalArgumentException(); } } - + @Override protected void createEditPolicies() { installEditPolicy(EditPolicy.COMPONENT_ROLE, new JmTreeComponentEditPolicy()); } - + @Override protected void refreshVisuals() { RootModel rootModel = (RootModel) getRoot().getContents().getModel(); ViewModel model = getModel(); // ツリー・アイテムのテキストとしてモデルのテキストを設定 setWidgetText(LabelStringUtil.getString(rootModel, model, DisplayPlace.OUTLINE_TREE)); - + ImageRegistry ir = JiemamyUIPlugin.getDefault().getImageRegistry(); setWidgetImage(ir.get(Images.ICON_VIEW)); } 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-03-22 03:38:28 UTC (rev 2979) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/Jiemamy.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -26,6 +26,7 @@ import org.jiemamy.dialect.EmitConfig; import org.jiemamy.exception.IllegalImplementationException; import org.jiemamy.exception.JiemamyRuntimeException; +import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.model.RootModel; import org.jiemamy.model.sql.SqlStatement; import org.jiemamy.serializer.JiemamySerializer; @@ -245,6 +246,17 @@ } /** + * TODO for daisuke + * + * @param <T> + * @return + * @since 0.2 + */ + public <T extends JiemamyFacade>T newFacade() { + return defaultImplementation.newFacade(this); + } + + /** * JiemamyFactoryを取得する。 * * <p>与える{@link JiemamyImplementation}によって、ファクトリが生成する実装の種類及び、 Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyFactory.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyFactory.java 2009-03-22 03:38:28 UTC (rev 2979) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyFactory.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -22,6 +22,7 @@ import java.util.UUID; import org.jiemamy.exception.IllegalImplementationException; +import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.model.JiemamyElement; import org.jiemamy.model.RootModel; import org.jiemamy.model.attribute.ColumnModel; @@ -46,6 +47,15 @@ public interface JiemamyFactory { /** + * TODO for daisuke + * @param <T> + * + * @return + * @since 0.2 + */ + <T extends JiemamyFacade>T getFacade(); + + /** * Jiemamy実装を取得する。 * * <p>{@code null}を返してはならない。</p> @@ -108,6 +118,16 @@ boolean hasRootModel(); /** + * TODO for daisuke + * + * @param <T> + * @param clazz + * @return + * @since 0.2 + */ + <T>T newAdapter(Class<T> clazz); + + /** * 新しいモデルビルダを生成する。 * * @param <M> モデルの型 @@ -186,18 +206,6 @@ */ DomainRef newReference(DomainModel domainModel); - /** - * {@link TableModel}の参照オブジェクトを生成する。 - * - * <p>{@code null}を返してはならない。</p> - * - * @param tableModel 対象の{@link TableModel} - * @return {@link TableModel}の参照オブジェクト - * @throws IllegalArgumentException 引数に{@code null}を与えた場合 - * @since 0.2 - */ - TableRef newReference(TableModel tableModel); - // /** // * 新しい{@link RootModel}を生成する。 // * @@ -218,6 +226,18 @@ // RootModel newRootModel(UUID id); /** + * {@link TableModel}の参照オブジェクトを生成する。 + * + * <p>{@code null}を返してはならない。</p> + * + * @param tableModel 対象の{@link TableModel} + * @return {@link TableModel}の参照オブジェクト + * @throws IllegalArgumentException 引数に{@code null}を与えた場合 + * @since 0.2 + */ + TableRef newReference(TableModel tableModel); + + /** * ファクトリが使用するJiemamy実装を設定する。 * * <p>このメソッドは、ファクトリのインスタンス生成直後に一度だけ呼ばれるべきである。 Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyImplementation.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyImplementation.java 2009-03-22 03:38:28 UTC (rev 2979) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyImplementation.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -20,6 +20,7 @@ import java.util.Set; +import org.jiemamy.facade.JiemamyFacade; import org.jiemamy.serializer.JiemamySerializer; /** @@ -98,4 +99,6 @@ * @since 0.2 */ Version getVersion(); + + <T extends JiemamyFacade>T newFacade(Jiemamy jiemamy); } Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java 2009-03-22 03:38:28 UTC (rev 2979) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/attribute/ColumnModel.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -23,6 +23,7 @@ import org.jiemamy.model.attribute.constraint.PrimaryKey; import org.jiemamy.model.attribute.constraint.UniqueKey; import org.jiemamy.model.datatype.DataType; +import org.jiemamy.model.datatype.DataTypeHolder; /** * リレーショナルデータベースにおける「カラム」を表すモデルインターフェイス。 @@ -30,7 +31,7 @@ * @since 0.2 * @author daisuke */ -public interface ColumnModel extends AttributeModel { +public interface ColumnModel extends AttributeModel, DataTypeHolder { /** * チェック制約を取得する。 Added: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataTypeHolder.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataTypeHolder.java (rev 0) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataTypeHolder.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -0,0 +1,47 @@ +/* + * Copyright 2007-2009 Jiemamy Project and the Others. + * Created on 2009/03/23 + * + * This file is part of Jiemamy. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.jiemamy.model.datatype; + +/** + * TODO for daisuke + * + * @since 0.2 + * @author daisuke + */ +public interface DataTypeHolder { + + /** + * 型記述子を取得する。 + * + * @return 型記述子. 未設定の場合は{@code null} + * @since 0.2 + */ + DataType getDataType(); + + /** + * 型記述子を設定する。 + * + * <p>未設定とする場合は{@code null}を与えるが、モデルとしては無効となる。</p> + * + * @param dataType 型記述子 + * @since 0.2 + */ + void setDataType(DataType dataType); + +} Property changes on: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DataTypeHolder.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DomainModel.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DomainModel.java 2009-03-22 03:38:28 UTC (rev 2979) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/model/datatype/DomainModel.java 2009-03-23 03:57:47 UTC (rev 2980) @@ -30,7 +30,7 @@ * @since 0.2 * @author daisuke */ -public interface DomainModel extends JiemamyElement, DataTypeMold<DomainRef> { +public interface DomainModel extends JiemamyElement, DataTypeMold<DomainRef>, DataTypeHolder { /** * {@inheritDoc} @@ -112,19 +112,9 @@ * @param check チェック制約 * @since 0.2 */ - void setCheck(ColumnCheckConstraint check); + void setCheckConstraint(ColumnCheckConstraint check); /** - * ドメインとして定義された型記述子を設定する。 - * - * <p>未設定とする場合は{@code null}を与えるが、モデルとしては無効となる。</p> - * - * @param dataType ドメインとして定義された型記述子 - * @since 0.2 - */ - void setDataType(BuiltinDataType dataType); - - /** * 説明文を設定する。 * * <p>未設定とする場合は{@code null}を与える。</p> @@ -162,6 +152,6 @@ * @param notNull NOT NULL制約 * @since 0.2 */ - void setNotNull(NotNullConstraint notNull); + void setNotNullConstraint(NotNullConstraint notNull); }