-#Tue Oct 14 19:58:31 JST 2008\r
+#Wed Oct 15 11:27:51 JST 2008\r
eclipse.preferences.version=1\r
org.eclipse.jdt.core.codeComplete.argumentPrefixes=\r
org.eclipse.jdt.core.codeComplete.argumentSuffixes=\r
org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=\r
org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=\r
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\r
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5\r
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve\r
-org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.5\r
org.eclipse.jdt.core.compiler.debug.lineNumber=generate\r
org.eclipse.jdt.core.compiler.debug.localVariable=generate\r
org.eclipse.jdt.core.compiler.debug.sourceFile=generate\r
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
-org.eclipse.jdt.core.compiler.source=1.6\r
+org.eclipse.jdt.core.compiler.source=1.5\r
-#Tue Oct 14 19:33:44 JST 2008\r
+#Wed Oct 15 11:56:39 JST 2008\r
eclipse.preferences.version=1\r
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true\r
+formatter_settings_version=11\r
org.eclipse.jdt.ui.exception.name=e\r
org.eclipse.jdt.ui.gettersetter.use.is=true\r
org.eclipse.jdt.ui.keywordthis=false\r
org.eclipse.jdt.ui.overrideannotation=true\r
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>\r
+sp_cleanup.add_default_serial_version_id=true\r
+sp_cleanup.add_generated_serial_version_id=false\r
+sp_cleanup.add_missing_annotations=true\r
+sp_cleanup.add_missing_deprecated_annotations=true\r
+sp_cleanup.add_missing_methods=false\r
+sp_cleanup.add_missing_nls_tags=false\r
+sp_cleanup.add_missing_override_annotations=true\r
+sp_cleanup.add_serial_version_id=false\r
+sp_cleanup.always_use_blocks=true\r
+sp_cleanup.always_use_parentheses_in_expressions=false\r
+sp_cleanup.always_use_this_for_non_static_field_access=false\r
+sp_cleanup.always_use_this_for_non_static_method_access=false\r
+sp_cleanup.convert_to_enhanced_for_loop=false\r
+sp_cleanup.correct_indentation=false\r
+sp_cleanup.format_source_code=true\r
+sp_cleanup.format_source_code_changes_only=false\r
+sp_cleanup.make_local_variable_final=false\r
+sp_cleanup.make_parameters_final=false\r
+sp_cleanup.make_private_fields_final=true\r
+sp_cleanup.make_type_abstract_if_missing_method=false\r
+sp_cleanup.make_variable_declarations_final=true\r
+sp_cleanup.never_use_blocks=false\r
+sp_cleanup.never_use_parentheses_in_expressions=true\r
+sp_cleanup.on_save_use_additional_actions=false\r
+sp_cleanup.organize_imports=true\r
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false\r
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true\r
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true\r
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false\r
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false\r
+sp_cleanup.remove_private_constructors=true\r
+sp_cleanup.remove_trailing_whitespaces=false\r
+sp_cleanup.remove_trailing_whitespaces_all=true\r
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false\r
+sp_cleanup.remove_unnecessary_casts=true\r
+sp_cleanup.remove_unnecessary_nls_tags=false\r
+sp_cleanup.remove_unused_imports=false\r
+sp_cleanup.remove_unused_local_variables=false\r
+sp_cleanup.remove_unused_private_fields=true\r
+sp_cleanup.remove_unused_private_members=false\r
+sp_cleanup.remove_unused_private_methods=true\r
+sp_cleanup.remove_unused_private_types=true\r
+sp_cleanup.sort_members=false\r
+sp_cleanup.sort_members_all=false\r
+sp_cleanup.use_blocks=false\r
+sp_cleanup.use_blocks_only_for_return_and_throw=false\r
+sp_cleanup.use_parentheses_in_expressions=false\r
+sp_cleanup.use_this_for_non_static_field_access=false\r
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true\r
+sp_cleanup.use_this_for_non_static_method_access=false\r
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true\r
<?xml version="1.0" encoding="UTF-8"?>\r
<project name="ea2ddl-comment" default="gen-comment" basedir=".">\r
\r
- <property name="classpathdir" value="target/classes"/>
+ <property name="classpathdir" value="target/classes" />\r
\r
- <path id="classpath">\r
- <pathelement location="${classpathdir}"/>\r
+ <path id="lib.path">\r
+ <pathelement path="${classpathdir}"/>\r
<fileset dir="target/dependency">\r
- <include name="**/*.jar"/>\r
+ <include name="**/*.jar" />\r
+ <exclude name="**/*.zip"/>\r
</fileset>\r
</path>\r
\r
- <taskdef resource="ea2ddl-comment-task.properties" classpathref="classpath"/>\r
+ <typedef resource="ea2ddl-comment-task.properties"\r
+ classpathref="lib.path" loaderref="parentFirst" />\r
\r
<target name="gen-comment">\r
<gen-comment\r
- classpathref="classpath"\r
- outputDirectory="hoge">\r
+ outputDirectory="/project/ea2ddl/ea2ddl-gen/dbflute/playsql">\r
</gen-comment>\r
</target>\r
</project>\r
package jp.sourceforge.ea2ddl.comment.command.impl;\r
\r
+import java.io.File;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.OutputStreamWriter;\r
+import java.io.Writer;\r
+import java.util.List;\r
+\r
import jp.sourceforge.ea2ddl.comment.command.Command;\r
+import jp.sourceforge.ea2ddl.common.config.Config;\r
+import jp.sourceforge.ea2ddl.dao.exbhv.TAttributeBhv;\r
+import jp.sourceforge.ea2ddl.dao.exbhv.TObjectBhv;\r
+import jp.sourceforge.ea2ddl.dao.exbhv.TPackageBhv;\r
+import jp.sourceforge.ea2ddl.dao.exentity.TAttribute;\r
+import jp.sourceforge.ea2ddl.dao.exentity.TObject;\r
+import jp.sourceforge.ea2ddl.dao.exentity.TPackage;\r
\r
-public class GenerateCommentCommand implements Command {\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.seasar.framework.container.annotation.tiger.Binding;\r
\r
+public class GenerateCommentCommand implements Command {\r
+ private static final Log _log = LogFactory.getLog(GenerateCommentCommand.class);\r
private String _outputDirectory;\r
- \r
+\r
+ private Config _config;\r
+ private TPackageBhv _packageBhv;\r
+ private TObjectBhv _objectBhv;\r
+ private TAttributeBhv _attributeBhv;\r
+\r
+ @Binding\r
+ public void setConfig(Config config) {\r
+ _config = config;\r
+ }\r
+\r
+ public void setTPackageBhv(TPackageBhv packageBhv) {\r
+ _packageBhv = packageBhv;\r
+ }\r
+\r
+ public void setTObjectBhv(TObjectBhv objectBhv) {\r
+ _objectBhv = objectBhv;\r
+ }\r
+\r
+ public void setTAttributeBhv(TAttributeBhv attributeBhv) {\r
+ _attributeBhv = attributeBhv;\r
+ }\r
+\r
public void setOutputDirectory(String outputDirectory) {\r
_outputDirectory = outputDirectory;\r
}\r
\r
- @Override\r
public void execute() {\r
- System.out.println(_outputDirectory);\r
+ Writer writer = null;\r
+ try {\r
+ writer = createWriter();\r
+ generateTableComment(writer);\r
+ } catch (IOException e) {\r
+ _log.error("Failed to write", e);\r
+ } finally {\r
+ if (writer != null) {\r
+ try {\r
+ writer.close();\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ protected Writer createWriter() throws IOException {\r
+ final File dir = new File(_outputDirectory);\r
+ _log.info(dir.getAbsolutePath());\r
+ if (!dir.exists()) {\r
+ dir.mkdirs();\r
+ }\r
+ final File file = new File(dir, "replace-schema-90-comment.sql");\r
+ return new OutputStreamWriter(new FileOutputStream(file));\r
+ }\r
+\r
+ protected void generateTableComment(Writer writer) throws IOException {\r
+ final TPackage pkg = _packageBhv.selectPackage(_config.getProperty("er.package.path"));\r
+ final List<TObject> tables = _objectBhv.selectListByStereotype(pkg, "table");\r
+ for (TObject table : tables) {\r
+ writeTableCommentLine(table, writer);\r
+ generateColumnComment(table, writer);\r
+ }\r
}\r
\r
+ protected void writeTableCommentLine(TObject table, Writer writer) throws IOException {\r
+ if (StringUtils.isBlank(table.getAlias()) && StringUtils.isBlank(table.getNote())) {\r
+ return;\r
+ }\r
+ StringBuffer b = new StringBuffer();\r
+ b.append("COMMENT ON TABLE ").append(table.getName()).append(" IS '");\r
+ if (StringUtils.isNotBlank(table.getAlias())) {\r
+ b.append(table.getAlias()).append(_config.getProperty("token.char", ".")).append("\r\n");\r
+ }\r
+ if (StringUtils.isNotBlank(table.getNote())) {\r
+ b.append(table.getNote());\r
+ }\r
+ b.append("';\r\n");\r
+ writer.write(b.toString());\r
+ }\r
+\r
+ protected void generateColumnComment(TObject table, Writer writer) throws IOException {\r
+ final List<TAttribute> columns = _attributeBhv.selectColumns(table);\r
+ for (TAttribute column : columns) {\r
+ writeColumnCommentLine(table, column, writer);\r
+ }\r
+ }\r
+\r
+ protected void writeColumnCommentLine(TObject table, TAttribute column, Writer writer) throws IOException {\r
+ if (StringUtils.isBlank(column.getStyle()) && StringUtils.isBlank(column.getNotes())) {\r
+ return;\r
+ }\r
+ final StringBuffer b = new StringBuffer();\r
+ b.append("COMMENT ON COLUMN ").append(table.getName()).append(".").append(column.getName()).append(" IS '");\r
+ if (StringUtils.isNotBlank(column.getStyle())) {\r
+ b.append(column.getStyle()).append(_config.getProperty("token.char", ".")).append("\r\n");\r
+ }\r
+ if (StringUtils.isNotBlank(column.getNotes())) {\r
+ b.append(column.getNotes());\r
+ }\r
+ b.append("';\r\n");\r
+ writer.write(b.toString());\r
+ }\r
}\r
import org.apache.tools.ant.BuildException;\r
import org.apache.tools.ant.Task;\r
import org.seasar.framework.container.S2Container;\r
+import org.seasar.framework.container.factory.S2ContainerFactory;\r
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;\r
\r
/**\r
* @author taktos\r
- *\r
+ * \r
*/\r
public abstract class AbstractTask<T extends Command> extends Task {\r
\r
protected String configPath = "ea2ddl.dicon";\r
+ private S2Container container;\r
+\r
+ protected synchronized S2Container getContainer() {\r
+ if (container == null) {\r
+ S2ContainerFactory.create(configPath);\r
+ Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());\r
+ SingletonS2ContainerFactory.setConfigPath(configPath);\r
+ SingletonS2ContainerFactory.init();\r
+ container = SingletonS2ContainerFactory.getContainer();\r
+ }\r
+ return container;\r
+ }\r
\r
@Override\r
public void init() throws BuildException {\r
- SingletonS2ContainerFactory.setConfigPath(configPath);\r
- SingletonS2ContainerFactory.init();\r
+ System.out.println("INIT");\r
+ System.out.println(Thread.currentThread().getId());\r
+ System.out.println(Thread.currentThread().getContextClassLoader());\r
+ System.out.println(Thread.currentThread().getContextClassLoader().getResource("ea2ddl.dicon"));\r
}\r
\r
@Override\r
public void execute() throws BuildException {\r
+ System.out.println("EXECUTE");\r
+ System.out.println(Thread.currentThread().getId());\r
+ System.out.println(Thread.currentThread().getContextClassLoader());\r
getCommand().execute();\r
+\r
}\r
\r
protected abstract Class<T> getCommandClass();\r
\r
@SuppressWarnings("unchecked")\r
protected T getCommand() {\r
- return (T) SingletonS2ContainerFactory.getContainer().getComponent(getCommandClass());\r
+ return (T) getContainer().getComponent(getCommandClass());\r
}\r
- \r
+\r
}\r
\r
import jp.sourceforge.ea2ddl.comment.command.impl.GenerateCommentCommand;\r
\r
-\r
/**\r
* @author taktos\r
- *\r
+ * \r
*/\r
public class GenerateCommentTask extends AbstractTask<GenerateCommentCommand> {\r
- \r
+\r
@Override\r
protected Class<GenerateCommentCommand> getCommandClass() {\r
return GenerateCommentCommand.class;\r
}\r
\r
public void setOutputDirectory(String outputDirectory) {\r
+ System.out.println("SETTER");\r
+ System.out.println(Thread.currentThread().getId());\r
+ System.out.println(Thread.currentThread().getContextClassLoader());\r
getCommand().setOutputDirectory(outputDirectory);\r
}\r
}\r
<include path="app-config.dicon" />\r
<include path="aop.dicon" />\r
<include path="dbflute.dicon" />\r
- \r
+\r
<component class="jp.sourceforge.ea2ddl.comment.command.impl.GenerateCommentCommand">\r
</component>\r
</components>\r
-root.package.name=\u30d3\u30e5\u30fc
\ No newline at end of file
+root.package.name=\u30d3\u30e5\u30fc\r
+er.package.path=\u30af\u30e9\u30b9\u30d3\u30e5\u30fc/ER\u56f3/SIMPLEDB
\ No newline at end of file
-log4j.rootLogger=INFO,STDOUT\r
+log4j.rootLogger=DEBUG,STDOUT\r
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender\r
log4j.appender.STDOUT.ImmediateFlush=true\r
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout\r
package jp.sourceforge.ea2ddl.comment.task;\r
\r
-import static org.junit.Assert.*;\r
+import static org.junit.Assert.assertNotNull;\r
import jp.sourceforge.ea2ddl.comment.command.impl.GenerateCommentCommand;\r
\r
import org.junit.Test;\r
import org.seasar.framework.unit.Seasar2;\r
import org.seasar.framework.unit.annotation.RootDicon;\r
\r
-\r
+@RunWith(Seasar2.class)\r
+@RootDicon("app.dicon")\r
public class AbstractTaskTest {\r
\r
+ GenerateCommentCommand command;\r
+\r
@Test\r
public void testInit() {\r
- SampleTask task = new SampleTask();\r
- task.init();\r
- GenerateCommentCommand command = task.getCommand();\r
+ command.setOutputDirectory("/project/ea2ddl/ea2ddl-gen/dbflute/playsql");\r
assertNotNull(command);\r
command.execute();\r
}\r
-\r
- class SampleTask extends AbstractTask<GenerateCommentCommand> {\r
- @Override\r
- protected Class<GenerateCommentCommand> getCommandClass() {\r
- return GenerateCommentCommand.class;\r
- }\r
- }\r
}\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"\r
+ "http://www.seasar.org/dtd/components24.dtd">\r
+<components namespace="s2junit4">\r
+ \r
+ <component name="context" class="org.seasar.framework.unit.impl.InternalTestContextImpl"/>\r
+\r
+ <component class="org.seasar.framework.unit.impl.DataAccessorImpl"/>\r
+\r
+ <component class="org.seasar.framework.unit.impl.ConfigFileIncluderImpl">\r
+ <initMethod name="addConfigFile">\r
+ <arg>"j2ee.dicon"</arg>\r
+ </initMethod>\r
+ <initMethod name="addConfigFile">\r
+ <arg>context.testClassShortName + ".dicon"</arg>\r
+ </initMethod>\r
+ </component>\r
+ \r
+ <component class="org.seasar.framework.unit.impl.TestDataPreparerImpl">\r
+ <initMethod name="addTestDataXlsPath">\r
+ <arg>context.testClassShortName + "_" + context.testMethodName + ".xls"</arg>\r
+ </initMethod>\r
+ <initMethod name="addTestDataXlsPath">\r
+ <arg>context.testClassShortName + ".xls"</arg>\r
+ </initMethod>\r
+ </component>\r
+\r
+ <component class="org.seasar.framework.unit.impl.ExpectedDataReaderImpl">\r
+ <initMethod name="addExpectedDataXlsPath">\r
+ <arg>context.testClassShortName + "_" + context.testMethodName + "_Expected" + ".xls"</arg>\r
+ </initMethod>\r
+ </component>\r
+</components>
\ No newline at end of file