svnno****@sourc*****
svnno****@sourc*****
2009年 3月 23日 (月) 19:14:20 JST
Revision: 2982 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=2982 Author: daisuke_m Date: 2009-03-23 19:14:20 +0900 (Mon, 23 Mar 2009) Log Message: ----------- カラムやキー削除した場合に、整合性をとる処理追加。 Disablable機能の実装。 javadoc / refcactor Modified Paths: -------------- artemis/trunk/jiemamy-core/pom.xml artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/DefaultSqlEmitter.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/generic/GenericDialect.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/JiemamyFacadeImpl.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/enhance/FactoryExtension.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/JiemamyFacadeImplTest.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ReferenceResolverImplTest.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/DataSetUtilTest.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/RootModelUtilTest.java artemis/trunk/jiemamy-dialect-mysql/src/main/java/org/jiemamy/dialect/mysql/MySqlEmitter.java artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/PostgreSqlEmitter.java artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexColumnOption.java artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexMethodType.java artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOption.java artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOptionImpl.java artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/NullOrder.java artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/TableOption.java artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/model/connection/ConnectionAdapterImpl.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/CreateConnectionCommand.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/dialog/view/ViewEditDialog.java hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/utils/LabelStringUtil.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/facade/JiemamyFacade.java -------------- next part -------------- Modified: artemis/trunk/jiemamy-core/pom.xml =================================================================== --- artemis/trunk/jiemamy-core/pom.xml 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/pom.xml 2009-03-23 10:14:20 UTC (rev 2982) @@ -143,7 +143,7 @@ <!-- TODO ライセンス処理未完了 --> <groupId>net.sf.opencsv</groupId> <artifactId>opencsv</artifactId> - <version>1.8</version> + <version>1.8</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/DefaultSqlEmitter.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/DefaultSqlEmitter.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/DefaultSqlEmitter.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -57,6 +57,7 @@ import org.jiemamy.model.sql.SqlStatement; import org.jiemamy.model.sql.Token; import org.jiemamy.utils.CollectionsUtil; +import org.jiemamy.utils.Disablable; import org.jiemamy.utils.EntityDependencyCalculator; import org.jiemamy.utils.model.DataTypeUtil; import org.jiemamy.utils.model.ForeignKeyUtil; @@ -97,6 +98,10 @@ } for (EntityModel entityModel : EntityDependencyCalculator.getSortedEntityList(rootModel)) { + if (entityModel.hasAdapter(Disablable.class) + && entityModel.getAdapter(Disablable.class).isDisabled() == Boolean.TRUE) { + continue; + } if (StringUtils.isEmpty(entityModel.getBeginScript()) == false) { result.add(new SqlStatementImpl(Literal.of(entityModel.getBeginScript(), LiteralType.FRAGMENT))); } @@ -110,6 +115,10 @@ if (entityModel instanceof TableModel) { TableModel tableModel = (TableModel) entityModel; for (IndexModel indexModel : tableModel.getIndexes()) { + if (indexModel.hasAdapter(Disablable.class) + && indexModel.getAdapter(Disablable.class).isDisabled() == Boolean.TRUE) { + continue; + } if (config.emitDropStatements()) { result.add(emitDropIndexStatement(indexModel)); } @@ -166,6 +175,7 @@ List<IndexColumnModel> indexColumns = indexModel.getIndexColumns(); for (IndexColumnModel indexColumnModel : indexColumns) { tokens.addAll(emitIndexColumnClause(indexColumnModel)); + tokens.add(Separator.COMMA); } tokens.remove(tokens.size() - 1); tokens.add(Separator.RIGHT_PAREN); @@ -229,10 +239,10 @@ } /** - * TODO for daisuke + * インデックスカラムの定義句を出力する。 * - * @param indexColumnModel - * @return + * @param indexColumnModel 対象インデックスカラム + * @return トークンシーケンス */ protected List<Token> emitIndexColumnClause(IndexColumnModel indexColumnModel) { List<Token> tokens = CollectionsUtil.newArrayList(); @@ -242,7 +252,6 @@ tokens.add(Identifier.of(columnModel.getName())); SortOrder sortOrder = indexColumnModel.getSortOrder(); tokens.addAll(tokenResolver.resolve(sortOrder)); - tokens.add(Separator.COMMA); return tokens; } @@ -538,6 +547,10 @@ tokens.add(Identifier.of(tableModel.getName())); tokens.add(Separator.LEFT_PAREN); for (AttributeModel attributeModel : tableModel.getAttributes()) { + if (attributeModel.hasAdapter(Disablable.class) + && attributeModel.getAdapter(Disablable.class).isDisabled() == Boolean.TRUE) { + continue; + } AttributeEmitStrategy strategy = AttributeEmitStrategy.fromAttribute(attributeModel); List<Token> attributes = strategy.emit(attributeModel, resolver, tokenResolver); tokens.addAll(attributes); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/generic/GenericDialect.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/generic/GenericDialect.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/generic/GenericDialect.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -48,7 +48,7 @@ * 全てのSQL方言に対応し得る、最大公約数的なSQL方言実装クラス。 * @author daisuke */ -public class GenericDialect implements Dialect { +public final class GenericDialect implements Dialect { private DataTypeResolver dataTypeResolver = new DefaultDataTypeResolver(this); Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/JiemamyFacadeImpl.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/JiemamyFacadeImpl.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/JiemamyFacadeImpl.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -21,9 +21,11 @@ import java.util.Collection; import java.util.List; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.Validate; import org.jiemamy.Jiemamy; +import org.jiemamy.JiemamyFactory; import org.jiemamy.JiemamyProperty; import org.jiemamy.editcommand.Command; import org.jiemamy.editcommand.CommandProcessor; @@ -53,6 +55,7 @@ import org.jiemamy.model.attribute.ColumnRef; import org.jiemamy.model.attribute.constraint.ForeignKey; import org.jiemamy.model.attribute.constraint.KeyConstraint; +import org.jiemamy.model.attribute.constraint.LocalKeyConstraint; import org.jiemamy.model.dataset.DataSetModel; import org.jiemamy.model.dataset.RecordModel; import org.jiemamy.model.datatype.DomainModel; @@ -64,6 +67,7 @@ import org.jiemamy.utils.CollectionsUtil; import org.jiemamy.utils.EssentialStack; import org.jiemamy.utils.EssentialStacks; +import org.jiemamy.utils.model.AttributeUtil; import org.jiemamy.utils.model.EntityUtil; import org.jiemamy.utils.model.ForeignKeyUtil; import org.jiemamy.utils.model.TableUtil; @@ -186,6 +190,33 @@ } public void removeAttribute(TableModel tableModel, AttributeModel attributeModel) { + if (attributeModel instanceof LocalKeyConstraint) { + LocalKeyConstraint localKeyConstraint = (LocalKeyConstraint) attributeModel; + TableModel definedTable = AttributeUtil.getDefinedTable(localKeyConstraint); + Collection<EntityModel> dependentEntities = EntityUtil.getDependentEntities(definedTable, false); + for (EntityModel entityModel : dependentEntities) { + if (entityModel instanceof TableModel) { + TableModel dependentTable = (TableModel) entityModel; + List<ForeignKey> foreignKeys = TableUtil.getAttributes(dependentTable, ForeignKey.class); + for (ForeignKey foreignKey : foreignKeys) { + if (ForeignKeyUtil.getReferenceKeyConstraint(foreignKey) == null) { + removeAttribute(dependentTable, foreignKey); + } + } + } else { + // TODO + } + } + } + + if (attributeModel instanceof ColumnModel) { + ColumnModel columnModel = (ColumnModel) attributeModel; + List<KeyConstraint> keys = TableUtil.getAttributes(tableModel, KeyConstraint.class, true); + for (KeyConstraint keyConstraint : keys) { + removeKeyColumn(keyConstraint, columnModel); + } + } + RemoveAttributeCommand command = new RemoveAttributeCommand(tableModel, attributeModel); command.execute(getCommandProcessor()); undoStack.push(command.getNegateCommand()); @@ -241,11 +272,35 @@ } public void removeKeyColumn(KeyConstraint keyConstraint, ColumnModel columnModel) { + JiemamyFactory factory = jiemamy.getFactory(); + int index = keyConstraint.getKeyColumns().indexOf(factory.newReference(columnModel)); + if (index == ArrayUtils.INDEX_NOT_FOUND) { + return; + } + RemoveColumnFromColumnRefListCommand command = new RemoveColumnFromColumnRefListCommand(keyConstraint, keyConstraint.getKeyColumns(), columnModel); command.execute(getCommandProcessor()); undoStack.push(command.getNegateCommand()); + // キーカラムが空になってしまったキー制約は意味を成さない為、テーブルからも削除する。 + if (keyConstraint.getKeyColumns().size() == 0) { + TableModel definedTable = AttributeUtil.getDefinedTable(keyConstraint); + if (definedTable != null) { + removeAttribute(definedTable, keyConstraint); + } + } + + // 外部キーであった場合は、対応する参照カラムも削除する。 + if (keyConstraint instanceof ForeignKey) { + ForeignKey foreignKey = (ForeignKey) keyConstraint; + ColumnRef columnRef = foreignKey.getReferenceColumns().get(index); + ColumnModel columnModel2 = jiemamy.getReferenceResolver().resolve(columnRef); + RemoveColumnFromColumnRefListCommand command2 = + new RemoveColumnFromColumnRefListCommand(foreignKey, foreignKey.getReferenceColumns(), columnModel2); + command2.execute(getCommandProcessor()); + undoStack.push(command2.getNegateCommand()); + } } public void rollback(SavePoint savePoint) { 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-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/enhance/FactoryExtension.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -268,10 +268,11 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); TableModelImpl tableModel = new TableModelImpl(jiemamy, id); tableModel.setAttributes(new ArrayList<AttributeModel>()); tableModel.setIndexes(new ArrayList<IndexModel>()); - tableModel.registerAdapter(new DisablableImpl()); + tableModel.registerAdapter(factory.newAdapter(Disablable.class)); return (T) tableModel; } }, @@ -280,8 +281,9 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); ViewModelImpl viewModel = new ViewModelImpl(jiemamy, id); - viewModel.registerAdapter(new DisablableImpl()); + viewModel.registerAdapter(factory.newAdapter(Disablable.class)); return (T) viewModel; } }, @@ -290,9 +292,10 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); ColumnModelImpl columnModel = new ColumnModelImpl(jiemamy, id); - columnModel.registerAdapter(new RepresentationAdapter()); - columnModel.registerAdapter(new DisablableImpl()); + columnModel.registerAdapter(factory.newAdapter(RepresentationAdapter.class)); + columnModel.registerAdapter(factory.newAdapter(Disablable.class)); return (T) columnModel; } }, @@ -301,9 +304,10 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); PrimaryKeyImpl primaryKey = new PrimaryKeyImpl(jiemamy, id); primaryKey.setKeyColumns(new ArrayList<ColumnRef>()); - primaryKey.registerAdapter(new DisablableImpl()); + primaryKey.registerAdapter(factory.newAdapter(Disablable.class)); return (T) primaryKey; } }, @@ -312,9 +316,10 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); UniqueKeyImpl uniqueKey = new UniqueKeyImpl(jiemamy, id); uniqueKey.setKeyColumns(new ArrayList<ColumnRef>()); - uniqueKey.registerAdapter(new DisablableImpl()); + uniqueKey.registerAdapter(factory.newAdapter(Disablable.class)); return (T) uniqueKey; } }, @@ -323,10 +328,11 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); ForeignKeyImpl foreignKey = new ForeignKeyImpl(jiemamy, id); foreignKey.setKeyColumns(new ArrayList<ColumnRef>()); foreignKey.setReferenceColumns(new ArrayList<ColumnRef>()); - foreignKey.registerAdapter(new DisablableImpl()); + foreignKey.registerAdapter(factory.newAdapter(Disablable.class)); return (T) foreignKey; } }, @@ -344,8 +350,9 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); TableCheckConstraintImpl checkConstraint = new TableCheckConstraintImpl(jiemamy, id); - checkConstraint.registerAdapter(new DisablableImpl()); + checkConstraint.registerAdapter(factory.newAdapter(Disablable.class)); return (T) checkConstraint; } }, @@ -354,8 +361,9 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); ColumnCheckConstraintImpl checkConstraint = new ColumnCheckConstraintImpl(jiemamy, id); - checkConstraint.registerAdapter(new DisablableImpl()); + checkConstraint.registerAdapter(factory.newAdapter(Disablable.class)); return (T) checkConstraint; } }, @@ -364,8 +372,9 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); NotNullConstraintImpl nnModel = new NotNullConstraintImpl(jiemamy, id); - nnModel.registerAdapter(new DisablableImpl()); + nnModel.registerAdapter(factory.newAdapter(Disablable.class)); return (T) nnModel; } }, @@ -404,9 +413,10 @@ @Override public <T>T newInstance(Jiemamy jiemamy, UUID id) { + JiemamyFactory factory = jiemamy.getFactory(); IndexModelImpl indexModel = new IndexModelImpl(jiemamy, id); indexModel.setColumns(new ArrayList<IndexColumnModel>()); - indexModel.registerAdapter(new DisablableImpl()); + indexModel.registerAdapter(factory.newAdapter(Disablable.class)); return (T) indexModel; } }, 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-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/serializer/JiemamyDomParser.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -387,8 +387,7 @@ DomainModel domainModel = factory.newModel(DomainModel.class, DomUtil.getUUID(domainNode, CoreQName.ID)); domainModel.setName(XpathUtil.getTextContent(domainNode, "core:name")); domainModel.setLogicalName(XpathUtil.getTextContent(domainNode, "core:logicalName")); - domainModel.setDataType((BuiltinDataType) getDataType((Element) XpathUtil.getNode(domainNode, - "core:dataType"))); + domainModel.setDataType(getDataType((Element) XpathUtil.getNode(domainNode, "core:dataType"))); Node nnNode = XpathUtil.getNode(domainNode, "core:notNull"); if (nnNode != null) { Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/AttributeUtil.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -85,7 +85,7 @@ * この属性が所属するテーブルを取得する。 * * @param attribute 対象属性モデル - * @return この属性が所属するテーブル + * @return この属性が所属するテーブル. どのテーブルにも所属していない場合は{@code null} * @throws ModelConsistenceException * @throws IllegalArgumentException 引数に{@code null}を与えた場合 */ @@ -99,8 +99,6 @@ return tableModel; } } - // THINK nullにするか例外にするか。 -// throw new JiemamyRuntimeException(); return null; } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/EntityUtil.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -129,6 +129,9 @@ ColumnRef columnRef = foreignKey.getReferenceColumns().get(0); ColumnModel columnModel = resolver.resolve(columnRef); TableModel referenceTableModel = AttributeUtil.getDefinedTable(columnModel); + if (referenceTableModel == null) { + continue; + } if (referenceTableModel.getId().equals(standardEntity.getId())) { dependents.add(dependentTableModel); } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/utils/model/ForeignKeyUtil.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -92,7 +92,7 @@ * この外部キーが参照するエンティティを取得する。 * * @param foreignKey 対象外部キー - * @return この外部キーが参照するエンティティ + * @return この外部キーが参照するエンティティ. 参照エンティティが見つからない場合は{@code null} * @throws ModelConsistenceException * @throws IllegalArgumentException 引数に{@code null}を与えた場合 */ @@ -113,8 +113,6 @@ } } } - // THINK nullにするか例外にするか。 -// throw new JiemamyRuntimeException(); return null; } Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/JiemamyFacadeImplTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/JiemamyFacadeImplTest.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/JiemamyFacadeImplTest.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -84,7 +84,7 @@ } /** - * {@link JiemamyFacadeImpl#addAttribute(TableModel, org.jiemamy.internal.model.attribute.AttributeModel)}のテスト。 + * {@link JiemamyFacadeImpl#addAttribute(TableModel, org.jiemamy.model.attribute.AttributeModel)}のテスト。 */ @Test public void test_addAttribute() { @@ -126,7 +126,7 @@ } /** - * {@link JiemamyFacadeImpl#addEntity(org.jiemamy.internal.model.entity.EntityModel)}のテスト。 + * {@link JiemamyFacadeImpl#addEntity(org.jiemamy.model.entity.EntityModel)}のテスト。 */ @Test public void test_addEntity() { @@ -148,7 +148,7 @@ } /** - * {@link JiemamyFacadeImpl#addKeyColumn(org.jiemamy.internal.model.attribute.constraint.KeyConstraint, ColumnModel)}のテスト。 + * {@link JiemamyFacadeImpl#addKeyColumn(org.jiemamy.model.attribute.constraint.KeyConstraint, ColumnModel)}のテスト。 */ @Test public void test_addKeyColumn() { @@ -195,7 +195,7 @@ } /** - * {@link JiemamyFacadeImpl#removeKeyColumn(org.jiemamy.internal.model.attribute.constraint.KeyConstraint, ColumnModel)}の例外テスト。 + * {@link JiemamyFacadeImpl#removeKeyColumn(org.jiemamy.model.attribute.constraint.KeyConstraint, ColumnModel)}の例外テスト。 */ @Test(expected = IllegalArgumentException.class) @Ignore Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ReferenceResolverImplTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ReferenceResolverImplTest.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/internal/ReferenceResolverImplTest.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -118,7 +118,7 @@ } /** - * {@link ReferenceResolverImpl#isDescendFromElement(org.jiemamy.internal.model.JiemamyElement, java.util.UUID)} + * {@link ReferenceResolverImpl#isDescendFromElement(org.jiemamy.model.JiemamyElement, java.util.UUID)} * * @throws Exception 例外が発生した場合 */ Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -64,7 +64,7 @@ } /** - * {@link ColumnUtil#isPartOfPrimaryKeyColumns(org.jiemamy.internal.model.attribute.ColumnModel)}のテスト。 + * {@link ColumnUtil#isPartOfPrimaryKeyColumns(org.jiemamy.model.attribute.ColumnModel)}のテスト。 * * @throws Exception 例外が発生した場合 */ Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/DataSetUtilTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/DataSetUtilTest.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/DataSetUtilTest.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -87,7 +87,7 @@ } /** - * {@link DataSetUtil#exportToCsv(DataSetModel, org.jiemamy.internal.model.entity.TableModel, java.io.OutputStream)}のテスト。 + * {@link DataSetUtil#exportToCsv(DataSetModel, org.jiemamy.model.entity.TableModel, java.io.OutputStream)}のテスト。 * * @throws Exception 例外が発生した場合 */ @@ -104,7 +104,7 @@ } /** - * {@link DataSetUtil#importFromCsv(DataSetModel, org.jiemamy.internal.model.entity.TableModel, java.io.InputStream)}のテスト。 + * {@link DataSetUtil#importFromCsv(DataSetModel, org.jiemamy.model.entity.TableModel, java.io.InputStream)}のテスト。 * * @throws Exception 例外が発生した場合 */ Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/RootModelUtilTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/RootModelUtilTest.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/RootModelUtilTest.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -71,7 +71,7 @@ } /** - * {@link RootModelUtil#getDialect(org.jiemamy.internal.model.RootModel)}のテスト。 + * {@link RootModelUtil#getDialect(org.jiemamy.model.RootModel)}のテスト。 * * @throws Exception 例外が発生した場合 */ @@ -124,7 +124,7 @@ } /** - * {@link RootModelUtil#normalize(org.jiemamy.internal.model.RootModel)}のテスト。 + * {@link RootModelUtil#normalize(org.jiemamy.model.RootModel)}のテスト。 * * @throws Exception 例外が発生した場合 */ Modified: artemis/trunk/jiemamy-dialect-mysql/src/main/java/org/jiemamy/dialect/mysql/MySqlEmitter.java =================================================================== --- artemis/trunk/jiemamy-dialect-mysql/src/main/java/org/jiemamy/dialect/mysql/MySqlEmitter.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-mysql/src/main/java/org/jiemamy/dialect/mysql/MySqlEmitter.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -41,6 +41,7 @@ import org.jiemamy.model.sql.SqlStatement; import org.jiemamy.model.sql.Token; import org.jiemamy.utils.CollectionsUtil; +import org.jiemamy.utils.Disablable; /** * MySQL用の{@link SqlEmitter}実装クラス。 @@ -97,6 +98,10 @@ tokens.add(Identifier.of(tableModel.getName())); tokens.add(Separator.LEFT_PAREN); for (AttributeModel attributeModel : tableModel.getAttributes()) { + if (attributeModel.hasAdapter(Disablable.class) + && attributeModel.getAdapter(Disablable.class).isDisabled() == Boolean.TRUE) { + continue; + } AttributeEmitStrategy strategy = AttributeEmitStrategy.fromAttribute(attributeModel); List<Token> attributes = strategy.emit(attributeModel, dataTypeResolver, tokenResolver); tokens.addAll(attributes); Modified: artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/PostgreSqlEmitter.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/PostgreSqlEmitter.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/PostgreSqlEmitter.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -153,7 +153,6 @@ } } - tokens.add(Separator.COMMA); return tokens; } else { return super.emitIndexColumnClause(indexColumnModel); Modified: artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexColumnOption.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexColumnOption.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexColumnOption.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -18,24 +18,25 @@ */ package org.jiemamy.dialect.postgresql.adapter; + /** - * TODO for daisuke + * {@link IndexColumnOption}に対するオプションモデル。 * * @author daisuke */ public interface IndexColumnOption { /** - * TODO for daisuke + * ソートの際のNULLの扱いを取得する。 * - * @return + * @return ソートの際のNULLの扱い */ NullOrder getNullOrder(); /** - * TODO for daisuke + * ソートの際のNULLの扱いを設定する。 * - * @param nullOrder + * @param nullOrder ソートの際のNULLの扱い */ void setNullOrder(NullOrder nullOrder); Modified: artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexMethodType.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexMethodType.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexMethodType.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -19,16 +19,16 @@ package org.jiemamy.dialect.postgresql.adapter; /** - * TODO for daisuke + * インデックス構築アルゴリズムを示すインターフェイス。 * * @author daisuke */ public interface IndexMethodType { /** - * TODO for daisuke + * インデックス構築アルゴリズムの文字列表現。SQL上で直接使用される。 * - * @return + * @return インデックス構築アルゴリズム */ String toString(); } Modified: artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOption.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOption.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOption.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -40,16 +40,16 @@ Integer getFillfactor(); /** - * TODO for daisuke + * インデックス構築アルゴリズムを取得する。 * - * @return + * @return インデックス構築アルゴリズム */ IndexMethodType getIndexMethodType(); /** - * TODO for daisuke + * 部分インデックス生成用条件を取得する。 * - * @return + * @return 部分インデックス生成用条件 */ String getPredicate(); @@ -68,16 +68,16 @@ void setFillfactor(Integer fillfactor); /** - * TODO for daisuke + * インデックス構築アルゴリズムを設定する。 * - * @param indexMethodType + * @param indexMethodType インデックス構築アルゴリズム */ void setIndexMethodType(IndexMethodType indexMethodType); /** - * TODO for daisuke + * 部分インデックス生成用条件を設定する。 * - * @param predicate + * @param predicate 部分インデックス生成用条件 */ void setPredicate(String predicate); Modified: artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOptionImpl.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOptionImpl.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/IndexOptionImpl.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -29,6 +29,7 @@ @Adapter(AdapterType.MODEL) public class IndexOptionImpl extends AbstractPostgresObjectOption implements IndexOption { + /** インデックス構築アルゴリズム */ private IndexMethodType indexMethodType; private Boolean concurrently; Modified: artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/NullOrder.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/NullOrder.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/NullOrder.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -19,7 +19,7 @@ package org.jiemamy.dialect.postgresql.adapter; /** - * TODO for daisuke + * ソートの際のNULLの扱いを示す列挙型。 * * @author daisuke */ Modified: artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/TableOption.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/TableOption.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/main/java/org/jiemamy/dialect/postgresql/adapter/TableOption.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -18,15 +18,27 @@ */ package org.jiemamy.dialect.postgresql.adapter; +import org.jiemamy.model.entity.TableModel; + /** - * TODO for daisuke + * {@link TableModel}に対するオプションモデル。 * * @author daisuke */ public interface TableOption extends PostgresObjectOption { + /** + * TODO for daisuke + * + * @return + */ CommitAction getCommitAction(); + /** + * TODO for daisuke + * + * @return + */ Boolean isTemporary(); } Modified: artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -63,6 +63,7 @@ public DataSource dataSource; /** JDBCドライバ */ + @SuppressWarnings("unused") private Driver driver; private Dialect dialect; Modified: artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/model/connection/ConnectionAdapterImpl.java =================================================================== --- artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/model/connection/ConnectionAdapterImpl.java 2009-03-23 05:04:57 UTC (rev 2981) +++ artemis/trunk/jiemamy-view/src/main/java/org/jiemamy/internal/model/connection/ConnectionAdapterImpl.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -88,9 +88,9 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("ConnectionAdapter(S="); - sb.append(getSource()); + sb.append(coreForeignKey.getKeyColumns().size() > 0 ? getSource() : "UNKNOWN"); sb.append(", T="); - sb.append(getTarget()); + sb.append(coreForeignKey.getReferenceColumns().size() > 0 ? getTarget() : "UNKNOWN"); sb.append(")"); return sb.toString(); // return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); 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-23 05:04:57 UTC (rev 2981) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ExportAction.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -18,8 +18,10 @@ */ package org.jiemamy.eclipse.action; +import java.io.IOException; import java.util.List; +import org.apache.commons.lang.SystemUtils; import org.apache.commons.lang.Validate; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; @@ -39,6 +41,7 @@ import org.jiemamy.composer.ExportConfig; import org.jiemamy.composer.ExportException; import org.jiemamy.composer.Exporter; +import org.jiemamy.composer.exporter.FileExportConfig; import org.jiemamy.eclipse.editor.JiemamyEditor; import org.jiemamy.eclipse.ui.ExporterWizard; import org.jiemamy.eclipse.utils.ExceptionHandler; @@ -114,9 +117,26 @@ ExportConfig config = wizard.getConfig(); // 実行 - exporter.exportModel(rootModel, config); + boolean success = exporter.exportModel(rootModel, config); - MessageDialog.openInformation(null, "export succeeded", "エクスポートが正常に完了しました。"); // RESOURCE + if (success) { + if (SystemUtils.IS_OS_WINDOWS && config instanceof FileExportConfig) { + FileExportConfig fileExportConfig = (FileExportConfig) config; + boolean result = MessageDialog.openQuestion(null, "Success", "エクスポートが完了しました。ファイルを開きますか?"); // RESOURCE + if (result) { + try { + Runtime.getRuntime().exec( + "cmd /c \"" + fileExportConfig.getOutputFile().getAbsolutePath() + "\""); + } catch (IOException e) { + MessageDialog.openError(shell, "Failed", "ファイルが開けませんでした。"); // RESOURCE + } + } + } else { + MessageDialog.openInformation(shell, "export succeeded", "エクスポートが正常に完了しました。"); // RESOURCE + } + } else { + MessageDialog.openWarning(shell, "export aborted", "エクスポートは行われませんでした。"); // RESOURCE + } } catch (ExportException e) { ExceptionHandler.handleException(e); } finally { 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-23 05:04:57 UTC (rev 2981) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/action/ImportAction.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -113,9 +113,13 @@ ImportConfig config = wizard.getConfig(); // 実行 - importer.importModel(rootModel, config); + boolean success = importer.importModel(rootModel, config); - MessageDialog.openInformation(null, "import succeeded", "インポートが正常に完了しました。"); // RESOURCE + if (success) { + MessageDialog.openInformation(shell, "import succeeded", "インポートが正常に完了しました。"); // RESOURCE + } else { + MessageDialog.openWarning(shell, "import aborted", "インポートは行われませんでした。"); // RESOURCE + } } catch (ImportException e) { ExceptionHandler.handleException(e); } finally { 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-23 05:04:57 UTC (rev 2981) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/command/CreateConnectionCommand.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -22,6 +22,7 @@ import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.gef.commands.Command; +import org.eclipse.jface.dialogs.MessageDialog; import org.seasar.eclipse.common.util.LogUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,13 +89,13 @@ @Override public boolean canExecute() { logger.debug(LogMarker.LIFECYCLE, "canExecute"); - // try { - // source = connection.getSource(); - // target = connection.getTarget(); - // } catch (ModelConsistenceException e) { - // logger.debug("ModelConsistenceException"); - // return false; - // } +// try { +// source = connection.getSource(); +// target = connection.getTarget(); +// } catch (ModelConsistenceException e) { +// logger.debug("ModelConsistenceException"); +// return false; +// } if (source == null || target == null) { logger.debug("source or target is null: " + source + " " + target); @@ -103,12 +104,14 @@ // Viewとはコネクションが貼れない if (source.unwrap() instanceof ViewModel || target.unwrap() instanceof ViewModel) { + MessageDialog.openError(null, "", "VIEWに対して外部キーを作成することはできません。"); LogUtil.log(JiemamyUIPlugin.getDefault(), "attempt to connect with VIEW"); // RESOURCE return false; } // 現状、付箋とはコネクションが貼れない if (source.unwrap() instanceof StickyModel || target.unwrap() instanceof StickyModel) { + MessageDialog.openError(null, "", "付箋に対して外部キーを作成することはできません。"); LogUtil.log(JiemamyUIPlugin.getDefault(), "attempt to connect with STICKY"); // RESOURCE return false; } @@ -121,20 +124,21 @@ // ローカルキーが1つもないテーブルへは外部キーが貼れない if (getKey((TableModel) target.unwrap()) == null) { + MessageDialog.openError(null, "", "キーが存在しないテーブルを参照する外部キーを作成することはできません。"); LogUtil.log(JiemamyUIPlugin.getDefault(), "attempt to connect to TABLE without local keys"); // RESOURCE return false; } // THINK 違うキー同士で参照してる可能性は? - // if (connection.unwrap() != null) { - // // 循環参照の禁止(ターゲットの親に自分がいたら、参照不可) - // - // Collection<EntityModel> refs = EntityUtil.getReferenceEntities(target.unwrap(), true); - // if (refs.contains(source.unwrap())) { - // LogUtil.log(JiemamyPlugin.getDefault(), "attempt to create cyclic connection"); // RESOURCE - // return false; - // } - // } +// if (connection.unwrap() != null) { +// // 循環参照の禁止(ターゲットの親に自分がいたら、参照不可) +// +// Collection<EntityModel> refs = EntityUtil.getReferenceEntities(target.unwrap(), true); +// if (refs.contains(source.unwrap())) { +// LogUtil.log(JiemamyPlugin.getDefault(), "attempt to create cyclic connection"); // RESOURCE +// return false; +// } +// } return true; } 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-23 05:04:57 UTC (rev 2981) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialog.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -41,6 +41,7 @@ import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.Text; +import org.jiemamy.JiemamyFactory; import org.jiemamy.JiemamyProperty.EntityProperty; import org.jiemamy.eclipse.Images; import org.jiemamy.eclipse.JiemamyUIPlugin; @@ -55,6 +56,7 @@ import org.jiemamy.model.entity.EntityModel; import org.jiemamy.model.entity.TableModel; import org.jiemamy.model.node.NodeAdapter; +import org.jiemamy.utils.Disablable; import org.jiemamy.utils.model.JiemamyPropertyUtil; import org.jiemamy.utils.model.TableUtil; @@ -117,7 +119,7 @@ // ---- A. 最上段名称欄 Composite composite = (Composite) super.createDialogArea(parent); - composite.setLayout(new GridLayout(6, false)); + composite.setLayout(new GridLayout(7, false)); // ---- A-1. テーブル名 Label label = new Label(composite, SWT.NONE); @@ -168,10 +170,29 @@ } }); + final Button btnDisable = new Button(composite, SWT.CHECK); + btnDisable.setText("無効"); // RESOURCE + btnDisable.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent evt) { + if (tableModel.hasAdapter(Disablable.class) == false) { + JiemamyFactory factory = tableModel.getJiemamy().getFactory(); + tableModel.registerAdapter(factory.newAdapter(Disablable.class)); + } + tableModel.getAdapter(Disablable.class).setDisabled(btnDisable.getSelection()); + } + + }); + if (tableModel.hasAdapter(Disablable.class) + && tableModel.getAdapter(Disablable.class).isDisabled() == Boolean.TRUE) { + btnDisable.setSelection(true); + } + // ---- B. タブ TabFolder tabFolder = new TabFolder(composite, SWT.NULL); GridData gd = new GridData(GridData.FILL_BOTH); - gd.horizontalSpan = 6; + gd.horizontalSpan = 7; tabFolder.setLayoutData(gd); // ---- B-1. カラム 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-23 05:04:57 UTC (rev 2981) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -100,6 +100,7 @@ import org.jiemamy.model.datatype.DomainRef; import org.jiemamy.model.entity.TableModel; import org.jiemamy.utils.CollectionsUtil; +import org.jiemamy.utils.Disablable; import org.jiemamy.utils.LogMarker; import org.jiemamy.utils.model.ColumnUtil; import org.jiemamy.utils.model.JiemamyPropertyUtil; @@ -293,6 +294,8 @@ private Button chkIsPK; + private Button chkIsDisabled; + // private Button chkIsRepresentation; private Text txtDescription; @@ -377,6 +380,8 @@ chkIsNotNull.addSelectionListener(editListener); + chkIsDisabled.addSelectionListener(editListener); + // chkIsRepresentation.addSelectionListener(editListener); txtDefaultValue.addFocusListener(new TextSelectionAdapter(txtDefaultValue)); @@ -528,6 +533,9 @@ chkIsNotNull = new Button(cmpChecks, SWT.CHECK); chkIsNotNull.setText("NOT NULL(&N)"); // RESOURCE + chkIsDisabled = new Button(cmpChecks, SWT.CHECK); + chkIsDisabled.setText("無効"); // RESOURCE + // chkIsRepresentation = new Button(cmpChecks, SWT.CHECK); // chkIsRepresentation.setText("代表"); // RESOURCE @@ -622,7 +630,8 @@ cmbDataType.setText(StringUtils.EMPTY); chkIsPK.setSelection(false); chkIsNotNull.setSelection(false); - // chkIsRepresentation.setSelection(false); + chkIsDisabled.setSelection(false); +// chkIsRepresentation.setSelection(false); txtDefaultValue.setText(StringUtils.EMPTY); txtDescription.setText(StringUtils.EMPTY); @@ -633,7 +642,8 @@ cmbDataType.setEnabled(false); chkIsPK.setEnabled(false); chkIsNotNull.setEnabled(false); - // chkIsRepresentation.setEnabled(false); + chkIsDisabled.setEnabled(false); +// chkIsRepresentation.setEnabled(false); txtDefaultValue.setEnabled(false); txtDescription.setEnabled(false); @@ -655,6 +665,7 @@ txtDescription.setEnabled(true); chkIsPK.setEnabled(true); chkIsNotNull.setEnabled(true); + chkIsDisabled.setEnabled(true); // chkIsRepresentation.setEnabled(true); DataType dataType = columnModel.getDataType(); @@ -708,6 +719,13 @@ chkIsPK.setSelection(ColumnUtil.isPartOfPrimaryKeyColumns(columnModel)); + if (columnModel.hasAdapter(Disablable.class) + && columnModel.getAdapter(Disablable.class).isDisabled() == Boolean.TRUE) { + chkIsDisabled.setSelection(true); + } else { + chkIsDisabled.setSelection(false); + } + // chkIsTypical.setSelection(column.getConstraint(DefinitionModel.CONSTRAINT_TYPICAL)); } @@ -873,11 +891,7 @@ // ignore } if (chkIsPK.getSelection() == false && primaryKey != null) { - try { - jiemamyFacade.removeKeyColumn(primaryKey, columnModel); - } catch (IllegalArgumentException e) { - // ignore - } + jiemamyFacade.removeKeyColumn(primaryKey, columnModel); } else { if (primaryKey == null) { primaryKey = factory.newModel(PrimaryKey.class); @@ -901,6 +915,15 @@ jiemamyFacade.changeModelProperty(checkConstraint, CheckConstraintProperty.expression, expression); } + if (chkIsDisabled.getSelection() == false && columnModel.hasAdapter(Disablable.class)) { + columnModel.unregisterAdapter(Disablable.class); + } else { + if (columnModel.hasAdapter(Disablable.class) == false) { + columnModel.registerAdapter(factory.newAdapter(Disablable.class)); + } + columnModel.getAdapter(Disablable.class).setDisabled(true); + } + // RepresentationAdapter representationAdapter = tableModel.getAdapter(RepresentationAdapter.class); // if (chkIsRepresentation.getSelection()) { // representationAdapter.setRepresentation(true); Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/view/ViewEditDialog.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/view/ViewEditDialog.java 2009-03-23 05:04:57 UTC (rev 2981) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/view/ViewEditDialog.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -36,6 +36,7 @@ import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.Text; +import org.jiemamy.JiemamyFactory; import org.jiemamy.JiemamyProperty.EntityProperty; import org.jiemamy.JiemamyProperty.ViewProperty; import org.jiemamy.eclipse.Images; @@ -47,6 +48,7 @@ import org.jiemamy.facade.JiemamyViewFacade; import org.jiemamy.model.entity.ViewModel; import org.jiemamy.model.node.NodeAdapter; +import org.jiemamy.utils.Disablable; import org.jiemamy.utils.model.JiemamyPropertyUtil; /** @@ -113,7 +115,7 @@ getShell().setText(Messages.Dialog_Title); Composite composite = (Composite) super.createDialogArea(parent); - composite.setLayout(new GridLayout(6, false)); + composite.setLayout(new GridLayout(7, false)); // ---- A-1. ビュー名 Label label = new Label(composite, SWT.NULL); @@ -164,6 +166,24 @@ } }); + final Button btnDisable = new Button(composite, SWT.CHECK); + btnDisable.setText("無効"); // RESOURCE + btnDisable.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent evt) { + if (viewModel.hasAdapter(Disablable.class) == false) { + JiemamyFactory factory = viewModel.getJiemamy().getFactory(); + viewModel.registerAdapter(factory.newAdapter(Disablable.class)); + } + viewModel.getAdapter(Disablable.class).setDisabled(btnDisable.getSelection()); + } + + }); + if (viewModel.hasAdapter(Disablable.class) && viewModel.getAdapter(Disablable.class).isDisabled()) { + btnDisable.setSelection(true); + } + // ---- A-4. ラベル label = new Label(composite, SWT.NULL); label.setText(Messages.Message); @@ -174,7 +194,7 @@ // ---- B. タブ TabFolder tabFolder = new TabFolder(composite, SWT.NONE); gd = new GridData(GridData.FILL_BOTH); - gd.horizontalSpan = 6; + gd.horizontalSpan = 7; tabFolder.setLayoutData(gd); // ---- B-1. Definition Modified: hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/utils/LabelStringUtil.java =================================================================== --- hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/utils/LabelStringUtil.java 2009-03-23 05:04:57 UTC (rev 2981) +++ hestia/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/utils/LabelStringUtil.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -45,7 +45,7 @@ * @author daisuke */ public class LabelStringUtil { - + /** * DataTypeに対する表示用文字列を取得する。 * @@ -74,7 +74,7 @@ return DataTypeUtil.toBuiltinDataType(dataType, resolver).getTypeName(); } } - + /** * JiemamyElementに対する表示用文字列を取得する。 * @@ -108,30 +108,38 @@ ForeignKey foreignKey = (ForeignKey) targetElement; ReferenceResolver resolver = rootModel.getJiemamy().getReferenceResolver(); StringBuilder sb = new StringBuilder(); - + if (foreignKey.getName() != null) { sb.append(foreignKey.getName()).append("\n"); } - - int size = foreignKey.getReferenceColumns().size(); + + int size = Math.max(foreignKey.getReferenceColumns().size(), foreignKey.getKeyColumns().size()); for (int i = 0; i < size; i++) { if (i != 0) { sb.append("\n"); } - ColumnRef keyColumnRef = foreignKey.getKeyColumns().get(i); - ColumnRef referenceColumnRef = foreignKey.getReferenceColumns().get(i); - ColumnModel keyColumn = resolver.resolve(keyColumnRef); - ColumnModel referenceColumn = resolver.resolve(referenceColumnRef); - sb.append(keyColumn.getName()); + if (foreignKey.getKeyColumns().size() > i) { + ColumnRef keyColumnRef = foreignKey.getKeyColumns().get(i); + ColumnModel keyColumn = resolver.resolve(keyColumnRef); + sb.append(keyColumn.getName()); + } else { + sb.append("UNKNOWN"); + } sb.append(" -> "); - sb.append(referenceColumn.getName()); + if (foreignKey.getReferenceColumns().size() > i) { + ColumnRef referenceColumnRef = foreignKey.getReferenceColumns().get(i); + ColumnModel referenceColumn = resolver.resolve(referenceColumnRef); + sb.append(referenceColumn.getName()); + } else { + sb.append("UNKNOWN"); + } } - + return sb.toString(); } return "unknown label: " + targetElement.getClass().getName(); } - + private LabelStringUtil() { } } 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-23 05:04:57 UTC (rev 2981) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/Jiemamy.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -246,10 +246,11 @@ } /** - * TODO for daisuke + * 新しいファサードインスタンスを生成し、取得する。 * - * @param <T> - * @return + * @param <T> 取得するファサードの型 + * @param clazz 取得するファサードの型 + * @return 新しいファサード * @since 0.2 */ public <T extends JiemamyFacade>T newFacade(Class<T> clazz) { 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-23 05:04:57 UTC (rev 2981) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/JiemamyFactory.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -143,11 +143,11 @@ <T extends DataType>T newDataType(DataTypeMold<T> mold); /** - * TODO for daisuke + * 新しいファサードのインスタンスを生成し、取得する。 * - * @param <T> - * @param clazz - * @return + * @param <T> 取得するファサードの型 + * @param clazz 取得するファサードの型 + * @return 新しいファサード * @since 0.2 */ <T extends JiemamyFacade>T newFacade(Class<T> clazz); Modified: zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/facade/JiemamyFacade.java =================================================================== --- zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/facade/JiemamyFacade.java 2009-03-23 05:04:57 UTC (rev 2981) +++ zeus/trunk/jiemamy-spec-core/src/main/java/org/jiemamy/facade/JiemamyFacade.java 2009-03-23 10:14:20 UTC (rev 2982) @@ -243,6 +243,8 @@ /** * {@link KeyConstraint}のキーカラム要素からカラムを削除する。 * + * <p>削除の結果、キーカラムの数が0になった場合、キー制約自体を所属テーブルから削除する。</p> + * * @param keyConstraint 対象のキー制約 * @param columnModel 削除するカラム * @since 0.2