OSDN Git Service

import
authordobashi <dobashi@lavans.jp>
Tue, 13 Sep 2011 08:27:56 +0000 (17:27 +0900)
committerdobashi <dobashi@lavans.jp>
Tue, 13 Sep 2011 08:27:56 +0000 (17:27 +0900)
92 files changed:
lacoder/.checkstyle [new file with mode: 0644]
lacoder/.classpath [new file with mode: 0644]
lacoder/.fbprefs [new file with mode: 0644]
lacoder/.metadata/conf/struts-config.pageflow [new file with mode: 0644]
lacoder/.project [new file with mode: 0644]
lacoder/.settings/.jsdtscope [new file with mode: 0644]
lacoder/.settings/de.loskutov.anyedit.AnyEditTools.prefs [new file with mode: 0644]
lacoder/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
lacoder/.settings/org.eclipse.wst.common.component [new file with mode: 0644]
lacoder/.settings/org.eclipse.wst.common.project.facet.core.xml [new file with mode: 0644]
lacoder/.settings/org.eclipse.wst.jsdt.ui.superType.container [new file with mode: 0644]
lacoder/.settings/org.eclipse.wst.jsdt.ui.superType.name [new file with mode: 0644]
lacoder/.settings/org.eclipse.wst.validation.prefs [new file with mode: 0644]
lacoder/.settings/org.eclipse.wst.ws.service.policy.prefs [new file with mode: 0644]
lacoder/WebContent/META-INF/MANIFEST.MF [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/antlr-2.7.2.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/bsf-2.3.0.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-beanutils-1.7.0.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-chain-1.1.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-digester-1.6.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-fileupload-1.1.1.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-io-1.1.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-lang-2.4.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-logging-1.0.4.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/commons-validator-1.3.0.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/jstl-1.0.2.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/log4j-1.2.14.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/oro-2.0.8.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/standard-1.0.2.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-core-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-el-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-extras-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-faces-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-mailreader-dao-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-scripting-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-taglib-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/lib/struts-tiles-1.3.5.jar [new file with mode: 0644]
lacoder/WebContent/WEB-INF/web.xml [new file with mode: 0644]
lacoder/WebContent/css/lacoder.css [new file with mode: 0644]
lacoder/WebContent/index.jsp [new file with mode: 0644]
lacoder/conf/log4j.properties [new file with mode: 0644]
lacoder/conf/struts-config.xml [new file with mode: 0644]
lacoder/conf/target.xml [new file with mode: 0644]
lacoder/conf/target.xml.sample [new file with mode: 0644]
lacoder/jsp/common/common.jsp [new file with mode: 0644]
lacoder/jsp/common/error.jsp [new file with mode: 0644]
lacoder/jsp/domain/Dao.jsp [new file with mode: 0644]
lacoder/jsp/domain/DaoBaseXml.jsp [new file with mode: 0644]
lacoder/jsp/domain/DaoXml.jsp [new file with mode: 0644]
lacoder/jsp/domain/Entity.jsp [new file with mode: 0644]
lacoder/jsp/domain/EntityBak.jsp [new file with mode: 0644]
lacoder/jsp/domain/EntityBase.jsp [new file with mode: 0644]
lacoder/jsp/domain/EntityManager.jsp [new file with mode: 0644]
lacoder/jsp/domain/Enums.jsp [new file with mode: 0644]
lacoder/jsp/domain/message.jsp [new file with mode: 0644]
lacoder/jsp/domain/sql.jsp [new file with mode: 0644]
lacoder/jsp/domain/sqlCopy.jsp [new file with mode: 0644]
lacoder/jsp/main/filemake.jsp [new file with mode: 0644]
lacoder/jsp/main/main.jsp [new file with mode: 0644]
lacoder/jsp/main/selectTarget.jsp [new file with mode: 0644]
lacoder/jsp/presentation/Action.jsp [new file with mode: 0644]
lacoder/jsp/presentation/jsp.jsp [new file with mode: 0644]
lacoder/jsp/service/Service.jsp [new file with mode: 0644]
lacoder/sample/templates/createConfirm.tmpl [new file with mode: 0644]
lacoder/sample/templates/createInput.tmpl [new file with mode: 0644]
lacoder/sample/templates/createResult.tmpl [new file with mode: 0644]
lacoder/sample/templates/list.tmpl [new file with mode: 0644]
lacoder/sample/templates/read.tmpl [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/action/FileMakeAction.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/action/MainAction.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/action/ModelAction.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/db/H2Dialect.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/db/OracleDialect.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/db/PostgresDialect.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/db/TypeManager.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/main/FileMaker.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/main/JavaType.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/main/Target.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/main/XMLReader.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/model/Attribute.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/model/Entity.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/model/EnumClass.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/model/EnumMember.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/model/Package.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/model/Role.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/model/Service.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/writer/ActionWriter.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/writer/DaoWriter.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/writer/DaoXmlWriter.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/writer/JspTemplateEngine.java [new file with mode: 0644]
lacoder/src/com/lavans/lacoder/writer/ModelWriter.java [new file with mode: 0644]
luz2/conf/.gitignore [new file with mode: 0644]

diff --git a/lacoder/.checkstyle b/lacoder/.checkstyle
new file mode 100644 (file)
index 0000000..a7dfaa2
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<fileset-config file-format-version="1.2.0" simple-config="true">\r
+    <fileset name="すべて" enabled="true" check-config-name="Sun Checks" local="false">\r
+        <file-match-pattern match-pattern="." include-pattern="true"/>\r
+    </fileset>\r
+</fileset-config>\r
diff --git a/lacoder/.classpath b/lacoder/.classpath
new file mode 100644 (file)
index 0000000..98ce6ae
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="src" output="WebContent/WEB-INF/jsp" path="jsp"/>
+       <classpathentry kind="src" path="conf"/>
+       <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0"/>
+       <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
+       <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0">
+               <attributes>
+                       <attribute name="owner.project.facets" value="jst.web"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java-1.6.0-openjdk-1.6.0.0.x86_64">
+               <attributes>
+                       <attribute name="owner.project.facets" value="java"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="output" path="build/classes"/>
+</classpath>
diff --git a/lacoder/.fbprefs b/lacoder/.fbprefs
new file mode 100644 (file)
index 0000000..e79e1b5
--- /dev/null
@@ -0,0 +1,123 @@
+#FindBugs User Preferences\r
+#Thu Dec 04 18:24:20 JST 2008\r
+detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true\r
+detectorBadAppletConstructor=BadAppletConstructor|false\r
+detectorBadResultSetAccess=BadResultSetAccess|true\r
+detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true\r
+detectorBadUseOfReturnValue=BadUseOfReturnValue|true\r
+detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true\r
+detectorBooleanReturnNull=BooleanReturnNull|true\r
+detectorCallToUnsupportedMethod=CallToUnsupportedMethod|true\r
+detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true\r
+detectorCheckTypeQualifiers=CheckTypeQualifiers|true\r
+detectorCloneIdiom=CloneIdiom|true\r
+detectorComparatorIdiom=ComparatorIdiom|true\r
+detectorConfusedInheritance=ConfusedInheritance|true\r
+detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true\r
+detectorCrossSiteScripting=CrossSiteScripting|true\r
+detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true\r
+detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true\r
+detectorDontUseEnum=DontUseEnum|true\r
+detectorDroppedException=DroppedException|true\r
+detectorDumbMethodInvocations=DumbMethodInvocations|true\r
+detectorDumbMethods=DumbMethods|true\r
+detectorDuplicateBranches=DuplicateBranches|true\r
+detectorEmptyZipFileEntry=EmptyZipFileEntry|true\r
+detectorFinalizerNullsFields=FinalizerNullsFields|true\r
+detectorFindBadCast2=FindBadCast2|true\r
+detectorFindBadForLoop=FindBadForLoop|true\r
+detectorFindCircularDependencies=FindCircularDependencies|false\r
+detectorFindDeadLocalStores=FindDeadLocalStores|true\r
+detectorFindDoubleCheck=FindDoubleCheck|true\r
+detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true\r
+detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true\r
+detectorFindFinalizeInvocations=FindFinalizeInvocations|true\r
+detectorFindFloatEquality=FindFloatEquality|true\r
+detectorFindHEmismatch=FindHEmismatch|true\r
+detectorFindInconsistentSync2=FindInconsistentSync2|true\r
+detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true\r
+detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true\r
+detectorFindMaskedFields=FindMaskedFields|true\r
+detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true\r
+detectorFindNakedNotify=FindNakedNotify|true\r
+detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true\r
+detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true\r
+detectorFindNonShortCircuit=FindNonShortCircuit|true\r
+detectorFindNullDeref=FindNullDeref|true\r
+detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true\r
+detectorFindOpenStream=FindOpenStream|true\r
+detectorFindPuzzlers=FindPuzzlers|true\r
+detectorFindRefComparison=FindRefComparison|true\r
+detectorFindReturnRef=FindReturnRef|true\r
+detectorFindRunInvocations=FindRunInvocations|true\r
+detectorFindSelfComparison=FindSelfComparison|true\r
+detectorFindSelfComparison2=FindSelfComparison2|true\r
+detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true\r
+detectorFindSpinLoop=FindSpinLoop|true\r
+detectorFindSqlInjection=FindSqlInjection|true\r
+detectorFindTwoLockWait=FindTwoLockWait|true\r
+detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true\r
+detectorFindUnconditionalWait=FindUnconditionalWait|true\r
+detectorFindUninitializedGet=FindUninitializedGet|true\r
+detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true\r
+detectorFindUnreleasedLock=FindUnreleasedLock|true\r
+detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true\r
+detectorFindUnsyncGet=FindUnsyncGet|true\r
+detectorFindUselessControlFlow=FindUselessControlFlow|true\r
+detectorFormatStringChecker=FormatStringChecker|true\r
+detectorHugeSharedStringConstants=HugeSharedStringConstants|true\r
+detectorIDivResultCastToDouble=IDivResultCastToDouble|true\r
+detectorIncompatMask=IncompatMask|true\r
+detectorInconsistentAnnotations=InconsistentAnnotations|true\r
+detectorInefficientMemberAccess=InefficientMemberAccess|false\r
+detectorInefficientToArray=InefficientToArray|true\r
+detectorInfiniteLoop=InfiniteLoop|true\r
+detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true\r
+detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false\r
+detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true\r
+detectorInitializationChain=InitializationChain|true\r
+detectorInstantiateStaticClass=InstantiateStaticClass|true\r
+detectorInvalidJUnitTest=InvalidJUnitTest|true\r
+detectorIteratorIdioms=IteratorIdioms|true\r
+detectorLazyInit=LazyInit|true\r
+detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true\r
+detectorMethodReturnCheck=MethodReturnCheck|true\r
+detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true\r
+detectorMutableLock=MutableLock|true\r
+detectorMutableStaticFields=MutableStaticFields|true\r
+detectorNaming=Naming|true\r
+detectorNumberConstructor=NumberConstructor|true\r
+detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true\r
+detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true\r
+detectorPublicSemaphores=PublicSemaphores|false\r
+detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true\r
+detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true\r
+detectorRedundantInterfaces=RedundantInterfaces|true\r
+detectorRepeatedConditionals=RepeatedConditionals|true\r
+detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true\r
+detectorSerializableIdiom=SerializableIdiom|true\r
+detectorStartInConstructor=StartInConstructor|true\r
+detectorStaticCalendarDetector=StaticCalendarDetector|true\r
+detectorStringConcatenation=StringConcatenation|true\r
+detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true\r
+detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true\r
+detectorSwitchFallthrough=SwitchFallthrough|true\r
+detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true\r
+detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true\r
+detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true\r
+detectorURLProblems=URLProblems|true\r
+detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true\r
+detectorUnnecessaryMath=UnnecessaryMath|true\r
+detectorUnreadFields=UnreadFields|true\r
+detectorUseObjectEquals=UseObjectEquals|false\r
+detectorUselessSubclassMethod=UselessSubclassMethod|false\r
+detectorVarArgsProblems=VarArgsProblems|true\r
+detectorVolatileUsage=VolatileUsage|true\r
+detectorWaitInLoop=WaitInLoop|true\r
+detectorWrongMapIterator=WrongMapIterator|true\r
+detectorXMLFactoryBypass=XMLFactoryBypass|true\r
+detector_threshold=2\r
+effort=default\r
+filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false\r
+filter_settings_neg=|\r
+run_at_full_build=true\r
diff --git a/lacoder/.metadata/conf/struts-config.pageflow b/lacoder/.metadata/conf/struts-config.pageflow
new file mode 100644 (file)
index 0000000..0a7f135
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<pageflow:Pageflow xmlns:pageflow="http://www.sybase.com/suade/pageflow" id="pf12062643426081" configfile="/cline_lamen/conf/struts-config.xml"/>\r
diff --git a/lacoder/.project b/lacoder/.project
new file mode 100644 (file)
index 0000000..02c71b7
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>lacoder</name>\r
+       <comment></comment>\r
+       <projects>\r
+               <project>upfield</project>\r
+               <project>luz2</project>\r
+       </projects>\r
+       <buildSpec>\r
+               <buildCommand>\r
+                       <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.eclipse.jdt.core.javabuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.eclipse.wst.common.project.facet.core.builder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+               <buildCommand>\r
+                       <name>org.eclipse.wst.validation.validationbuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+       </buildSpec>\r
+       <natures>\r
+               <nature>org.eclipse.wst.common.project.facet.core.nature</nature>\r
+               <nature>org.eclipse.jdt.core.javanature</nature>\r
+               <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>\r
+               <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>\r
+               <nature>org.eclipse.wst.jsdt.core.jsNature</nature>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/lacoder/.settings/.jsdtscope b/lacoder/.settings/.jsdtscope
new file mode 100644 (file)
index 0000000..f40dd98
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+       <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>\r
+       <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">\r
+               <attributes>\r
+                       <attribute name="hide" value="true"/>\r
+               </attributes>\r
+       </classpathentry>\r
+       <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>\r
+       <classpathentry kind="output" path=""/>\r
+</classpath>\r
diff --git a/lacoder/.settings/de.loskutov.anyedit.AnyEditTools.prefs b/lacoder/.settings/de.loskutov.anyedit.AnyEditTools.prefs
new file mode 100644 (file)
index 0000000..f8418f6
--- /dev/null
@@ -0,0 +1,15 @@
+#Thu Dec 04 18:24:20 JST 2008\r
+activeContentFilterList=*.makefile,makefile,*.Makefile,Makefile,Makefile.*,*.mk,MANIFEST.MF\r
+convertActionOnSaave=AnyEdit.CnvrtTabToSpaces\r
+eclipse.preferences.version=1\r
+inActiveContentFilterList=\r
+javaTabWidthForJava=true\r
+org.eclipse.jdt.ui.editor.tab.width=2\r
+projectPropsEnabled=false\r
+removeTrailingSpaces=true\r
+replaceAllSpaces=false\r
+replaceAllTabs=false\r
+saveAndAddLine=false\r
+saveAndConvert=false\r
+saveAndTrim=true\r
+useModulo4Tabs=false\r
diff --git a/lacoder/.settings/org.eclipse.core.resources.prefs b/lacoder/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..daea497
--- /dev/null
@@ -0,0 +1,3 @@
+#Tue Jun 30 16:10:03 JST 2009\r
+eclipse.preferences.version=1\r
+encoding/<project>=UTF-8\r
diff --git a/lacoder/.settings/org.eclipse.wst.common.component b/lacoder/.settings/org.eclipse.wst.common.component
new file mode 100644 (file)
index 0000000..70ac000
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project-modules id="moduleCoreId" project-version="1.5.0">\r
+<wb-module deploy-name="lacoder">\r
+<wb-resource deploy-path="/" source-path="/WebContent"/>\r
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>\r
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/conf"/>\r
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/jsp"/>\r
+        <dependent-module archiveName="luz2.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/luz2/luz2">\r
+            <dependency-type>uses</dependency-type>\r
+        </dependent-module>\r
+<property name="java-output-path" value="build/classes"/>\r
+        <property name="context-root" value="lacoder"/>\r
+</wb-module>\r
+</project-modules>\r
diff --git a/lacoder/.settings/org.eclipse.wst.common.project.facet.core.xml b/lacoder/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644 (file)
index 0000000..80a7e38
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <runtime name="Apache Tomcat v7.0"/>
+  <fixed facet="jst.web"/>
+  <fixed facet="jst.java"/>
+  <installed facet="jst.web" version="2.4"/>
+  <installed facet="jst.java" version="6.0"/>
+</faceted-project>
diff --git a/lacoder/.settings/org.eclipse.wst.jsdt.ui.superType.container b/lacoder/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644 (file)
index 0000000..3bd5d0a
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/lacoder/.settings/org.eclipse.wst.jsdt.ui.superType.name b/lacoder/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644 (file)
index 0000000..05bd71b
--- /dev/null
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/lacoder/.settings/org.eclipse.wst.validation.prefs b/lacoder/.settings/org.eclipse.wst.validation.prefs
new file mode 100644 (file)
index 0000000..d65ce99
--- /dev/null
@@ -0,0 +1,9 @@
+#Thu Dec 04 18:24:20 JST 2008\r
+DELEGATES_PREFERENCE=delegateValidatorList\r
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;\r
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;\r
+USER_PREFERENCE=overrideGlobalPreferencesfalse\r
+eclipse.preferences.version=1\r
+override=false\r
+suspend=false\r
+vf.version=3\r
diff --git a/lacoder/.settings/org.eclipse.wst.ws.service.policy.prefs b/lacoder/.settings/org.eclipse.wst.ws.service.policy.prefs
new file mode 100644 (file)
index 0000000..3ef46bb
--- /dev/null
@@ -0,0 +1,3 @@
+#Thu Dec 04 18:17:16 JST 2008\r
+eclipse.preferences.version=1\r
+org.eclipse.wst.ws.service.policy.projectEnabled=false\r
diff --git a/lacoder/WebContent/META-INF/MANIFEST.MF b/lacoder/WebContent/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..5e94951
--- /dev/null
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0\r
+Class-Path: \r
+\r
diff --git a/lacoder/WebContent/WEB-INF/lib/antlr-2.7.2.jar b/lacoder/WebContent/WEB-INF/lib/antlr-2.7.2.jar
new file mode 100644 (file)
index 0000000..8850fc6
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/antlr-2.7.2.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/bsf-2.3.0.jar b/lacoder/WebContent/WEB-INF/lib/bsf-2.3.0.jar
new file mode 100644 (file)
index 0000000..caa4dea
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/bsf-2.3.0.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-beanutils-1.7.0.jar b/lacoder/WebContent/WEB-INF/lib/commons-beanutils-1.7.0.jar
new file mode 100644 (file)
index 0000000..b1b89c9
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-beanutils-1.7.0.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-chain-1.1.jar b/lacoder/WebContent/WEB-INF/lib/commons-chain-1.1.jar
new file mode 100644 (file)
index 0000000..60c027e
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-chain-1.1.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-digester-1.6.jar b/lacoder/WebContent/WEB-INF/lib/commons-digester-1.6.jar
new file mode 100644 (file)
index 0000000..9765493
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-digester-1.6.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-fileupload-1.1.1.jar b/lacoder/WebContent/WEB-INF/lib/commons-fileupload-1.1.1.jar
new file mode 100644 (file)
index 0000000..fc5763d
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-fileupload-1.1.1.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-io-1.1.jar b/lacoder/WebContent/WEB-INF/lib/commons-io-1.1.jar
new file mode 100644 (file)
index 0000000..624fc1a
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-io-1.1.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-lang-2.4.jar b/lacoder/WebContent/WEB-INF/lib/commons-lang-2.4.jar
new file mode 100644 (file)
index 0000000..532939e
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-lang-2.4.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-logging-1.0.4.jar b/lacoder/WebContent/WEB-INF/lib/commons-logging-1.0.4.jar
new file mode 100644 (file)
index 0000000..b73a80f
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-logging-1.0.4.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/commons-validator-1.3.0.jar b/lacoder/WebContent/WEB-INF/lib/commons-validator-1.3.0.jar
new file mode 100644 (file)
index 0000000..0e2492c
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/commons-validator-1.3.0.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/jstl-1.0.2.jar b/lacoder/WebContent/WEB-INF/lib/jstl-1.0.2.jar
new file mode 100644 (file)
index 0000000..f832589
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/jstl-1.0.2.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/log4j-1.2.14.jar b/lacoder/WebContent/WEB-INF/lib/log4j-1.2.14.jar
new file mode 100644 (file)
index 0000000..6251307
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/log4j-1.2.14.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/oro-2.0.8.jar b/lacoder/WebContent/WEB-INF/lib/oro-2.0.8.jar
new file mode 100644 (file)
index 0000000..23488d2
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/oro-2.0.8.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/standard-1.0.2.jar b/lacoder/WebContent/WEB-INF/lib/standard-1.0.2.jar
new file mode 100644 (file)
index 0000000..1fe3321
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/standard-1.0.2.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-core-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-core-1.3.5.jar
new file mode 100644 (file)
index 0000000..cfbef17
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-core-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-el-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-el-1.3.5.jar
new file mode 100644 (file)
index 0000000..bbda330
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-el-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-extras-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-extras-1.3.5.jar
new file mode 100644 (file)
index 0000000..c67a178
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-extras-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-faces-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-faces-1.3.5.jar
new file mode 100644 (file)
index 0000000..cc83f8c
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-faces-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-mailreader-dao-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-mailreader-dao-1.3.5.jar
new file mode 100644 (file)
index 0000000..2c1ed35
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-mailreader-dao-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-scripting-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-scripting-1.3.5.jar
new file mode 100644 (file)
index 0000000..3e21fd6
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-scripting-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-taglib-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-taglib-1.3.5.jar
new file mode 100644 (file)
index 0000000..9499626
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-taglib-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/lib/struts-tiles-1.3.5.jar b/lacoder/WebContent/WEB-INF/lib/struts-tiles-1.3.5.jar
new file mode 100644 (file)
index 0000000..5909628
Binary files /dev/null and b/lacoder/WebContent/WEB-INF/lib/struts-tiles-1.3.5.jar differ
diff --git a/lacoder/WebContent/WEB-INF/web.xml b/lacoder/WebContent/WEB-INF/web.xml
new file mode 100644 (file)
index 0000000..4550717
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="SHIFT_JIS"?>\r
+<!DOCTYPE web-app  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">\r
+<web-app>\r
+       <servlet>\r
+               <servlet-name>main</servlet-name>\r
+               <servlet-class>com.lavans.lacoder.main.MainController</servlet-class>\r
+       </servlet>\r
+       \r
+       <!-- Standard Action Servlet Configuration (with debugging) -->\r
+       <servlet>\r
+               <servlet-name>action</servlet-name>\r
+               <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>\r
+               <init-param>\r
+                       <param-name>config</param-name>\r
+                       <param-value>struts-config.xml</param-value>\r
+               </init-param>\r
+               <load-on-startup>1</load-on-startup>\r
+       </servlet>\r
+       <!-- Standard Action Servlet Mapping -->\r
+       <servlet-mapping>\r
+               <servlet-name>action</servlet-name>\r
+               <url-pattern>*.do</url-pattern>\r
+       </servlet-mapping>\r
+\r
+       <session-config>\r
+               <session-timeout> 1800 </session-timeout>\r
+       </session-config>\r
+       <!-- default\r
+   <servlet>\r
+        <servlet-name>default</servlet-name>\r
+        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>\r
+        <init-param>\r
+          <param-name>debug</param-name>\r
+          <param-value>0</param-value>\r
+        </init-param>\r
+        <init-param>\r
+          <param-name>listings</param-name>\r
+          <param-value>false</param-value>\r
+        </init-param>\r
+        <load-on-startup>1</load-on-startup>\r
+   </servlet>\r
+   -->\r
+</web-app>\r
diff --git a/lacoder/WebContent/css/lacoder.css b/lacoder/WebContent/css/lacoder.css
new file mode 100644 (file)
index 0000000..670b675
--- /dev/null
@@ -0,0 +1,48 @@
+body{\r
+       padding: 0px;\r
+    font-size:14px;\r
+       text-align: center;\r
+       background-color:#FFFFFF;\r
+       margin: 0px;\r
+}\r
+\r
+/* form\83^\83O\82É\82æ\82è\8f\9f\8eè\82É\89ü\8ds\82³\82ê\82é\82Ì\82ð\96h\82® */\r
+form {\r
+       margin-top: 0;\r
+       margin-bottom: 0;\r
+}\r
+\r
+.title{\r
+       background-color:#006666;\r
+       color:#FFFFFF;\r
+       white-space: nowrap;\r
+       border-collapse:collapse;\r
+       font-weight: bold;\r
+}\r
+\r
+\r
+.entity{\r
+       background-color:#003366;\r
+       color:#FFFFFF;\r
+       white-space: nowrap;\r
+       border-collapse:collapse;\r
+}\r
+\r
+.action{\r
+       background-color:#006699;\r
+       color:#FFFFFF;\r
+       white-space: nowrap;\r
+       border-collapse:collapse;\r
+}\r
+\r
+.jsp{\r
+       background-color:#006699;\r
+       color:#FFFFFF;\r
+       white-space: nowrap;\r
+       border-collapse:collapse;\r
+}\r
+\r
+/* \83G\83\89\81[\83\81\83b\83Z\81[\83W */\r
+.err{\r
+       color:#FFFFFF;\r
+}
\ No newline at end of file
diff --git a/lacoder/WebContent/index.jsp b/lacoder/WebContent/index.jsp
new file mode 100644 (file)
index 0000000..2c01435
--- /dev/null
@@ -0,0 +1,14 @@
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%\r
+       response.sendRedirect("main.do");\r
+%>\r
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title></title>
+</head>
+<body>
+lacoder
+</body>
+</html>
\ No newline at end of file
diff --git a/lacoder/conf/log4j.properties b/lacoder/conf/log4j.properties
new file mode 100644 (file)
index 0000000..7cbee60
--- /dev/null
@@ -0,0 +1,12 @@
+### direct log messages to stdout ###\r
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender\r
+log4j.appender.stdout.Target=System.out\r
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %c{1}#%M()%L:%m%n\r
+\r
+log4j.rootLogger=debug, stdout\r
+#log4j.rootLogger=debug, stdout, file\r
+\r
+log4j.category.org.apache=WARN\r
+log4j.category.org.apache.jsp=INFO\r
+log4j.category.org.apache.jasper=INFO
\ No newline at end of file
diff --git a/lacoder/conf/struts-config.xml b/lacoder/conf/struts-config.xml
new file mode 100644 (file)
index 0000000..b776e0d
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!-- $Id: struts-config.xml 474 2011-08-21 10:48:48Z dobashi $ -->\r
+\r
+<!DOCTYPE struts-config PUBLIC\r
+          "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"\r
+          "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">\r
+\r
+<struts-config>\r
+       <global-forwards>\r
+               <forward name="top" path="/top.jsp" />\r
+               <forward name="selectTarget" path="/WEB-INF/jsp/main/selectTarget.jsp" />\r
+       </global-forwards>\r
+\r
+       <action-mappings>\r
+               <action path="/main" type="com.lavans.lacoder.action.MainAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/main/main.jsp" />\r
+               </action>\r
+               <action path="/fileMake" type="com.lavans.lacoder.action.FileMakeAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/main/filemake.jsp" />\r
+               </action>\r
+\r
+               <!-- ============================================= -->\r
+               <!-- Entity -->\r
+               <!-- ============================================= -->\r
+               <action path="/Entity" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/Entity.jsp" />\r
+               </action>\r
+               <action path="/EntityBase" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/EntityBase.jsp" />\r
+               </action>\r
+               <action path="/EntityManager" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/EntityManager.jsp" />\r
+               </action>\r
+               <action path="/EntityBak" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/EntityBak.jsp" />\r
+               </action>\r
+               <action path="/Enums" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/Enums.jsp" />\r
+               </action>\r
+               <action path="/Service" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/service/Service.jsp" />\r
+               </action>\r
+\r
+               <!-- ============================================= -->\r
+               <!-- sql -->\r
+               <!-- ============================================= -->\r
+<!--\r
+               <action path="/DaoBase" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/DaoBase.jsp" />\r
+               </action>\r
+ -->\r
+               <action path="/DaoBaseXml" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/DaoBaseXml.jsp" />\r
+               </action>\r
+               <action path="/Dao" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/Dao.jsp" />\r
+               </action>\r
+               <action path="/DaoXml" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/DaoXml.jsp" />\r
+               </action>\r
+               <action path="/sql" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/sql.jsp" />\r
+               </action>\r
+               <action path="/sqlCopy" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/domain/sqlCopy.jsp" />\r
+               </action>\r
+\r
+               <!-- ============================================= -->\r
+               <!-- presentation -->\r
+               <!-- ============================================= -->\r
+               <action path="/Action" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/presentation/Action.jsp" />\r
+               </action>\r
+               <action path="/jsp" type="com.lavans.lacoder.action.ModelAction">\r
+                       <forward name="ok" path="/WEB-INF/jsp/presentation/jsp.jsp" />\r
+               </action>\r
+       </action-mappings>\r
+</struts-config>
\ No newline at end of file
diff --git a/lacoder/conf/target.xml b/lacoder/conf/target.xml
new file mode 100644 (file)
index 0000000..a208182
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE lacoder>\r
+<!-- $Id: target.xml.sample 248 2011-02-01 14:10:31Z dobashi $ -->\r
+<lacoder>\r
+       <target>lants</target>\r
+       <target>invalley</target>\r
+</lacoder>
\ No newline at end of file
diff --git a/lacoder/conf/target.xml.sample b/lacoder/conf/target.xml.sample
new file mode 100644 (file)
index 0000000..e0adc7d
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE lacoder>\r
+<!-- $Id: target.xml.sample 248 2011-02-01 14:10:31Z dobashi $ -->\r
+<lacoder>\r
+       <target>invalley</target>\r
+</lacoder>
\ No newline at end of file
diff --git a/lacoder/jsp/common/common.jsp b/lacoder/jsp/common/common.jsp
new file mode 100644 (file)
index 0000000..90add4b
--- /dev/null
@@ -0,0 +1,15 @@
+<%-- $Id: common.jsp 102 2008-12-24 10:03:15Z dobashi $\r
+ --%><%--\r
+  @ page import="com.lavans.util.browser.*" --%>\r
+<%@page import="org.apache.commons.logging.Log"%>\r
+<%@page import="org.apache.commons.logging.LogFactory"%>\r
+<%!\r
+//     protected Logger logger = Logger.getLogger(this.getClass().getName());\r
+       protected Log logger = LogFactory.getLog(this.getClass());\r
+%><%\r
+//     Browser browser = (Browser)request.getAttribute("lavansutil.browser");\r
+       String debugStr = (String)request.getAttribute("lavansutil.debugStr");\r
+       if(debugStr==null){\r
+         debugStr="";\r
+       }\r
+%>\r
diff --git a/lacoder/jsp/common/error.jsp b/lacoder/jsp/common/error.jsp
new file mode 100644 (file)
index 0000000..c03eb3f
--- /dev/null
@@ -0,0 +1,40 @@
+<!-- $Id: error.jsp 102 2008-12-24 10:03:15Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=Shift_JIS" %>\r
+<%@ include file="../common/common.jsp" %>\r
+\r
+<%\r
+       // Model Classes\r
+       Exception e = (Exception)request.getAttribute("luz.exception");\r
+       e.printStackTrace();\r
+       String url = (String)request.getAttribute("luz.login_url");\r
+       if(url==null){\r
+               url = "main";\r
+       }\r
+%>\r
+<html lang="ja">\r
+<head>\r
+<title>error</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">\r
+</head>\r
+<body bgcolor="#CCCCFF" text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<%\r
+    if(e!=null){\r
+%>\r
+<br><br>\r
+<table>\r
+  <tr><td>エラー</td>\r
+  <tr><td><%= e.getMessage() %></td>\r
+</table>\r
+<%\r
+       }\r
+\r
+%>\r
+<a href="javascript:history.back()">戻る</a><br>\r
+<a href="<%= url %>" target="_top">トップ画面へ</a>\r
+<%= debugStr %>\r
+</body>\r
+<%\r
+       logger.error("err", e);\r
+%>\r
diff --git a/lacoder/jsp/domain/Dao.jsp b/lacoder/jsp/domain/Dao.jsp
new file mode 100644 (file)
index 0000000..dc480c0
--- /dev/null
@@ -0,0 +1,318 @@
+<!-- $Id: Dao.jsp 474 2011-08-21 10:48:48Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp"\r
+%><%@ page import="java.util.*"\r
+%><%@ page import="java.text.*"\r
+%><%@ page import="com.lavans.lacoder.model.Package"\r
+%><%@ page import="com.lavans.lacoder.model.*"\r
+%><%\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       String className = entity.getClassName();\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+       Attribute attrId = entity.get(0);\r
+%>\r
+<html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: Dao.jsp 474 2011-08-21 10:48:48Z dobashi $\r
+ * created: <%= sdf.format(new Date()) %>\r
+ *\r
+ * This source code is generated by lacoder.\r
+ * @see <%= entity.getClassName() %>Service\r
+ * @see http://www.lavans.com/soft/lacoder/\r
+ */\r
+package <%= pkg.getDomainSubPackagePath() %>.dao;\r
+\r
+import java.lang.reflect.InvocationTargetException;\r
+import java.sql.SQLException;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.HashMap;\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import com.lavans.luz2.commons.DaoUtils;\r
+import com.lavans.luz2.sql.dao.CommonDao;\r
+import com.lavans.luz2.util.BeanManager;\r
+import com.lavans.luz2.util.PageInfo;\r
+import com.lavans.luz2.util.Pager;\r
+\r
+import <%= pkg.getDomainSubPackagePath() %>.entity.<%= className %>;\r
+<% if(entity.hasBackup()){ %>import <%= pkg.getDomainSubPackagePath() %>.entity.<%= className %>Bak;<% } %>\r
+\r
+/**\r
+ * <%= entity.getClassName() %>Daoクラス。\r
+ * @author ${user}\r
+ *\r
+ */\r
+public class <%= className %>Dao{\r
+       private static Log logger = LogFactory.getLog(<%= className %>Dao.class.getName()+"Base");\r
+       private CommonDao dao = BeanManager.getBean(CommonDao.class);\r
+\r
+       /** Constructor */\r
+       public <%= className %>Dao(){\r
+       }\r
+\r
+       /**\r
+        * load\r
+        */\r
+       public <%= className %> load(<%= className %>.PK pk) throws SQLException{\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "load");\r
+               List&lt;<%= className %>&gt; list = dao.list(<%= className %>.class, sql, pk.getAttributeMap());\r
+               if(list.size()==0){\r
+                       logger.debug("target not found.");\r
+                       return null;\r
+               }\r
+\r
+               return list.get(0);\r
+       }\r
+\r
+       /**\r
+        * insert\r
+        * @param entity\r
+        * @return\r
+        * @throws SQLException\r
+        * @throws InstantiationException\r
+        * @throws IllegalAccessException\r
+        * @throws NoSuchMethodException\r
+        * @throws InvocationTargetException\r
+        */\r
+       public int insert(<%= className %> entity) throws SQLException{\r
+<% if(attrId.isSequence()){    // get nextseq\r
+%>             // get next sequence\r
+               String seqSql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "nextval");\r
+               List&lt;Map&lt;String, Object&gt;&gt; seqResult = dao.executeQuery(seqSql);\r
+               long seq = (Long)seqResult.get(0).values().toArray()[0];\r
+               entity.<%= attrId.getSetterName() %>(seq);\r
+<%     }\r
+%>\r
+               //\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "insert");\r
+               int result = dao.executeUpdate(sql, entity.getAttributeMap());\r
+               if(result!=0){\r
+                       logger.debug("insert failure.");\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * update\r
+        * @param entity\r
+        * @return\r
+        * @throws SQLException\r
+        * @throws InstantiationException\r
+        * @throws IllegalAccessException\r
+        * @throws NoSuchMethodException\r
+        * @throws InvocationTargetException\r
+        */\r
+       public int update(<%= className %> entity) throws SQLException{\r
+               // update\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "update");\r
+               int result = dao.executeUpdate(sql, entity.getAttributeMap());\r
+               if(result!=0){\r
+                       logger.debug("update failure.["+ result +"]");\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * delete\r
+        *\r
+        * @param pk\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public int delete(<%= className %>.PK pk) throws SQLException{\r
+               // delete\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "delete");\r
+               int result = dao.executeUpdate(sql, pk.getAttributeMap());\r
+               if(result!=1){\r
+                       logger.debug("delete failure.["+ result +"]");\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * list with conditions.\r
+        * @param searchCondMap\r
+        * @return\r
+        * @throws SQLException\r
+        * @throws InvocationTargetException\r
+        * @throws NoSuchMethodException\r
+        * @throws IllegalAccessException\r
+        * @throws InstantiationException\r
+        */\r
+       public List&lt;<%= className %>&gt; list(Map&lt;String, String[]&gt; cond) throws SQLException{\r
+               // copy for editng key. ex) "name" to "%name%"\r
+               Map&lt;String, String[]&gt; condWork = new HashMap&lt;String, String[]&gt;();\r
+               for(Map.Entry&lt;String, String[]&gt; entry: cond.entrySet()){\r
+                       condWork.put(entry.getKey(), Arrays.copyOf(entry.getValue(), entry.getValue().length));\r
+               }\r
+\r
+               // data\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "list");\r
+               String condition = DaoUtils.getWherePhrase(<%= className %>.getAttributeInfo().keySet(), condWork);\r
+               if(condition.length()&gt;4){\r
+                       sql += "\nWHERE "+ condition.substring(4);\r
+               }\r
+               List&lt;<%= className %>&gt; list = dao.list(<%= className %>.class, sql, DaoUtils.convertSearchCond(condWork, <%= className %>.getAttributeInfo()));\r
+\r
+               return list;\r
+       }\r
+\r
+       /**\r
+        * list with conditions.\r
+        * @param searchCondMap\r
+        * @return\r
+        * @throws SQLException\r
+        * @throws InvocationTargetException\r
+        * @throws NoSuchMethodException\r
+        * @throws IllegalAccessException\r
+        * @throws InstantiationException\r
+        */\r
+       public Pager&lt;<%= className %>&gt; pager(PageInfo pageInfo, Map&lt;String, String[]&gt; cond) throws SQLException{\r
+               // copy for editng key. ex) "name" to "%name%"\r
+               Map&lt;String, String[]&gt; condWork = new HashMap&lt;String, String[]&gt;();\r
+               for(Map.Entry&lt;String, String[]&gt; entry: cond.entrySet()){\r
+                       condWork.put(entry.getKey(), Arrays.copyOf(entry.getValue(), entry.getValue().length));\r
+               }\r
+\r
+               // query condition\r
+               String condition = DaoUtils.getWherePhrase(<%= className %>.getAttributeInfo().keySet(), condWork);\r
+               if(condition.length()&gt;4){\r
+                       condition = "WHERE "+ condition.substring(4);\r
+               }\r
+               Map&lt;String, Object&gt; searchCond = DaoUtils.convertSearchCond(condWork, <%= className %>.getAttributeInfo());\r
+\r
+               // count\r
+               String seqSql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "count");\r
+               seqSql = seqSql.replace("$condition",condition);\r
+               List&lt;Map&lt;String, Object&gt;&gt; seqResult = dao.executeQuery(seqSql, searchCond);\r
+               long count = (Long)seqResult.get(0).values().toArray()[0];\r
+\r
+               // data\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "pager");\r
+               sql = sql.replace("$condition",condition);\r
+               searchCond.put("_rows", pageInfo.getRows());\r
+               searchCond.put("_offset", pageInfo.getPage()*pageInfo.getRows());\r
+               logger.debug(searchCond);\r
+               List&lt;<%= className %>&gt; list = dao.list(<%= className %>.class, sql, searchCond);\r
+\r
+               // add to pager\r
+               Pager&lt;<%= className %>&gt; pager = new Pager&lt;<%= className %>&gt;(pageInfo);\r
+               pager.setTotalCount(count);\r
+               for(<%= className %> entity: list){\r
+                       pager.add(entity);\r
+               }\r
+\r
+               return pager;\r
+       }\r
+<% if(entity.hasBackup()){ %>\r
+       /**\r
+        * backup entity which has _BAK table.\r
+        * @param entity\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public int backup(<%= className %>.PK pk) throws SQLException{\r
+               // get backup next sequence\r
+               String seqSql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "backupNextval");\r
+               List&lt;Map&lt;String, Object&gt;&gt; seqResult = dao.executeQuery(seqSql);\r
+               long seq = (Long)seqResult.get(0).values().toArray()[0];\r
+\r
+               // insert to backup table\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "backup");\r
+               Map&lt;String, Object&gt; searchCond = new HashMap&lt;String, Object&gt;();\r
+               searchCond.put("pk", seq);\r
+               searchCond.put("<%= attrId.getName() %>", pk.<%= attrId.getGetterName() %>());\r
+               int result = dao.executeUpdate(sql, searchCond);\r
+               if(result!=0){\r
+                       logger.debug("backup failure.["+ result +"]");\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * list with conditions.\r
+        * @param searchCondMap\r
+        * @return\r
+        * @throws SQLException\r
+        * @throws InvocationTargetException\r
+        * @throws NoSuchMethodException\r
+        * @throws IllegalAccessException\r
+        * @throws InstantiationException\r
+        */\r
+       public Pager&lt;<%= className %>Bak&gt; pagerBak(PageInfo pageInfo, Map&lt;String, String[]&gt; cond) throws SQLException{\r
+               // copy for editng key. ex) "name" to "%name%"\r
+               Map&lt;String, String[]&gt; condWork = new HashMap&lt;String, String[]&gt;();\r
+               for(Map.Entry&lt;String, String[]&gt; entry: cond.entrySet()){\r
+                       condWork.put(entry.getKey(), Arrays.copyOf(entry.getValue(), entry.getValue().length));\r
+               }\r
+\r
+               // query condition\r
+               String condition = DaoUtils.getWherePhrase(<%= className %>.getAttributeInfo().keySet(), condWork);\r
+               if(condition.length()&gt;4){\r
+                       condition = "WHERE "+ condition.substring(4);\r
+               }\r
+               Map&lt;String, Object&gt; searchCond = DaoUtils.convertSearchCond(condWork, <%= className %>.getAttributeInfo());\r
+\r
+               // count\r
+               String seqSql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "count");\r
+               seqSql = seqSql.replace("$condition",condition);\r
+               List&lt;Map&lt;String, Object&gt;&gt; seqResult = dao.executeQuery(seqSql, searchCond);\r
+               long count = (Long)seqResult.get(0).values().toArray()[0];\r
+\r
+               // data\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "pager");\r
+               sql = sql.replace("$condition",condition);\r
+               searchCond.put("_rows", pageInfo.getRows());\r
+               searchCond.put("_offset", pageInfo.getPage()*pageInfo.getRows());\r
+               logger.debug(searchCond);\r
+               List&lt;<%= className %>Bak&gt; list = dao.list(<%= className %>Bak.class, sql, searchCond);\r
+\r
+               // add to pager\r
+               Pager&lt;<%= className %>Bak&gt; pager = new Pager&lt;<%= className %>Bak&gt;(pageInfo);\r
+               pager.setTotalCount(count);\r
+               for(<%= className %>Bak entity: list){\r
+                       pager.add(entity);\r
+               }\r
+\r
+               return pager;\r
+       }\r
+\r
+       /**\r
+        * restore entity from _BAK table.\r
+        * @param entity\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public int from(<%= className %>.PK pk) throws SQLException{\r
+               // insert to backup table\r
+               String sql = DaoUtils.getSql(<%= className %>Dao.class.getName()+"Base", "restore");\r
+               Map&lt;String, Object&gt; searchCond = new HashMap&lt;String, Object&gt;();\r
+               searchCond.put("<%= attrId.getName() %>", pk.<%= attrId.getGetterName() %>());\r
+               int result = dao.executeUpdate(sql, searchCond);\r
+               if(result!=0){\r
+                       logger.debug("backup failure.["+ result +"]");\r
+               }\r
+\r
+               return result;\r
+       }\r
+<%     } %>\r
+}\r
+</pre>\r
+<!-- <%= debugStr %> -->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/domain/DaoBaseXml.jsp b/lacoder/jsp/domain/DaoBaseXml.jsp
new file mode 100644 (file)
index 0000000..856eeeb
--- /dev/null
@@ -0,0 +1,151 @@
+<!-- $Id: DaoBaseXml.jsp 421 2011-07-29 09:55:09Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp"\r
+%><%@ page import="java.util.*"\r
+%><%@ page import="java.text.*"\r
+%><%@ page import="com.lavans.lacoder.*"\r
+%><%@ page import="com.lavans.lacoder.model.Package"\r
+%><%@ page import="com.lavans.lacoder.model.Attribute"\r
+%><%@ page import="com.lavans.lacoder.model.Entity"\r
+%><%@ page import="com.lavans.lacoder.db.*"\r
+%><%@ page import="com.lavans.lacoder.main.*"\r
+%><%@ page import="com.lavans.luz2.commons.StringUtils"\r
+%><%@page import="com.lavans.luz2.util.IEnum"\r
+%><%@page import="com.lavans.lacoder.writer.DaoXmlWriter"%>\r
+<%!\r
+       /**\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+       String escapeBackSlash="\\\\";\r
+%><%\r
+Package pkg = (Package)request.getAttribute("lacoder.package");\r
+Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+DaoXmlWriter writer = new DaoXmlWriter(entity);\r
+String className = entity.getClassName();\r
+\r
+\r
+%>\r
+\r
+<%@page import="com.sun.java.swing.plaf.windows.resources.windows"%><html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+&lt;?xml version="1.0" encoding="UTF-8" ?&gt;\r
+&lt;!DOCTYPE well-formed&gt;\r
+&lt;!--\r
+       $Id: DaoBaseXml.jsp 421 2011-07-29 09:55:09Z dobashi $\r
+       created: &lt;%= sdf.format(new Date()) %&gt;\r
+\r
+       This source code is generated by lacoder.\r
+       DO NOT EDIT.<%--\r
+       @see http://www.lavans.com/soft/lacoder/\r
+--%>\r
+ --&gt;\r
+&lt;sql&gt;\r
+       &lt;!-- select 1 record --&gt;\r
+       &lt;load&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeSelectSql() %>\r
+               ]]&gt;\r
+       &lt;/load&gt;\r
+\r
+<%     // ID(プライマリキー)がsequenceの時\r
+       if(entity.get(0).isSequence()){\r
+%>     &lt;nextval&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeNextValSql() %>\r
+               ]]&gt;\r
+       &lt;/nextval&gt;\r
+\r
+<%\r
+       }\r
+%>     &lt;insert&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeInsertSql() %>\r
+               ]]&gt;\r
+       &lt;/insert&gt;\r
+\r
+       &lt;update&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeUpdateSql() %>\r
+               ]]&gt;\r
+       &lt;/update&gt;\r
+\r
+       &lt;delete&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeDeleteSql() %>\r
+               ]]&gt;\r
+       &lt;/delete&gt;\r
+\r
+       &lt;deleteAny&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeDeleteAnySql() %>\r
+               ]]&gt;\r
+       &lt;/deleteAny&gt;\r
+\r
+       &lt;count&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeListCountSql() %>\r
+               ]]&gt;\r
+       &lt;/count&gt;\r
+\r
+       &lt;pager&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeListPagerSql() %>\r
+               ]]&gt;\r
+       &lt;/pager&gt;\r
+\r
+       &lt;pagerPk&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeListPagerPkSql() %>\r
+               ]]&gt;\r
+       &lt;/pagerPk&gt;\r
+\r
+       &lt;list&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeListAnySql() %>\r
+               ]]&gt;\r
+       &lt;/list&gt;\r
+\r
+       &lt;listPk&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeListAnyPkSql() %>\r
+               ]]&gt;\r
+       &lt;/listPk&gt;\r
+<%     if(entity.hasBackup()){ %>\r
+       &lt;backup&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeBackupSql() %>\r
+               ]]&gt;\r
+       &lt;/backup&gt;\r
+\r
+       &lt;backupNextval&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeBackupNextValSql() %>\r
+               ]]&gt;\r
+       &lt;/backupNextval&gt;\r
+\r
+       &lt;pagerBak&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writePagerBakSql() %>\r
+               ]]&gt;\r
+       &lt;/pagerBak&gt;\r
+\r
+       &lt;restore&gt;\r
+               &lt;![CDATA[\r
+<%= writer.writeRestoreSql() %>\r
+               ]]&gt;\r
+       &lt;/restore&gt;\r
+<% } %>\r
+&lt;/sql&gt;\r
+</pre>\r
+\r
+<!-- <%= debugStr %> -->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/domain/DaoXml.jsp b/lacoder/jsp/domain/DaoXml.jsp
new file mode 100644 (file)
index 0000000..4c3dffb
--- /dev/null
@@ -0,0 +1,57 @@
+<!-- $Id: DaoXml.jsp 421 2011-07-29 09:55:09Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp"\r
+%><%@ page import="java.util.*"\r
+%><%@ page import="java.text.*"\r
+%><%@ page import="com.lavans.lacoder.*"\r
+%><%@ page import="com.lavans.lacoder.model.Package"\r
+%><%@ page import="com.lavans.lacoder.model.Attribute"\r
+%><%@ page import="com.lavans.lacoder.model.Entity"\r
+%><%@ page import="com.lavans.lacoder.db.*"\r
+%><%@ page import="com.lavans.lacoder.main.*"\r
+%><%@ page import="com.lavans.luz2.commons.StringUtils"\r
+%><%@page import="com.lavans.luz2.util.IEnum"\r
+%><%@page import="com.lavans.lacoder.writer.DaoXmlWriter"%>\r
+<%!\r
+       /**\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+       String escapeBackSlash="\\\\";\r
+%><%\r
+Package pkg = (Package)request.getAttribute("lacoder.package");\r
+Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+DaoXmlWriter writer = new DaoXmlWriter(entity);\r
+String className = entity.getClassName();\r
+\r
+\r
+%>\r
+\r
+<%@page import="com.sun.java.swing.plaf.windows.resources.windows"%><html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+&lt;?xml version="1.0" encoding="UTF-8" ?&gt;\r
+&lt;!DOCTYPE well-formed&gt;\r
+&lt;!--\r
+       $Id: DaoXml.jsp 421 2011-07-29 09:55:09Z dobashi $\r
+       created: &lt;%= sdf.format(new Date()) %&gt;\r
+ --&gt;\r
+&lt;sql&gt;\r
+       &lt;!-- sample --&gt;\r
+       &lt;sample&gt;\r
+               &lt;![CDATA[\r
+INPUT YOUR SQL\r
+               ]]&gt;\r
+       &lt;/sample&gt;\r
+&lt;/sql&gt;\r
+</pre>\r
+\r
+<!-- <%= debugStr %> -->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/domain/Entity.jsp b/lacoder/jsp/domain/Entity.jsp
new file mode 100644 (file)
index 0000000..150d292
--- /dev/null
@@ -0,0 +1,85 @@
+<!-- $Id: Entity.jsp 405 2011-07-28 21:46:01Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.util.*" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Package" %>\r
+<%!\r
+       /**\r
+        * 基本方針\r
+        * validate()はBaseに移してxmlで指定したconstraintに応じて自動チェックするようにする。\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+%>\r
+<%\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       String className = entity.getClassName();\r
+       ModelWriter writer = new ModelWriter(entity);\r
+%>\r
+\r
+<%@page import="com.lavans.lacoder.writer.ModelWriter"%>\r
+<html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: Entity.jsp 405 2011-07-28 21:46:01Z dobashi $\r
+ * 作成日: <%= sdf.format(new Date()) %>\r
+ *\r
+ */\r
+package <%= pkg.getDomainSubPackagePath() %>.entity;\r
+<%--\r
+import java.math.BigDecimal;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.io.Serializable;\r
+ --%>\r
+import <%= pkg.getDomainSubPackagePath() %>.entity.base.<%= className %>Base;\r
+import java.util.Map;\r
+import java.util.HashMap;\r
+<%--\r
+import <%= pkg.getName() %>.<%= pkg.getProject() %>.http.IUser;\r
+import <%= pkg.getName() %>.<%= pkg.getProject() %>.http.Cp932;\r
+import <%= pkg.getName() %>.<%= pkg.getProject() %>.common.UserManager;\r
+--%>\r
+/**\r
+ * <%= entity.getTitle() %>クラス。\r
+ *\r
+ * @author ${user}\r
+ */\r
+public class <%= className %> extends <%= className %>Base{\r
+       /** serialID */\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       /**\r
+        * 文字列表現。\r
+        * PKの各属性と名前を":"で連結して返す。\r
+        */\r
+       @Override\r
+       public String toString() {\r
+               return <%= writer.writeStringMembers() %>;\r
+       }\r
+\r
+       /**\r
+        * 登録用パラメータチェック。\r
+        */\r
+       public Map&lt;String,String&gt; validate() {\r
+               Map&lt;String,String&gt; errors = new HashMap&lt;String,String&gt;(2);\r
+\r
+               return errors;\r
+       }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/domain/EntityBak.jsp b/lacoder/jsp/domain/EntityBak.jsp
new file mode 100644 (file)
index 0000000..1afd7c6
--- /dev/null
@@ -0,0 +1,112 @@
+<!-- $Id: Entity.jsp 405 2011-07-28 21:46:01Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.util.*" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Package" %>\r
+<%!\r
+       /**\r
+        * 基本方針\r
+        * validate()はBaseに移してxmlで指定したconstraintに応じて自動チェックするようにする。\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+%>\r
+<%\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       String className = entity.getClassName();\r
+       ModelWriter writer = new ModelWriter(entity);\r
+%>\r
+\r
+<%@page import="com.lavans.lacoder.writer.ModelWriter"%>\r
+<html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: Entity.jsp 405 2011-07-28 21:46:01Z dobashi $\r
+ * 作成日: <%= sdf.format(new Date()) %>\r
+ *\r
+ */\r
+package <%= pkg.getDomainSubPackagePath() %>.entity;\r
+<%--\r
+import java.math.BigDecimal;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Date;\r
+import java.util.HashMap;\r
+import java.io.Serializable;\r
+ --%>\r
+import <%= pkg.getDomainSubPackagePath() %>.entity.<%= className %>;\r
+import java.util.Date;\r
+<%--\r
+import <%= pkg.getName() %>.<%= pkg.getProject() %>.http.IUser;\r
+import <%= pkg.getName() %>.<%= pkg.getProject() %>.http.Cp932;\r
+import <%= pkg.getName() %>.<%= pkg.getProject() %>.common.UserManager;\r
+--%>\r
+/**\r
+ * <%= entity.getTitle() %>クラス。\r
+ *\r
+ * @author ${user}\r
+ */\r
+public class <%= className %>Bak extends <%= className %>{\r
+       /** serialID */\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       /** backupId */\r
+       private long backupId;\r
+\r
+       /** backupda date */\r
+       private Date backupDatetime = null;\r
+\r
+       /**\r
+        * get backupId\r
+        * @return\r
+        */\r
+       public long getBackupId() {\r
+               return backupId;\r
+       }\r
+\r
+       /**\r
+        * set backupId\r
+        * @param backupId\r
+        */\r
+       public void setBackupId(long backupId) {\r
+               this.backupId = backupId;\r
+       }\r
+\r
+       /**\r
+        * @return backupDatetime\r
+        */\r
+       public Date getBackupDatetime() {\r
+               return backupDatetime;\r
+       }\r
+\r
+       /**\r
+        * set backupDatetime\r
+        * @param backupDatetime\r
+        */\r
+       public void setBackupDatetime(Date backupDatetime) {\r
+               this.backupDatetime = backupDatetime;\r
+       }\r
+\r
+       /**\r
+        * 文字列表現。\r
+        * PKの各属性と名前を":"で連結して返す。\r
+        */\r
+       @Override\r
+       public String toString() {\r
+               return <%= writer.writeStringMembers() %>;\r
+       }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/domain/EntityBase.jsp b/lacoder/jsp/domain/EntityBase.jsp
new file mode 100644 (file)
index 0000000..46c44cc
--- /dev/null
@@ -0,0 +1,216 @@
+<!-- $Id: EntityBase.jsp 442 2011-08-07 12:51:58Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.util.*" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.*" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Package" %>\r
+<%@ page import="com.lavans.lacoder.model.Entity" %>\r
+<%@ page import="com.lavans.lacoder.model.Attribute" %>\r
+<%@ page import="com.lavans.lacoder.main.*" %>\r
+<%@ page import="com.lavans.lacoder.db.*" %>\r
+<%!/**\r
+        * getParameter()とgetConditionParams()を一つに出来ないか?\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");%>\r
+<%\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       ModelWriter writer = new ModelWriter(entity);\r
+       Attribute attrId = entity.get(0);\r
+       TypeManager typeMan = entity.getTypeManager();\r
+       String className = entity.getClassName();\r
+%>\r
+<%@page import="com.lavans.luz2.commons.StringUtils"%>\r
+\r
+<%@page import="com.lavans.lacoder.writer.ModelWriter"%><html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: EntityBase.jsp 442 2011-08-07 12:51:58Z dobashi $\r
+ * 作成日: <%= sdf.format(new Date()) %>\r
+ *\r
+ */\r
+package <%= pkg.getDomainSubPackagePath() %>.entity.base;\r
+\r
+import java.util.Map;\r
+import java.util.HashMap;\r
+import java.io.Serializable;\r
+import com.lavans.luz2.util.IEntity;\r
+import com.lavans.luz2.util.IParameterizable;\r
+<%= writer.writeImports() %>\r
+\r
+/**\r
+ * <%= entity.getTitle() %>Baseクラス。\r
+ *\r
+ * This is generated by lacoder.\r
+ * You shoud not change this code. You should customize <%= className %>.java.\r
+ * @see http://www.lavans.com/soft/lacoder/\r
+ */\r
+public class <%= className %>Base implements IEntity, IParameterizable, Serializable, Cloneable{\r
+       /** serialID */\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       /**\r
+        * Constants definition.\r
+        */\r
+<%= writer.writeConsts() %>\r
+       /**\r
+        * Get attribute info\r
+        */\r
+       public static Map&lt;String, Class&lt;?&gt;&gt; getAttributeInfo(){\r
+               Map&lt;String, Class&lt;?&gt;&gt; map = new HashMap&lt;String, Class&lt;?&gt;&gt;();\r
+<%= writer.writeGetAttributeInfo() %>\r
+               return map;\r
+       }\r
+\r
+       // instance variables.\r
+<%= writer.writeInstanceVars() %>\r
+\r
+       /**\r
+        * Get Map&lt;String, String[]&gt; paramegters from Attributes for HTTP\r
+        */<%--  @SuppressWarnings("unchecked") --%>\r
+       public Map&lt;String, String[]&gt; getParameters() {\r
+               return getParameters("");\r
+       }\r
+       @Override\r
+       public Map&lt;String, String[]&gt; getParameters(String prefix) {\r
+               Map&lt;String, String[]&gt; map = new HashMap&lt;String, String[]&gt;();\r
+<%= writer.writeGetParameters() %>\r
+               return map;\r
+       }\r
+\r
+       /**\r
+        * Set Attributes from Map&lt;String, String[]&gt; paramegters for HTTP\r
+        */\r
+       public void setParameters(Map&lt;String, String[]&gt; map){\r
+               setParameters(map, "");\r
+       }\r
+       public void setParameters(Map&lt;String, String[]&gt; map, String prefix){\r
+<%= writer.writeSetParameters()\r
+%>     }\r
+\r
+       /**\r
+        * Get Map&lt;String, Object&gt; paramegters from Attributes for SQL\r
+        */<%--  @SuppressWarnings("unchecked") --%>\r
+       @Override\r
+       public Map&lt;String, Object&gt; getAttributeMap() {\r
+               Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();\r
+<%= writer.writeGetAttributeMap() %>\r
+               return map;\r
+       }\r
+\r
+       /**\r
+        * Clone method.\r
+        */\r
+       public Object clone() throws CloneNotSupportedException{\r
+               return super.clone();\r
+       }\r
+\r
+       // accessors\r
+<%= writer.writeAccesssor() %>\r
+\r
+       /**\r
+        * get primary key.\r
+        * @return\r
+        */\r
+       public PK getPK(){\r
+               PK pk = new PK();\r
+<%= writer.writePKSetter() %>\r
+               return pk;\r
+       }\r
+\r
+       /**\r
+        * primary key class definition.\r
+        * @author dobashi\r
+        */\r
+       public class PK implements IEntity, IParameterizable{\r
+               private static final long serialVersionUID = 1L;\r
+<%= writer.writeInstanceVarsPK() %>\r
+\r
+               /**\r
+                * override Object#hashCode().\r
+                */\r
+               @Override\r
+               public int hashCode() {\r
+                       return toString().hashCode();\r
+               }\r
+\r
+               /**\r
+                * override Object#equals().\r
+                */\r
+               @Override\r
+               public boolean equals(Object obj) {\r
+                       // 参照先が同じならtrue\r
+                       if(this==obj) return true;\r
+                       // このクラス(または派生クラス)のPKでないならfalse\r
+                       if(!(obj instanceof <%= className %>Base.PK)){\r
+                               return false;\r
+                       }\r
+                       // PK型で受け取る\r
+                       <%= className %>Base.PK o = (<%= className %>Base.PK)obj;\r
+                       // 各PKを繋いだ文字列で比較する\r
+                       return toString().equals(o.toString());\r
+               }\r
+\r
+               /**\r
+                * toString.\r
+                * PKの各属性を":"で連結して返す。\r
+                */\r
+               @Override\r
+               public String toString() {\r
+                       return <%= writer.writeStringMembersPK() %>;\r
+               }\r
+\r
+               /**\r
+                * Get Map&lt;String, String[]&gt; paramegters from Attributes for HTTP\r
+                */<%--  @SuppressWarnings("unchecked") --%>\r
+               public Map&lt;String, String[]&gt; getParameters() {\r
+                       return getParameters("");\r
+               }\r
+               @Override\r
+               public Map&lt;String, String[]&gt; getParameters(String prefix) {\r
+                       Map&lt;String, String[]&gt; map = new HashMap&lt;String, String[]&gt;();\r
+<%= writer.writeGetParametersPK() %>\r
+                       return map;\r
+               }\r
+\r
+               /**\r
+                * Set Attributes from Map&lt;String, String[]&gt; paramegters for HTTP\r
+                */\r
+               public void setParameters(Map&lt;String, String[]&gt; map){\r
+                       setParameters(map, "");\r
+               }\r
+               @Override\r
+               public void setParameters(Map&lt;String, String[]&gt; map, String prefix){\r
+<%= writer.writeSetParametersPK()\r
+%>             }\r
+\r
+               /**\r
+                * Get Map&lt;String, Object&gt; paramegters from Attributes for SQL\r
+                */<%--  @SuppressWarnings("unchecked") --%>\r
+               @Override\r
+               public Map&lt;String, Object&gt; getAttributeMap() {\r
+                       Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();\r
+<%= writer.writeGetAttributeMapPK() %>\r
+                       return map;\r
+               }\r
+\r
+               // accessors\r
+<%= writer.writeAccesssorPK() %>\r
+       }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+</html>\r
+\r
diff --git a/lacoder/jsp/domain/EntityManager.jsp b/lacoder/jsp/domain/EntityManager.jsp
new file mode 100644 (file)
index 0000000..976bf99
--- /dev/null
@@ -0,0 +1,221 @@
+<!-- $Id: EntityManager.jsp 473 2011-08-20 13:34:05Z dobashi $ -->\r
+<%@page import="java.util.Date"%>\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.text.*" %>\r
+<%@page import="com.lavans.lacoder.model.Package"%>\r
+<%@ page import="com.lavans.lacoder.model.Entity" %>\r
+<%!\r
+       /**\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+%>\r
+<%\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       String className = entity.getClassName();\r
+       String entityName = entity.getShortname();\r
+%>\r
+<head>\r
+<title>service</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: EntityManager.jsp 473 2011-08-20 13:34:05Z dobashi $\r
+ * 作成日: <%= new SimpleDateFormat("yyyy-MM-dd").format(new Date()) %>\r
+ *\r
+ */\r
+package <%= pkg.getDomainSubPackagePath() %>;\r
+\r
+import java.sql.SQLException;\r
+<%     if(entity.isCached()){\r
+%>import java.util.concurrent.ConcurrentHashMap;\r
+<%     }\r
+       if(entity.hasDate()){\r
+%>import java.util.Date;\r
+<%     } %>\r
+import java.util.List;\r
+import java.util.Map;\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import com.lavans.luz2.util.BeanManager;\r
+import com.lavans.luz2.util.PageInfo;\r
+import com.lavans.luz2.util.Pager;\r
+\r
+import <%= pkg.getDomainSubPackagePath() %>.entity.<%= className %>;\r
+import <%= pkg.getDomainSubPackagePath() %>.dao.<%= className %>Dao;\r
+\r
+/**\r
+ * EntityManager for <%= entity.getTitle() %>.\r
+ * @author dobashi\r
+ *\r
+ */\r
+public class <%= className %>Manager {\r
+       /** logger */\r
+       private static Log logger = LogFactory.getLog(<%= className %>Manager.class);\r
+\r
+       /** dao */\r
+       private <%= className %>Dao <%= entityName %>Dao = BeanManager.getBean(<%= className %>Dao.class);\r
+\r
+<% if(entity.isCached()){\r
+%>     /** <%= className %>のキャッシュ */\r
+       private Map&lt;<%= className %>.PK, <%= className %>&gt; <%= entityName %>Map = new ConcurrentHashMap&lt;<%= className %>.PK, <%= className %>&gt;();\r
+<% }%>\r
+<%--\r
+       /**\r
+        * コンストラクタ。\r
+        */\r
+       private <%= className %>Manager(){\r
+               logger.debug("created.");\r
+       }\r
+ --%>\r
+       /**\r
+        * 初期化処理。\r
+        *\r
+        */\r
+       public void init(){\r
+<% if(entity.isCached()){\r
+%>             List&lt;<%= className %>&gt; <%= entityName %>List = null;\r
+               // 全インスタンスをキャッシュする\r
+               try {\r
+                       <%= entityName %>List = <%= entityName %>Dao.list(null);\r
+               } catch (SQLException e) {\r
+                       logger.error("初期化に失敗", e);\r
+               }\r
+\r
+               // <%= entity.getTitle() %>一覧\r
+               <%= entityName %>Map.clear();\r
+               for(<%= className %> <%= entityName %>: <%= entityName %>List){\r
+                       <%= entityName %>Map.put(<%= entityName %>.getPK(), <%= entityName %>);\r
+               }\r
+<% }\r
+%>     }\r
+\r
+       /**\r
+        * 更新用クラスを返す。\r
+        * @param datatype\r
+        * @return\r
+        */\r
+       public <%= className %> get<%= className %>(<%= className %>.PK pk) throws SQLException{\r
+               if(pk==null) return null;\r
+\r
+<% if(entity.isCached()){\r
+%>             <%= className %> <%= entityName %> = <%= entityName %>Map.get(pk);\r
+               // キャッシュに存在しない場合\r
+               if(<%= entityName %>==null){\r
+                       // DBから読み込む\r
+                       <%= entityName %> = <%= entityName %>Dao.load(pk);\r
+                       // それでも存在しない場合は\r
+                       if(<%= entityName %>==null){\r
+                               // nullを返す\r
+                               return null;\r
+                       }\r
+\r
+                       // キャッシュに登録\r
+                       <%= entityName %>Map.put(pk, <%= entityName %>);\r
+               }\r
+\r
+               // キャッシュ書き換え防止のためコピー\r
+               try {\r
+                       <%= entityName %> = (<%= className %>)<%= entityName %>.clone();\r
+               } catch (CloneNotSupportedException e) {\r
+                       logger.error(e);\r
+               }\r
+<% }else{\r
+%>             <%= className %> <%= entityName %> = <%= entityName %>Dao.load(pk);\r
+<% }\r
+%>             return <%= entityName %>;\r
+       }\r
+\r
+       /**\r
+        * <%= entity.getTitle() %>登録処理。\r
+        * @return <%= className %> ID,登録時間等をセットしたEntityそのものを返す。\r
+        */\r
+       public <%= className %> insert(<%= className %> <%= entityName %>) throws SQLException{\r
+<%     if(entity.hasInsertDatetime() || entity.hasUpdateDatetime()){\r
+%>             Date now = new Date();\r
+<%             if(entity.hasInsertDatetime()){\r
+%>             <%= entityName %>.setInsertDatetime(now);\r
+<%             }\r
+               if(entity.hasUpdateDatetime()){\r
+%>             <%= entityName %>.setUpdateDatetime(now);\r
+<%             }\r
+       }\r
+%>             int result = <%= entityName %>Dao.insert(<%= entityName %>);\r
+               if(result!=0){\r
+                       logger.debug("insert failure.");\r
+               }\r
+<% if(entity.isCached()){\r
+%>             // 成功したらキャッシュに登録\r
+               <%= entityName %>Map.put(<%= entityName %>.getPK(), <%= entityName %>);\r
+<% }\r
+%>             return <%= entityName %>;\r
+       }\r
+\r
+       /**\r
+        * <%= entity.getTitle() %>更新処理。\r
+        * @return <%= className %> 更新時間をセットしたEntityそのものを返す。\r
+        */\r
+       public <%= className %> update(<%= className %> <%= entityName %>) throws SQLException{\r
+<%     if(entity.hasUpdateDatetime()){\r
+%>             <%= entityName %>.setUpdateDatetime(new Date());\r
+<%     }\r
+%>             int result = <%= entityName %>Dao.update(<%= entityName %>);\r
+               if(result!=0){\r
+                       logger.debug("update failure.");\r
+               }\r
+<% if(entity.isCached()){\r
+%>             // 成功したらキャッシュに登録\r
+               <%= entityName %>Map.put(<%= entityName %>.getPK(), <%= entityName %>);\r
+<% }\r
+%>             return <%= entityName %>;\r
+       }\r
+\r
+       /**\r
+        * <%= entity.getTitle() %>削除\r
+        * @param <%= entityName %>\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public int delete(<%= className %>.PK pk) throws SQLException{\r
+               <% if(entity.hasBackup()){ %>// バックアップテーブルに保存\r
+               <%= entityName %>Dao.backup(pk);\r
+               <% }\r
+               %>// DBに登録\r
+               int result = <%= entityName %>Dao.delete(pk);\r
+<% if(entity.isCached()){\r
+%>             // キャッシュから削除\r
+               <%= entityName %>Map.remove(pk);\r
+<% }\r
+%>             return result;\r
+       }\r
+\r
+       /**\r
+        * 一覧処理。\r
+        * @param pageInfo\r
+        * @param cond\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public List&lt;<%= className %>&gt; list(Map&lt;String,String[]&gt; cond) throws SQLException{\r
+               return <%= entityName %>Dao.list(cond);\r
+       }\r
+\r
+       /**\r
+        * ページング一覧処理。\r
+        * @param pageInfo\r
+        * @param cond\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public Pager&lt;<%= className %>&gt; pager(PageInfo pageInfo, Map&lt;String,String[]&gt; cond) throws SQLException{\r
+               return <%= entityName %>Dao.pager(pageInfo, cond);\r
+       }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
diff --git a/lacoder/jsp/domain/Enums.jsp b/lacoder/jsp/domain/Enums.jsp
new file mode 100644 (file)
index 0000000..7b016ab
--- /dev/null
@@ -0,0 +1,344 @@
+<!-- $Id: Enums.jsp 466 2011-08-16 13:56:56Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.util.*" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Package" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@page import="com.lavans.luz2.commons.StringUtils"%>\r
+<%!\r
+       /**\r
+        * 基本方針\r
+        * とりあえずプロバイス用に手っ取り早く。\r
+        * 最終的にはjspをやめてファイルに直接書き出す。\r
+        * これをベースクラスとしてインクリメンタルな開発に耐えられるように。\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+%>\r
+<%\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       EnumClass enumClass = (EnumClass)request.getAttribute("lacoder.enum");\r
+       String className = enumClass.getClassName();\r
+       List<String> valueList = enumClass.getValueList();\r
+       List<String> booleanList = enumClass.getBooleanList();%>\r
+<html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: Enums.jsp 466 2011-08-16 13:56:56Z dobashi $\r
+ * 作成日: <%= sdf.format(new Date()) %>\r
+ *\r
+ *\r
+ * This is generated by lacoder.\r
+ * @see http://www.lavans.com/soft/lacoder/\r
+ */\r
+package <%= pkg.getDomainSubPackagePath() %>;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import com.lavans.luz2.util.IEnum;\r
+import com.lavans.luz2.commons.JapaneseTextUtil;\r
+\r
+/**\r
+ * <%= enumClass.getTitle() %>クラス。\r
+ * @author dobashi\r
+ */\r
+public class <%= className %> implements Serializable, IEnum{\r
+       private static final long serialVersionUID = 1L;\r
+       public static final String _ID  = "<%= enumClass.getName() %>";\r
+<%     if(valueList.size()>0){\r
+%>     // リスト名定義\r
+<%     }\r
+       for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+%>     public static final String _LIST_<%= listName.toUpperCase() %> =        "<%= listName %>";\r
+       // Enumメンバー\r
+<%     }\r
+//     logger.info("static定義");\r
+       for(int i=0; i<enumClass.size(); i++){\r
+//logger.info("static"+i);\r
+               EnumMember member = enumClass.get(i);\r
+%>     public static final <%= className %> <%= member.getConstName() %>       = new <%= className %>(\r
+               "<%= member.getName() %>"       // id\r
+               ,"<%= member.getTitle() %>"     // Title\r
+<%             // valueList\r
+               for(int j=0; j<valueList.size(); j++){\r
+                       String listName = (String)valueList.get(j);\r
+                       if(listName.equals("int")){\r
+%>             ,<%= member.getValue(listName) %>       // <%= listName %>\r
+<%                     }else if(member.getValue(listName)==null){\r
+%>             ,null   // <%= listName %>\r
+<%                     }else{\r
+%>             ,"<%= member.getValue(listName) %>"     // <%= listName %>\r
+<%                     }\r
+               }\r
+               // booleanList\r
+               for(int j=0; j<booleanList.size(); j++){\r
+                       String listName = (String)booleanList.get(j);\r
+                       if(member.getBoolean(listName)){\r
+%>             ,true   // <%= listName %>\r
+<%                     }else{\r
+%>             ,false  // <%= listName %>\r
+<%                     }\r
+               }\r
+%>     );\r
+<%\r
+       }\r
+       // Map\r
+       valueList.add(0,"all");\r
+       for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+%>     /** <%= listName %>格納用 */\r
+<%             if(listName.equals("int")){\r
+%>     private static Map&lt;Integer, <%= className %>&gt; <%= listName %>Map = new HashMap&lt;Integer, <%= className %>&gt;(<%= enumClass.size() %>);\r
+<%             }else{ %>\r
+       private static Map&lt;String, <%= className %>&gt; <%= listName %>Map = new HashMap&lt;String, <%= className %>&gt;(<%= enumClass.size() %>);\r
+<%             }\r
+%>     private static List&lt;<%= className %>&gt; <%= listName %>List = new ArrayList&lt;<%= className %>&gt;(<%= enumClass.size() %>);\r
+<%     }       %>      /**\r
+        * 初期化\r
+        * <%-- 最終的にはタイトルはResourceBundleから取得?\r
+        * 動的に言語を切り替えられるようにするか? --%>\r
+        */\r
+       static{\r
+<%\r
+       for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+               for(int j=0; j<enumClass.size(); j++){\r
+                       EnumMember member = enumClass.get(j);\r
+                       // 除外登録されていたら次へ\r
+                       if(member.isExclude(listName)){\r
+                               continue;\r
+                       }\r
+                       String key = "";\r
+                       if(listName.equals("all")){\r
+                               key = "\""+member.getName()+"\"";\r
+                       }else if(listName.equals("int")){\r
+                               key = "new Integer("+member.getValue(listName)+")";\r
+                       }else{\r
+                               key = "\""+member.getValue(listName)+"\"";\r
+                       }\r
+%>             <%= listName %>Map.put(<%= key %>,<%= member.getConstName() %>);\r
+               <%= listName %>List.add(<%= member.getConstName() %>);\r
+<%             }\r
+       }\r
+%>     }\r
+\r
+       /**\r
+        * IDからインスタンス取得。\r
+        * @param id\r
+        * @return\r
+        */\r
+       public static <%= className %> getInstance(String id){\r
+               return (<%= className %>)allMap.get(id);\r
+       }\r
+\r
+       /**\r
+        * IDから表示名を取得。\r
+        * @param id\r
+        * @return\r
+        */\r
+       public static String getTitle(String id){\r
+               return getTitle(id, "");\r
+       }\r
+       public static String getTitle(String id, String defaultStr){\r
+               if(allMap.get(id)!=null){\r
+                       allMap.get(id).getTitle();\r
+               }\r
+               return defaultStr;\r
+       }\r
+\r
+       /**\r
+        * IDから半角かなで表示名を取得。\r
+        * @param id\r
+        * @return\r
+        */\r
+       public static String getTitleHankana(String id){\r
+               return getTitleHankana(id, "");\r
+       }\r
+       public static String getTitleHankana(String id, String defaultStr){\r
+               if(allMap.get(id)!=null){\r
+                       allMap.get(id).getTitleHankana();\r
+               }\r
+               return defaultStr;\r
+       }\r
+<%\r
+       for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+               if(listName.equals("int")){\r
+%>     /**\r
+        * <%= listName %>からインスタンス取得。\r
+        * @param id\r
+        * @return\r
+        */\r
+       public static <%= className %> getInstanceBy<%= StringUtils.capitalize(listName) %>(int id){\r
+               return (<%= className %>)<%= listName %>Map.get(new Integer(id));\r
+       }\r
+<%             }else{\r
+%>\r
+       /**\r
+        * IDからインスタンス取得。\r
+        * @param id\r
+        * @return\r
+        */\r
+       public static <%= className %> getInstanceBy<%= StringUtils.capitalize(listName) %>(String id){\r
+               return (<%= className %>)<%= listName %>Map.get(id);\r
+       }\r
+<%\r
+               }\r
+       }\r
+%>\r
+       /**\r
+        * デフォルトのインスタンスを返す。\r
+        * @param id\r
+        * @return\r
+        */\r
+       public static <%= className %> getDefault(){\r
+<%\r
+       if(enumClass.getDefaultMember()!=null){\r
+%>             return <%= enumClass.getDefaultMember().getConstName() %>;\r
+<%     }else{\r
+%>             return null;\r
+<%     }       %>\r
+       }\r
+\r
+       /**\r
+        * デフォルトのIDを返す。\r
+        * @param id\r
+        * @return\r
+        */\r
+       public static String getDefaultId(){\r
+<%\r
+       if(enumClass.getDefaultMember()!=null){\r
+%>             return <%= enumClass.getDefaultMember().getConstName() %>.getId();\r
+<%     }else{\r
+%>             return "";\r
+<%     }       %>\r
+       }\r
+\r
+<%     for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+%>     /**\r
+        * <%= listName %>インスタンス一覧を返す。\r
+        */\r
+       public static List&lt;<%= className %>&gt; get<%= StringUtils.capitalize(listName) %>List(){\r
+               return <%= listName %>List;\r
+       }\r
+<%     }       %>\r
+       private String id = null;\r
+       private String title = null;\r
+<%     // value_list\r
+       valueList.remove("all");\r
+       for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+               if(listName.equals("int")){\r
+%>     private int intValue = 0;\r
+<%             }else{\r
+%>     private String <%= listName %>Value = null;\r
+<%             }\r
+       }\r
+       // boolean_list\r
+       for(int i=0; i<booleanList.size(); i++){\r
+               String listName = (String)enumClass.getBooleanList().get(i);\r
+%>     private boolean is<%= StringUtils.capitalize(listName) %> = false;\r
+<%     }       %>\r
+       /**\r
+        * コンストラクタ。\r
+        */\r
+       private <%= className %>(\r
+               String id\r
+               ,String title\r
+<%     // value_list\r
+       for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+               if(listName.equals("int")){\r
+%>             ,int intValue\r
+<%             }else{\r
+%>             ,String <%= listName %>Value\r
+<%             }\r
+       }\r
+       // boolean_list\r
+       for(int i=0; i<booleanList.size(); i++){\r
+               String listName = (String)enumClass.getBooleanList().get(i);\r
+%>             ,boolean is<%= StringUtils.capitalize(listName) %>\r
+<%     }\r
+%>     ){\r
+               this.id = id;\r
+               this.title = title;\r
+<%     for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+%>             this.<%= listName %>Value = <%= listName %>Value;\r
+<%     }\r
+       // boolean_list\r
+       for(int i=0; i<booleanList.size(); i++){\r
+               String listName = (String)enumClass.getBooleanList().get(i);\r
+%>             this.is<%= StringUtils.capitalize(listName) %> = is<%= StringUtils.capitalize(listName) %>;\r
+<%     }\r
+%>     }\r
+       public String getId(){\r
+               return id;\r
+       }\r
+       public String getTitle(){\r
+               return title;\r
+       }\r
+       public String getTitleHankana(){\r
+               return JapaneseTextUtil.toHankana(title);\r
+       }\r
+<%     for(int i=0; i<valueList.size(); i++){\r
+               String listName = (String)enumClass.getValueList().get(i);\r
+               if(listName.equals("int")){\r
+%>     public int getInt(){\r
+               return <%= listName %>Value;\r
+       }\r
+<%             }else{\r
+%>     public String get<%= StringUtils.capitalize(listName) %>(){\r
+               return <%= listName %>Value;\r
+       }\r
+<%             }\r
+       }\r
+%>\r
+<%\r
+       // boolean_list\r
+       for(int i=0; i<booleanList.size(); i++){\r
+               String listName = (String)enumClass.getBooleanList().get(i);\r
+%>     public boolean is<%= StringUtils.capitalize(listName) %>(){\r
+               return is<%= StringUtils.capitalize(listName) %>;\r
+       }\r
+<%     }\r
+%>\r
+       /**\r
+        * 同じenumかを比較するメソッド。\r
+        * @see java.lang.Object#equals(java.lang.Object)\r
+        */\r
+       public boolean equals(Object obj) {\r
+               if(this==obj) return true;\r
+               if(obj instanceof <%= className %>){\r
+                       if(id.equals(((<%= className %>)obj).getId())){\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public String toString(){\r
+               return "<%= className %>:"+id;\r
+       }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+\r
+<%--   //public static final String <%= member.getConstName() %>       = "<%= member.getName() %>"; --%>
\ No newline at end of file
diff --git a/lacoder/jsp/domain/message.jsp b/lacoder/jsp/domain/message.jsp
new file mode 100644 (file)
index 0000000..67fb5ef
--- /dev/null
@@ -0,0 +1,62 @@
+<!-- $Id: message.jsp 467 2011-08-17 12:34:30Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Attribute" %>\r
+<%!\r
+       /**\r
+        * 基本方針\r
+        * とりあえずプロバイス用に手っ取り早く。\r
+        * 最終的にはjspをやめてファイルに直接書き出す。\r
+        * これをベースクラスとしてインクリメンタルな開発に耐えられるように。\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+%>\r
+<%\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+%>\r
+<html lang="ja">\r
+<head>\r
+<title>service</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+       /** <%= entity.getClassName() %> */\r
+<%\r
+       for(int i=0; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+               if(!attr.isEditable()){\r
+                       continue;\r
+               }\r
+               if(attr.isSequence()){\r
+                       continue;\r
+               }\r
+               String def = "ERR_NO_"+attr.getConstName();\r
+               String key = def.replaceAll("_", ".").toLowerCase();\r
+%>     public static final String <%= def %>           = "<%= key %>";\r
+<%     }\r
+%>\r
+# <%= entity.getClassName() %>\r
+<%     for(int i=0; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+               if(!attr.isEditable()){\r
+                       continue;\r
+               }\r
+               if(attr.isSequence()){\r
+                       continue;\r
+               }\r
+               String def = "ERR_NO_"+attr.getConstName();\r
+               String key = def.replaceAll("_", ".").toLowerCase();\r
+%><%= key %>=<%= attr.getTitle() %>を入力してください。\r
+<%     }\r
+%>\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/domain/sql.jsp b/lacoder/jsp/domain/sql.jsp
new file mode 100644 (file)
index 0000000..f912872
--- /dev/null
@@ -0,0 +1,146 @@
+<!-- $Id: sql.jsp 474 2011-08-21 10:48:48Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Attribute" %>\r
+<%@ page import="com.lavans.lacoder.db.*" %>\r
+<%!\r
+       /**\r
+        * 基本方針\r
+        * とりあえずプロバイス用に手っ取り早く。\r
+        * 最終的にはjspをやめてファイルに直接書き出す。\r
+        * これをベースクラスとしてインクリメンタルな開発に耐えられるように。\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+       DecimalFormat df = new DecimalFormat("00");\r
+%>\r
+<%\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       Attribute attrId = entity.get(0);\r
+       TypeManager typeMan = entity.getTypeManager();\r
+       String tableName = entity.getTableName();\r
+       boolean isCreateOnly =false;\r
+       if(!StringUtils.isEmpty(request.getParameter("createOnly"))){\r
+//             logger.info("■□□■"+ request.getParameter("createOnly"));\r
+               isCreateOnly = Boolean.parseBoolean(request.getParameter("createOnly"));\r
+       }\r
+//     logger.info("■■■■"+ request.getParameter("createOnly"));\r
+%>\r
+\r
+<%@page import="com.lavans.luz2.commons.StringUtils"%><html lang="ja">\r
+<head>\r
+<title>DDL</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+<% if(!isCreateOnly){ %>DROP TABLE <%= tableName %>;<% } %>\r
+\r
+CREATE TABLE <%= tableName %> (\r
+<%\r
+       logger.info("CREATE TABLE");\r
+       for(int i=0; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+%>     <%= attr.getConstName().toUpperCase() +"        "+ attr.getDbType().toUpperCase() %>,   -- <%= attr.getTitle() %>\r
+<%     }\r
+%>     CONSTRAINT <%= tableName %>_PKEY PRIMARY KEY(\r
+               <%= StringUtils.toUnderscore(entity.getPrimaryKey()).toUpperCase() %>\r
+    ));\r
+\r
+<%\r
+       logger.info("CREATE SEQUENCE");\r
+       for(int i=0; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+               if(attr.isSequence()){\r
+%><%= typeMan.getSequenceSql(entity) %>\r
+<%                     break;\r
+               }\r
+       }\r
+\r
+       if(entity.hasBackup()){\r
+%>\r
+<% if(!isCreateOnly){ %>DROP TABLE <%= tableName %>_BAK;<% } %>\r
+\r
+CREATE TABLE <%= tableName %>_BAK (\r
+       BACKUP_ID <%= typeMan.getSequenceType() %>,\r
+       BACKUP_DELETE_DATETIME <%= typeMan.getDbType("Date") %>,\r
+<%\r
+       logger.info("CREATE BACKUP TABLE");\r
+       for(int i=0; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+%>     <%= attr.getConstName().toUpperCase() +"        "+ attr.getDbType().toUpperCase() %>,   -- <%= attr.getTitle() %>\r
+<%     }\r
+%>     CONSTRAINT <%= tableName %>_BAK_PKEY PRIMARY KEY(\r
+               <%= StringUtils.toUnderscore(entity.getPrimaryKey()).toUpperCase() %>\r
+    ));\r
+<%= typeMan.getSequenceSql(tableName +"_BAK") %>\r
+\r
+<%\r
+       }\r
+       if(!isCreateOnly){\r
+               logger.info("INSERT");\r
+\r
+       for(int j=1; j<31; j++){\r
+%>INSERT INTO <%= tableName %> VALUES(<%\r
+       //logger.info("INSERT");\r
+       String officeName = entity.getName()+df.format(j);\r
+       if(attrId.isSequence()){\r
+               out.print(typeMan.getNextval(attrId));\r
+       }else if(attrId.getJavaType().equals("int")){\r
+//             out.print("1");\r
+               out.print(""+j);\r
+       }else{\r
+               out.print("'"+officeName+"'");\r
+       }\r
+\r
+       for(int i=1; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+               if(attr.getName().equals("delete_flg")){\r
+                       out.print(", false");\r
+               }else if(attr.isEnum()){\r
+                       out.print(", '"+attr.getName()+df.format(j)+"'");\r
+               }else if(attr.getJavaType().equals("int")){\r
+                       out.print(", "+1);\r
+//                     out.print(", "+j);\r
+               }else if(attr.getJavaType().equals("boolean")){\r
+                       out.print(", true");\r
+               }else if(attr.getName().equals("pass")){\r
+                       out.print(", 'test'");\r
+               }else if(attr.getName().equals("tel")){\r
+                       out.print(", '03-1234-5678'");\r
+               }else if(attr.getName().equals("fax")){\r
+                       out.print(", '03-2345-6789'");\r
+               }else if(attr.getName().equals("zip")){\r
+                       out.print(", '123-4567'");\r
+               }else if(attr.getName().equals("url")){\r
+                       out.print(", 'http://www."+ officeName +".com'");\r
+               }else if(attr.getName().contains("mail")){\r
+                       out.print(", 'mail"+ df.format(j)+"@"+officeName+".com'");\r
+               }else if(attr.getName().equals("insert_date")){\r
+                       out.print(", "+ typeMan.getCurrentTime());\r
+               }else if(attr.getName().equals("insert_user")){\r
+                       out.print(", 'SYSTEM'");\r
+               }else if(attr.getName().equals("update_date")){\r
+                       out.print(", null");\r
+               }else if(attr.getName().equals("update_user")){\r
+                       out.print(", null");\r
+               }else if(attr.getJavaType().equals("Date")){\r
+                       out.print(", "+ typeMan.getCurrentTime());\r
+               }else{\r
+                       out.print(", '"+attr.getTitle()+df.format(j)+"'");\r
+               }\r
+       }\r
+%>);\r
+<%             if(typeMan instanceof OracleDialect) { %>/<%    } %>\r
+<%     } // for()\r
+       } // if(!isCreateOnly)%>\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/domain/sqlCopy.jsp b/lacoder/jsp/domain/sqlCopy.jsp
new file mode 100644 (file)
index 0000000..220367c
--- /dev/null
@@ -0,0 +1,78 @@
+<!-- $Id: sql_copy.jsp 853 2009-06-24 19:22:26Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=windows-31j" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Attribute" %>\r
+<%@ page import="com.lavans.lacoder.db.*" %>\r
+<%\r
+       /**\r
+        * \8aî\96{\95û\90j\r
+        * \82Æ\82è\82 \82¦\82¸\83v\83\8d\83o\83C\83X\97p\82É\8eè\82Á\8eæ\82è\91\81\82­\81B\r
+        * \8dÅ\8fI\93I\82É\82Íjsp\82ð\82â\82ß\82Ä\83t\83@\83C\83\8b\82É\92¼\90Ú\8f\91\82«\8fo\82·\81B\r
+        * \82±\82ê\82ð\83x\81[\83X\83N\83\89\83X\82Æ\82µ\82Ä\83C\83\93\83N\83\8a\83\81\83\93\83^\83\8b\82È\8aJ\94­\82É\91Ï\82¦\82ç\82ê\82é\82æ\82¤\82É\81B\r
+        */\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       Attribute attrId = entity.get(0);\r
+       TypeManager typeMan = entity.getTypeManager();\r
+       String tableName = entity.getName().toUpperCase();\r
+       StringBuffer buf = new StringBuffer();\r
+\r
+       for(int i=0; i<entity.size(); i++){\r
+               String str = entity.get(i).getName().toUpperCase();\r
+               if(!str.equals("")){\r
+                       buf.append(", "+str);\r
+               }\r
+       }\r
+       String allCols = buf.substring(2);\r
+\r
+%>\r
+<html lang="ja">\r
+<head>\r
+<title>DDL</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+-- copy\r
+CREATE TABLE <%= tableName %>2 as SELECT * FROM <%= tableName %>;\r
+\r
+-- create\r
+DROP TABLE <%= tableName %>;\r
+\r
+CREATE TABLE <%= tableName %> (\r
+<%\r
+       logger.info("CREATE TABLE");\r
+       for(int i=0; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+%>     <%= attr.getConstName().toUpperCase() +"        "+ attr.getDbType().toUpperCase() %>,   -- <%= attr.getTitle() %>\r
+<%     }\r
+%>     CONSTRAINT <%= tableName %>_PKEY PRIMARY KEY(\r
+               <%= entity.getPrimaryKey().toUpperCase() %>\r
+    ));\r
+<%\r
+       logger.info("CREATE SEQUENCE");\r
+       for(int i=0; i<entity.size(); i++){\r
+               Attribute attr = entity.get(i);\r
+               if(attr.isSequence()){\r
+%><%= typeMan.getSequenceSql(entity) %>\r
+<%             }\r
+       }\r
+%>\r
+--insert\r
+INSERT INTO  <%= tableName %> (\r
+  SELECT <%= allCols %>\r
+  FROM <%= tableName %>2\r
+);\r
+\r
+DROP TABLE <%= tableName %>2;\r
+\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+\r
diff --git a/lacoder/jsp/main/filemake.jsp b/lacoder/jsp/main/filemake.jsp
new file mode 100644 (file)
index 0000000..a8f3c40
--- /dev/null
@@ -0,0 +1,31 @@
+<!-- $Id: filemake.jsp 467 2011-08-17 12:34:30Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="com.lavans.lacoder.main.*" %>\r
+<%\r
+       FileMaker fileMaker = (FileMaker)request.getAttribute("lacoder.fileMaker");\r
+%>\r
+<html lang="ja">\r
+<head>\r
+<title>FileMakaer</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<table border="1">\r
+<tr><td><%= fileMaker.getTarget() %></td></tr>\r
+<tr><td><%= fileMaker.getUrlBase() %></td></tr>\r
+<tr><td><%= fileMaker.getBuf().toString() %></td></tr>\r
+<tr><td>\r
+</td></tr>\r
+</table>\r
+\r
+\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+</html>\r
+\r
diff --git a/lacoder/jsp/main/main.jsp b/lacoder/jsp/main/main.jsp
new file mode 100644 (file)
index 0000000..794c263
--- /dev/null
@@ -0,0 +1,195 @@
+<!-- $Id: main.jsp 474 2011-08-21 10:48:48Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ page import="java.util.*" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Package" %>\r
+<%@ page import="com.lavans.lacoder.action.*" %>\r
+<%@ page import="com.lavans.lacoder.main.*" %>\r
+<%\r
+       List<Package> list =Package.getAllList();\r
+       @SuppressWarnings("unchecked")\r
+       List<String> fileList = (List<String>)request.getAttribute("fileList");\r
+%>\r
+\r
+<html lang="ja">\r
+<head>\r
+<title>オブジェクト一覧</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="<%= request.getContextPath() %>/css/lacoder.css" rel="stylesheet" type="text/css">\r
+<script type="text/javascript">\r
+\r
+function fileMake(url, isWarn){\r
+//     if(isWarn){     alert('上書きロック中'); return false; }\r
+       if(isWarn){\r
+               if(!confirm('既存ファイルを上書きします')){\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       w = window.open(url,"make","status=no,toolbar=no,resizable=yes,scrollbars=yes,height=200,width=1000,top=0");\r
+       w.focus();\r
+}\r
+</script>\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<table border="0" cellspacing='3'>\r
+<tr valign='top'>\r
+<td>\r
+<%\r
+       Target target = Target.getSelectedTarget();\r
+       for(int i=0; i<fileList.size(); i++){\r
+               String filename = fileList.get(i);\r
+%>\r
+<a href="<%= request.getContextPath() %>/main.do?<%= MainAction.CONFIG_FILE %>=<%= filename %>&target=<%= target.getTargetName() %>"><%= filename %></a><br>\r
+<%     }       %>\r
+</td>\r
+\r
+<td>\r
+<table border="1">\r
+  <tr class="title"><td colspan="8">一括作成</td></tr>\r
+  <tr class="">\r
+    <td colspan="8">\r
+      <a href="javascript:fileMake('fileMake.do?type=base&override=true', false)">EntityBase</a>\r
+      <a href="javascript:fileMake('fileMake.do?type=entity', false)">Entity</a>(<a href="javascript:fileMake('fileMake.do?type=entity&override=true', true)">上書</a>)\r
+      <a href="javascript:fileMake('fileMake.do?type=enums&override=true', false)">Enums</a>\r
+      <a href="javascript:fileMake('fileMake.do?type=action', false)">Presentation</a>(<a href="javascript:fileMake('fileMake.do?type=action&override=true', true)">上書</a>)\r
+      <a href="javascript:fileMake('fileMake.do?type=sql&override=true', false)">SQL</a>\r
+  </td>\r
+  </tr>\r
+<%\r
+       for(int i=0; i<list.size(); i++){\r
+               Package pkg = (Package)list.get(i);\r
+%>\r
+<tr class="title"><td colspan="5">\r
+<%= pkg.getSubPackageName() %>\r
+</td></tr>\r
+<%\r
+               for(int j=0; j<pkg.serviceSize(); j++){\r
+                       Service service = pkg.getService(j);\r
+%>\r
+<tr>\r
+<td><%= service.getName() %></td>\r
+<%--\r
+<td><a href="main?cmd=<%=MainController.C_SERVICE_BASE %>&package=<%= pkg.getName() %>&service=<%= service.getName() %>">service_base</a></td>\r
+<td><a href="main?cmd=<%=MainController.C_SERVICE_AP   %>&package=<%= pkg.getName() %>&service=<%= service.getName() %>">service_ap</a></td>\r
+<td><a href="main?cmd=<%=MainController.C_SERVICE_WEB  %>&package=<%= pkg.getName() %>&service=<%= service.getName() %>">service_web</a></td>\r
+<td><a href="main?cmd=<%=MainController.C_SERVICE_REMOTE%>&package=<%= pkg.getName() %>&service=<%= service.getName() %>">service_remote</a></td>\r
+--%>\r
+</tr>\r
+<%\r
+               }\r
+\r
+               for(int j=0; j<pkg.entitySize(); j++){\r
+                       Entity entity = pkg.getEntity(j);\r
+%>\r
+<tr>\r
+<%\r
+                       String entityName = entity.getName();\r
+                       if(entityName.length()>25){\r
+                               entityName = entityName.substring(0,25)+"<br>"+entityName.substring(25);\r
+                       }\r
+                       String param = "package="+ pkg.getName() +"&entity="+entity.getName();\r
+%>\r
+<td rowspan="1" colspan="2" class="entity"><%= entityName %></td>\r
+  <td>\r
+    <a href="Entity.do?<%= param %>">Entity</a><br>\r
+    <a href="EntityBase.do?<%= param %>">EntityBase</a><br>\r
+    <a href="EntityManager.do?<%= param %>">EntityManager</a><br>\r
+    <a href="EntityBak.do?<%= param %>">EntityBak</a><br>\r
+  </td>\r
+  <td>\r
+    <a href="Dao.do?<%= param %>">Dao</a><br>\r
+    <a href="DaoXml.do?<%= param %>">DaoXml</a><br>\r
+    <a href="DaoBaseXml.do?<%= param %>">DaoBaseXml</a><br>\r
+  </td>\r
+  <td>\r
+    <a href="Service.do?<%= param %>">Service</a><br>\r
+    <a href="sql.do?<%= param %>">SQL</a><br>\r
+    <a href="sqlCopy.do?<%= param %>">SQL Copy</a><br>\r
+  </td>\r
+  <%--\r
+  <td><a href="main?cmd=<%=MainController.C_MESSAGE   %>&<%= param %>">Message</a></td>\r
+<!--   <td><a href="main?cmd=<%=MainController.C_DSERVER_XML %>&<%= param %>"><%= MainController.C_DSERVER_XML %></a></td>\r
+-->\r
+--%>\r
+</tr>\r
+\r
+<%-- presen start --%>\r
+<tr><td rowspan="<%= entity.getUserList().size()+1 %>" class="jsp">presen</td></tr>\r
+<%                     for(String role: entity.getUserList()){\r
+                               String paramJsp = param+"&role="+role;\r
+%>\r
+<tr>\r
+  <td><%= role %></td>\r
+  <td>\r
+    <a href="Action.do?<%= paramJsp %>">Action</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=list">一覧jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=read">詳細jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=bakList">BAK一覧jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=bakRead">BAK詳細jsp</a><br>\r
+  </td>\r
+  <td>\r
+    <a href="jsp.do?<%= paramJsp %>&method=createInput">登録jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=createConfirm">登録確認jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=createResult">登録完了jsp</a><br>\r
+  </td>\r
+  <td>\r
+    <a href="jsp.do?<%= paramJsp %>&method=updateInput">編集jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=updateConfirm">編集確認jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=updateResult">編集完了jsp</a><br>\r
+  </td>\r
+  <td>\r
+    <a href="jsp.do?<%= paramJsp %>&method=deleteConfirm">削除確認jsp</a><br>\r
+    <a href="jsp.do?<%= paramJsp %>&method=deleteResult">削除完了jsp</a><br>\r
+  </td>\r
+</tr>\r
+<%                     } %>\r
+</table>\r
+\r
+<table border="1">\r
+<%             }\r
+               for(int j=0; j<pkg.enumSize(); j++){\r
+                       EnumClass enums = pkg.getEnum(j);\r
+%>\r
+<tr>\r
+<td><%= enums.getName() %></td>\r
+<td><a href="Enums.do?package=<%= pkg.getName() %>&enum=<%= enums.getName() %>">enum</a></td>\r
+<%-- <td><a href="main?cmd=<%=MainController.C_ENUM_INT  %>&package=<%= pkg.getName() %>&enum=<%= enum.getName() %>">enum_int</a></td>\r
+--%>\r
+</tr>\r
+<%\r
+               }\r
+       }\r
+%>\r
+\r
+</table>\r
+\r
+</td>\r
+</tr>\r
+</table>\r
+<br>\r
+<a href="main.do?target=null">プロジェクト選択</a><br>\r
+<!-- -------------------------------------------------------------- -->\r
+<%--\r
+       for(int i=0; i<list.size(); i++){\r
+               Package pkg = (Package)list.get(i);\r
+               for(int j=0; j<pkg.entitySize(); j++){\r
+                       Entity entity = pkg.getEntity(j);\r
+               String entityName = entity.getName();\r
+               if(entityName.length()>25){\r
+                       entityName = entityName.substring(0,25)+"<br>"+entityName.substring(25);\r
+               }\r
+%>\r
+       list.add("main?cmd=<%=MainController.C_APImodel    %>&<<%= param %>);\r
+<%             }\r
+       }\r
+--%>\r
+\r
+\r
+<%= debugStr %>\r
+</body>\r
+\r
+</html>
\ No newline at end of file
diff --git a/lacoder/jsp/main/selectTarget.jsp b/lacoder/jsp/main/selectTarget.jsp
new file mode 100644 (file)
index 0000000..c27b32b
--- /dev/null
@@ -0,0 +1,41 @@
+<!-- $Id: selectTarget.jsp 467 2011-08-17 12:34:30Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ page import="java.util.*" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="com.lavans.lacoder.model.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Package" %>\r
+<%@ page import="com.lavans.lacoder.action.*" %>\r
+<%@ page import="com.lavans.lacoder.main.*" %>\r
+<%\r
+       List<Package> list =Package.getAllList();\r
+       @SuppressWarnings("unchecked")\r
+       List<String> targetList = (List<String>)request.getAttribute("targetList");\r
+%>\r
+\r
+<html lang="ja">\r
+<head>\r
+<title>ターゲット一覧</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="<%= request.getContextPath() %>/css/lacoder.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<table border="0" cellspacing='3'>\r
+<tr valign='top'>\r
+<td>\r
+<%\r
+       for(String target: targetList){\r
+%>\r
+<a href="<%= request.getContextPath() %>/main.do?target=<%= target %>"><%= target %></a><br>\r
+<%     }       %>\r
+</td>\r
+\r
+<td>\r
+</td></tr></table>\r
+\r
+\r
+<%= debugStr %>\r
+</body>\r
+\r
+</html>
\ No newline at end of file
diff --git a/lacoder/jsp/presentation/Action.jsp b/lacoder/jsp/presentation/Action.jsp
new file mode 100644 (file)
index 0000000..11ad50c
--- /dev/null
@@ -0,0 +1,265 @@
+<!-- $Id: Action.jsp 481 2011-08-29 01:13:25Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp"\r
+%><%@ page import="java.util.*"\r
+%><%@ page import="java.text.*"\r
+%><%@ page import="com.lavans.lacoder.model.Package"\r
+%><%@ page import="com.lavans.lacoder.model.*"\r
+%><%@page import="com.lavans.luz2.commons.StringUtils"\r
+%><%!\r
+       /**\r
+        * 基本方針\r
+        * とりあえずプロバイス用に手っ取り早く。\r
+        * 最終的にはjspをやめてファイルに直接書き出す。\r
+        * これをベースクラスとしてインクリメンタルな開発に耐えられるように。\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+%><%\r
+Package pkg = (Package)request.getAttribute("lacoder.package");\r
+Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+ActionWriter writer = new ActionWriter(entity);\r
+String className = entity.getClassName();\r
+String classNameCond = entity.getClassName()+"Cond";\r
+String varName = entity.getShortname();\r
+Role role = (Role)request.getAttribute("lacoder.role");\r
+\r
+String jspPath = pkg.getSubPackageName()+"/jsp";\r
+%>\r
+\r
+\r
+<%@page import="com.lavans.lacoder.writer.ActionWriter"%><html lang="ja">\r
+<head>\r
+<title>ソース</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+<LINK href="red.css" rel="stylesheet" type="text/css">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: Action.jsp 481 2011-08-29 01:13:25Z dobashi $\r
+ * created: <%= sdf.format(new Date()) %>\r
+ *\r
+ * This source code is generated by lacoder.\r
+ * @see <%= entity.getClassName() %>Service\r
+ * @see http://www.lavans.com/soft/lacoder/\r
+ */\r
+package <%= pkg.getActionPath(role.getName()) %>;\r
+<%--import java.util.List; --%>\r
+import java.util.Map;\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import com.lavans.luz2.util.BeanManager;\r
+//import com.lavans.luz2.lremote.service.ServiceManager;\r
+import com.lavans.luz2.commons.DaoUtils;\r
+import com.lavans.luz2.controller.ActionSupport;\r
+import <%= pkg.getServiceSubPackagePath() %>.<%= className %>Service;\r
+import <%= pkg.getDomainSubPackagePath() %>.entity.<%= className %>;\r
+<%-- = writer.writeImportsEnum() --%>\r
+import com.lavans.luz2.util.PageInfo;\r
+import com.lavans.luz2.util.Pager;\r
+\r
+/**\r
+ * <%= entity.getClassName() %> action.\r
+ *\r
+ * @author ${user}\r
+ */\r
+\r
+public class <%= className %>Action extends ActionSupport{\r
+<%--   private static final long serialVersionUID = 1L;\r
+--%>   /** logger */\r
+       private static Log logger = LogFactory.getLog(<%= className %>Action.class);\r
+       /** <%= entity.getTitle() %>Service */\r
+       private <%= className %>Service <%= varName %>Service = BeanManager.getBean(<%= className %>Service.class);\r
+\r
+       /** ページ情報 */\r
+//     private PageInfo pageInfo;\r
+       /** 検索結果 */\r
+//     private Pager&lt;<%= className %>&gt; pager;\r
+\r
+<%--\r
+       /**\r
+        * jsp用のパーツ作成\r
+        */\r
+       private void makeUiParts(){\r
+               uiParts.put("title", "<%= entity.getTitle() %>一覧");\r
+<%= writer.writeUiPartsEnum() %>\r
+               pager.setLinkParam(ParameterUtils.toStoreString(cond, "cond."));\r
+       }\r
+ --%>\r
+       /**\r
+        * 詳細\r
+        * @return\r
+        * @throws Exception\r
+        */\r
+       public String read() throws Exception{\r
+               <%= className %>.PK pk = parsePK();\r
+               // コピーを取得\r
+               <%= className %> <%= varName %> = <%= varName %>Service.read(pk);\r
+               // リクエストにセット\r
+               setAttribute("<%= varName %>", <%= varName %>);\r
+\r
+               return "jsp/<%= className %>-read.jsp";\r
+       }\r
+\r
+       /**\r
+        * 一覧\r
+        * @return\r
+        * @throws Exception\r
+        */\r
+<%-- @SuppressWarnings("unchecked")\r
+--%>   public String list() throws Exception{\r
+               // PageInfo\r
+               PageInfo pageInfo = new PageInfo();\r
+               pageInfo.setParameters(getRequest().getParameterMap(), "pageInfo.");\r
+\r
+               // Search data\r
+               Map&lt;String, String[]&gt; cond = DaoUtils.getSearchCond(getRequest().getParameterMap(), "cond.");\r
+               Pager&lt;<%= className %>&gt; pager = <%= varName %>Service.pager(pageInfo, cond);\r
+\r
+               // set to request scope\r
+               setAttribute("cond", cond);\r
+               setAttribute("list", pager);\r
+\r
+               return "jsp/<%= className %>-list.jsp";\r
+       }\r
+\r
+       /**\r
+        * 登録\r
+        * @return\r
+        */\r
+       public String createInput(){\r
+               <%= className %> <%= varName %> = new <%= className %>();\r
+               getRequest().setAttribute("<%= varName %>", <%= varName %>);\r
+               return "jsp/<%= className %>-createInput.jsp";\r
+       }\r
+\r
+       /**\r
+        * 登録完了\r
+        * @return\r
+        */\r
+       public String createResult() throws Exception{\r
+               <%= className %> <%= varName %> = parseEntity();\r
+               Map&lt;String, String&gt; errors = <%= varName %>.validate();\r
+               if(errors.size()&gt;0){\r
+                       addActionErrors(errors.values());\r
+                       setAttribute("<%= varName %>", <%= varName %>);\r
+                       return "jsp/<%= className %>-createInput.jsp";\r
+               }\r
+\r
+               // 登録処理\r
+               try {\r
+                       <%= varName %>Service.create(<%= varName %>);\r
+               } catch (Exception e) {\r
+                       logger.debug("", e);\r
+                       addActionError(e.getMessage());\r
+                       setAttribute("<%= varName %>", <%= varName %>);\r
+                       return "jsp/<%= className %>-createInput.jsp";\r
+               }\r
+\r
+               // 登録成功\r
+<%     if(entity.isSkipResult()){ %>\r
+               // 一覧アクションへ\r
+               setChainAction("<%= className %>!list");\r
+               return null;\r
+<%     }else{ %>\r
+               // 完了画面\r
+               return "jsp/<%= className %>-createResult.jsp";\r
+<%     } %>\r
+       }\r
+\r
+       /**\r
+        * 編集\r
+        * @return\r
+        */\r
+       public String updateInput() throws Exception{\r
+               <%= className %>.PK pk = parsePK();\r
+               // コピーを取得\r
+               <%= className %> <%= varName %> = <%= varName %>Service.read(pk);\r
+               // リクエストにセット\r
+               setAttribute("<%= varName %>", <%= varName %>);\r
+\r
+               return "jsp/<%= className %>-updateInput.jsp";\r
+       }\r
+\r
+       /**\r
+        * 編集完了\r
+        * @return\r
+        */\r
+       public String updateResult() throws Exception{\r
+               <%= className %>.PK pk = parsePK();\r
+               <%= className %> <%= varName %> = <%= varName %>Service.read(pk);\r
+               // 入力したパラメータをセット\r
+               parseEntity(<%= varName %>);\r
+               Map&lt;String, String&gt; errors = <%= varName %>.validate();\r
+               if(errors.size()&gt;0){\r
+                       addActionErrors(errors.values());\r
+                       setAttribute("<%= varName %>", <%= varName %>);\r
+\r
+                       return "jsp/<%= className %>-updateInput.jsp";\r
+               }\r
+\r
+               // 登録処理\r
+               try {\r
+                       <%= varName %>Service.update(<%= varName %>);\r
+               } catch (Exception e) {\r
+                       logger.debug("", e);\r
+                       addActionError(e.getMessage());\r
+                       setAttribute("<%= varName %>", <%= varName %>);\r
+\r
+                       return "jsp/<%= className %>-updateInput.jsp";\r
+               }\r
+\r
+               // 登録成功\r
+               // 一覧アクションへ\r
+               setChainAction("<%= className %>!list");\r
+               return null;\r
+       }\r
+\r
+       /**\r
+        * 削除\r
+        * @return\r
+        */\r
+       public String delete() throws Exception{\r
+               <%= className %>.PK pk = parsePK();\r
+\r
+               <%= varName %>Service.delete(pk);\r
+               setChainAction("<%= className %>!list");\r
+               return null;\r
+       }\r
+\r
+       /**\r
+        * PK情報の読出\r
+        * @return\r
+        */\r
+       @SuppressWarnings("unchecked")\r
+       private <%= className %>.PK parsePK(){\r
+               <%= className %>.PK pk = new <%= className %>().getPK();\r
+               pk.setParameters(getRequest().getParameterMap(),"<%= varName %>.");\r
+               return pk;\r
+       }\r
+\r
+       /**\r
+        * Entity情報の読出。\r
+        * 新規Entity作成。\r
+        * @return\r
+        */\r
+       private <%= className %> parseEntity(){\r
+               return parseEntity(new <%= className %>());\r
+       }\r
+\r
+       /**\r
+        * Entity情報の読出。\r
+        * 既存Entityに情報を上書き。\r
+        * @return\r
+        */\r
+       @SuppressWarnings("unchecked")\r
+       private <%= className %> parseEntity(<%= className %> entity){\r
+               entity.setParameters(getRequest().getParameterMap(),"<%= varName %>.");\r
+               return entity;\r
+       }\r
+}\r
+</pre>\r
+<!-- <%= debugStr %> -->\r
+</body>\r
+</html>\r
diff --git a/lacoder/jsp/presentation/jsp.jsp b/lacoder/jsp/presentation/jsp.jsp
new file mode 100644 (file)
index 0000000..5c5c67d
--- /dev/null
@@ -0,0 +1,32 @@
+<!-- $Id: create_jsp.jsp 130 2009-07-06 21:34:24Z dobashi $ -->\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en"\r
+   "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.text.*" %>\r
+<%@ page import="com.lavans.lacoder.model.Entity" %>\r
+<%@ page import="com.lavans.lacoder.model.Attribute" %>\r
+<%@page import="com.lavans.lacoder.model.Package"%>\r
+<%@page import="com.lavans.lacoder.model.Role"%>\r
+<%@page import="com.lavans.lacoder.writer.JspTemplateEngine"%><html>\r
+<%\r
+/*\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       String className = entity.getClassName();\r
+       Attribute attrId = entity.get(0);\r
+*/\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       Role role = (Role)request.getAttribute("lacoder.role");\r
+JspTemplateEngine writer = new JspTemplateEngine(entity, role);\r
+String method = (String)request.getAttribute("lacoder.method");\r
+%>\r
+<body>\r
+<pre>\r
+<%=writer.writeJsp(method) %>\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+</html>\r
+\r
diff --git a/lacoder/jsp/service/Service.jsp b/lacoder/jsp/service/Service.jsp
new file mode 100644 (file)
index 0000000..af160e2
--- /dev/null
@@ -0,0 +1,130 @@
+<!-- $Id: EntityManager.jsp 405 2011-07-28 21:46:01Z dobashi $ -->\r
+<%@page import="java.util.Date"%>\r
+<%@ page contentType="text/html; charset=UTF-8" %>\r
+<%@ include file="../common/common.jsp" %>\r
+<%@ page import="java.text.*" %>\r
+<%@page import="com.lavans.lacoder.model.Package"%>\r
+<%@ page import="com.lavans.lacoder.model.Entity" %>\r
+<%!\r
+       /**\r
+        */\r
+       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");\r
+%>\r
+<%\r
+       Package pkg = (Package)request.getAttribute("lacoder.package");\r
+       Entity entity = (Entity)request.getAttribute("lacoder.entity");\r
+       String className = entity.getClassName();\r
+       String entityName = entity.getShortname();\r
+%>\r
+<head>\r
+<title>service</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
+</head>\r
+<body text="#000000" leftmargin="10" topmargin="10" marginwidth="10" marginheight="10">\r
+<pre>\r
+/* $Id: EntityManager.jsp 405 2011-07-28 21:46:01Z dobashi $\r
+ * 作成日: <%= new SimpleDateFormat("yyyy-MM-dd").format(new Date()) %>\r
+ *\r
+ */\r
+package <%= pkg.getServiceSubPackagePath() %>;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.sql.SQLException;\r
+import com.lavans.luz2.util.BeanManager;\r
+import com.lavans.luz2.util.PageInfo;\r
+import com.lavans.luz2.util.Pager;\r
+\r
+import <%= pkg.getDomainSubPackagePath() %>.<%= className %>Manager;\r
+import <%= pkg.getDomainSubPackagePath() %>.entity.<%= className %>;\r
+\r
+/**\r
+ * Service for <%= entity.getTitle() %>.\r
+ * @author dobashi\r
+ *\r
+ */\r
+public class <%= className %>Service {\r
+       /** logger */\r
+       private static Log logger = LogFactory.getLog(<%= className %>Service.class);\r
+\r
+       /** EntityManager */\r
+       private <%= className %>Manager <%= entityName %>Manager = BeanManager.getBean(<%= className %>Manager.class);\r
+<%--\r
+       /**\r
+        * コンストラクタ。\r
+        */\r
+       private <%= className %>Service(){\r
+               logger.debug("created.");\r
+       }\r
+ --%>\r
+       /**\r
+        * 初期化処理。\r
+        *\r
+        */\r
+       public void init(){\r
+               logger.info("");\r
+       }\r
+\r
+       /**\r
+        * 更新用クラスを返す。\r
+        * @param datatype\r
+        * @return\r
+        */\r
+       public <%= className %> read(<%= className %>.PK pk) throws SQLException{\r
+               if(pk==null) return null;\r
+\r
+               return <%= entityName %>Manager.get<%= className %>(pk);\r
+       }\r
+\r
+       /**\r
+        * <%= entity.getTitle() %>登録処理。\r
+        */\r
+       public <%= className %> create(<%= className %> <%= entityName %>) throws SQLException{\r
+               return <%= entityName %>Manager.insert(<%= entityName %>);\r
+       }\r
+\r
+       /**\r
+        * <%= entity.getTitle() %>更新処理。\r
+        */\r
+       public <%= className %> update(<%= className %> <%= entityName %>) throws SQLException{\r
+               return <%= entityName %>Manager.update(<%= entityName %>);\r
+       }\r
+\r
+       /**\r
+        * <%= entity.getTitle() %>削除\r
+        * @param <%= entityName %>\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public int delete(<%= className %>.PK pk) throws SQLException{\r
+               return <%= entityName %>Manager.delete(pk);\r
+       }\r
+\r
+       /**\r
+        * 一覧処理。\r
+        * @param searchCondMap\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public List&lt;<%= className %>&gt; list(Map&lt;String,String[]&gt; cond) throws SQLException{\r
+               return <%= entityName %>Manager.list(cond);\r
+       }\r
+\r
+       /**\r
+        * ページング一覧処理。\r
+        * @param pageInfo\r
+        * @param cond\r
+        * @return\r
+        * @throws SQLException\r
+        */\r
+       public Pager&lt;<%= className %>&gt; pager(PageInfo pageInfo, Map&lt;String,String[]&gt; cond) throws SQLException{\r
+               return <%= entityName %>Manager.pager(pageInfo, cond);\r
+       }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
diff --git a/lacoder/sample/templates/createConfirm.tmpl b/lacoder/sample/templates/createConfirm.tmpl
new file mode 100644 (file)
index 0000000..2d8b66e
--- /dev/null
@@ -0,0 +1,39 @@
+<!-- $Id: $ -->\r
+<%@page contentType="text/html; charset=Windows-31J"  pageEncoding="UTF-8"%>\r
+<%@page import="<#entity classNameFull>"%>\r
+<%     <#entity className> <#entity name> = (<#entity className>)request.getAttribute("<#entity name>"); %>\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en" "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<html>\r
+\r
+<head>\r
+  <%@include file="../../common/jsp/include/head.jsp" %>\r
+  <title><#entity title>確認</title>\r
+</head>\r
+\r
+<body>\r
+\r
+<% request.setAttribute("title", "<#entity title>確認"); %>\r
+<%@include file="../../common/jsp/include/header.jsp" %>\r
+\r
+<hr>\r
+<form method="POST">\r
+<table class="input">\r
+<#foreach attr attributeList>\r
+  <tr>\r
+    <th><#attr title></th>\r
+    <td>\r
+      <%= <#entity name>.<#attr getterName> %>\r
+      <input type="hidden" name="<#entity name>.<#attr name>" value="<%= <#entity name>.<#attr getterName>() %>"/><br>\r
+    </td>\r
+  </tr>\r
+</#foreach>\r
+</table>\r
+<input type="submit" name="action:<#entity classname>!createResult"  value="登録" /><br>\r
+</form>\r
+\r
+<!-- end of contents -->\r
+\r
+<!-- footer -->\r
+<%@include file="../../common/jsp/include/footer.jsp" %>\r
+</body>\r
+</html>\r
diff --git a/lacoder/sample/templates/createInput.tmpl b/lacoder/sample/templates/createInput.tmpl
new file mode 100644 (file)
index 0000000..842b09d
--- /dev/null
@@ -0,0 +1,39 @@
+<!-- $Id: $ -->\r
+<%@page contentType="text/html; charset=Windows-31J"  pageEncoding="UTF-8"%>\r
+<%@page import="<#entity classNameFull>"%>\r
+<%     <#entity className> <#entity name> = (<#entity className>)request.getAttribute("<#entity name>"); %>\r
+\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en" "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<html>\r
+\r
+<head>\r
+  <%@include file="../../common/jsp/include/head.jsp" %>\r
+  <title><#entity title>入力</title>\r
+</head>\r
+\r
+<body>\r
+\r
+<% request.setAttribute("title", "<#entity title>入力"); %>\r
+<%@include file="../../common/jsp/include/header.jsp" %>\r
+\r
+<hr>\r
+<form method="POST">\r
+<table class="input">\r
+<#foreach attr attributeList>\r
+  <tr>\r
+    <th><#attr title></th>\r
+    <td>\r
+      <input type="text" name="<#entity name>.<#attr name>" value="<%= <#entity name>.<#attr getterName>()  %>"/><br>\r
+    </td>\r
+  </tr>\r
+</#foreach>\r
+</table>\r
+<input type="submit" name="action:<#entity className>!createResult"  value="登録" /><br>\r
+</form>\r
+\r
+<!-- end of contents -->\r
+\r
+<!-- footer -->\r
+<%@include file="../../common/jsp/include/footer.jsp" %>\r
+</body>\r
+</html>\r
diff --git a/lacoder/sample/templates/createResult.tmpl b/lacoder/sample/templates/createResult.tmpl
new file mode 100644 (file)
index 0000000..96ab72c
--- /dev/null
@@ -0,0 +1,37 @@
+<!-- $Id: $ -->\r
+<%@page contentType="text/html; charset=Windows-31J"  pageEncoding="UTF-8"%>\r
+<%@page import="<#entity classNameFull>"%>\r
+<%     <#entity className> <#entity name> = (<#entity className>)request.getAttribute("<#entity name>"); %>\r
+\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en" "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<html>\r
+\r
+<head>\r
+  <%@include file="../../common/jsp/include/head.jsp" %>\r
+  <title><#entity title>登録完了</title>\r
+</head>\r
+\r
+<body>\r
+\r
+<% request.setAttribute("title", "<#entity title>登録完了"); %>\r
+<%@include file="../../common/jsp/include/header.jsp" %>\r
+\r
+<hr>\r
+下記の内容で登録しました。\r
+<table class="input">\r
+<#foreach attr attributeList>\r
+  <tr>\r
+    <th><#attr title></th>\r
+    <td>\r
+      <%= <#entity name>.<#attr getterName>() %>\r
+    </td>\r
+  </tr>\r
+</#foreach>\r
+</table>\r
+\r
+<!-- end of contents -->\r
+\r
+<!-- footer -->\r
+<%@include file="../../common/jsp/include/footer.jsp" %>\r
+</body>\r
+</html>\r
diff --git a/lacoder/sample/templates/list.tmpl b/lacoder/sample/templates/list.tmpl
new file mode 100644 (file)
index 0000000..25cddbb
--- /dev/null
@@ -0,0 +1,89 @@
+<!-- $Id: $ -->\r
+<%@page contentType="text/html; charset=Windows-31J"  pageEncoding="UTF-8"%>\r
+<%@page import="java.util.List"%>\r
+<%@page import="java.util.Map"%>\r
+<%@page import="org.apache.commons.lang.ObjectUtils"%>\r
+<%@page import="<#entity classNameFull>"%>\r
+<%\r
+       @SuppressWarnings("unchecked")\r
+       List<<#entity className>> list = (List<<#entity className>>)request.getAttribute("list");\r
+       @SuppressWarnings("unchecked")\r
+       Map<String,String[]> cond = (Map<String,String[]>)request.getAttribute("cond");\r
+%>\r
+\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en" "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<html>\r
+\r
+<head>\r
+  <%@include file="../../common/jsp/include/head.jsp" %>\r
+  <title><#entity title>一覧</title>\r
+</head>\r
+\r
+<body>\r
+\r
+<% request.setAttribute("title", "<#entity title>一覧"); %>\r
+<%@include file="../../common/jsp/include/header.jsp" %>\r
+\r
+<!-- --------------------------------------------------------------- -->\r
+<!-- 検索用キーワード -->\r
+<!-- --------------------------------------------------------------- -->\r
+<form method="POST" name="searchForm">\r
+<table class="input">\r
+<#foreach attr except deleteFlg>\r
+  <tr>\r
+    <th><#attr title></th>\r
+    <td>\r
+      <input type="text" name="cond.<#attr name>" value="<%= ObjectUtils.toString(cond.get("<#attr name>")) %>" />\r
+    </td>\r
+  </tr>\r
+</#foreach>\r
+  <tr>\r
+    <th>表示件数</th>\r
+    <td>\r
+      <select name="pageInfo.rows">\r
+        <option value"50">50</option>\r
+        <option value"100">100</option>\r
+        <option value"200">200</option>\r
+      </select>\r
+      <input type="submit" name="action:<#entity className>!list" value="検索" />\r
+      <input type="reset" value="リセット" />\r
+      <input type="button" value="クリア" onclick="clearForm()">\r
+    </td>\r
+  </tr>\r
+</table>\r
+\r
+</form>\r
+<hr>\r
+\r
+<!-- --------------------------------------------------------------- -->\r
+<!-- テーブルタイトル -->\r
+<!-- --------------------------------------------------------------- -->\r
+<%--\r
+ <ft:pager type="guide" /><ft:pager type="link" linkUrl="/<#role>/<#entity className>!list" />\r
+ <ft:pager type="sort" sort="<#attr constName>"><#attr title></ft:pager>\r
+ --%>\r
+<table class="list">\r
+  <tr>\r
+<#foreach attr>\r
+    <th><#attr title></th>\r
+</#foreach>\r
+  </tr>\r
+  <% for(<#entity className> <#entity name>: list){ %>\r
+  <tr>\r
+    <td>\r
+      <a href="<#entity className>!read?<#entity name>Id=<%= <#entity name>.get<#entity className>Id() %>"><%= <#entity name>.get<#entity className>Id() %></a><br>\r
+    </td>\r
+<#foreach attr except pk>\r
+    <td><%= <#entity name>.<#attr getterName>() %></td>\r
+</#foreach>\r
+  </tr>\r
+  <% } %>\r
+</table>\r
+\r
+<!-- end of contents -->\r
+\r
+<!-- footer -->\r
+<%@include file="../../common/jsp/include/footer.jsp" %>\r
+</body>\r
+</html>\r
+\r
diff --git a/lacoder/sample/templates/read.tmpl b/lacoder/sample/templates/read.tmpl
new file mode 100644 (file)
index 0000000..83e993c
--- /dev/null
@@ -0,0 +1,36 @@
+<!-- $Id: $ -->\r
+<%@page contentType="text/html; charset=Windows-31J"  pageEncoding="UTF-8"%>\r
+<%@page import="<#entity classNameFull>"%>\r
+<%     <#entity className> <#entity name> = (<#entity className>)request.getAttribute("<#entity name>"); %>\r
+\r
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en" "http://www.w3.org/tr/rec-html40/loose.dtd">\r
+<html>\r
+\r
+<head>\r
+  <%@include file="../../common/jsp/include/head.jsp" %>\r
+  <title><#entity title>詳細</title>\r
+</head>\r
+\r
+<body>\r
+\r
+<% request.setAttribute("title", "<#entity title>詳細"); %>\r
+<%@include file="../../common/jsp/include/header.jsp" %>\r
+\r
+<hr>\r
+<table class="input">\r
+<#foreach attr attributeList>\r
+  <tr>\r
+    <th><#attr title></th>\r
+    <td>\r
+      <%= <#entity name>.<#attr getterName>() %>\r
+    </td>\r
+  </tr>\r
+</#foreach>\r
+</table>\r
+\r
+<!-- end of contents -->\r
+\r
+<!-- footer -->\r
+<%@include file="../../common/jsp/include/footer.jsp" %>\r
+</body>\r
+</html>\r
diff --git a/lacoder/src/com/lavans/lacoder/action/FileMakeAction.java b/lacoder/src/com/lavans/lacoder/action/FileMakeAction.java
new file mode 100644 (file)
index 0000000..6879ba5
--- /dev/null
@@ -0,0 +1,51 @@
+package com.lavans.lacoder.action;\r
+\r
+import java.util.List;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.apache.struts.action.Action;\r
+import org.apache.struts.action.ActionForm;\r
+import org.apache.struts.action.ActionForward;\r
+import org.apache.struts.action.ActionMapping;\r
+\r
+import com.lavans.lacoder.main.FileMaker;\r
+import com.lavans.lacoder.main.Target;\r
+import com.lavans.luz2.util.Config;\r
+\r
+public class FileMakeAction extends Action {\r
+       private static final Log logger = LogFactory.getLog(FileMakeAction.class);\r
+\r
+       @Override\r
+       public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {\r
+               // 選択されたTargetを取得\r
+               Target target = Target.getSelectedTarget();\r
+               // target未指定なら選択画面へ\r
+               if(target==null){\r
+                       Config configTarget = Config.getInstance("target.xml", true);\r
+                       List<String> targetList = configTarget.getNodeValueList("/lacoder/target");\r
+                       request.setAttribute("targetList", targetList);\r
+                       return mapping.findForward("selectTarget");\r
+               }\r
+\r
+               String filetype = request.getParameter("type");\r
+               boolean isOverride = Boolean.parseBoolean(request.getParameter("override"));\r
+               FileMaker fileMaker = new FileMaker();\r
+               fileMaker.setOverride(isOverride);\r
+\r
+               // 実際のパスを分解して遡る\r
+               logger.debug(request.getRequestURI());\r
+               logger.debug(request.getRequestURL());\r
+               logger.debug(request.getServerName());\r
+               logger.debug(request.getServletPath());\r
+               String url = request.getRequestURL().toString();\r
+               url = url.substring(0, url.lastIndexOf("/")+1);\r
+               fileMaker.makefile(target, filetype, url);\r
+               request.setAttribute("lacoder.fileMaker", fileMaker);\r
+               return mapping.findForward("ok");\r
+       }\r
+\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/action/MainAction.java b/lacoder/src/com/lavans/lacoder/action/MainAction.java
new file mode 100644 (file)
index 0000000..1e5f4de
--- /dev/null
@@ -0,0 +1,73 @@
+package com.lavans.lacoder.action;\r
+\r
+import java.util.List;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.apache.struts.action.Action;\r
+import org.apache.struts.action.ActionForm;\r
+import org.apache.struts.action.ActionForward;\r
+import org.apache.struts.action.ActionMapping;\r
+\r
+import com.lavans.lacoder.main.Target;\r
+import com.lavans.lacoder.main.XMLReader;\r
+import com.lavans.luz2.commons.StringUtils;\r
+import com.lavans.luz2.util.Config;\r
+\r
+public class MainAction extends Action {\r
+       public static final String CONFIG_FILE  ="config_file";\r
+       private static final Log logger = LogFactory.getLog(MainAction.class);\r
+\r
+       @Override\r
+       public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {\r
+               // target選択\r
+               if(request.getParameter("selectTarget")!=null){\r
+                       Target.deselect();\r
+               }\r
+\r
+               // 選択されたTargetを取得\r
+               String targetName = request.getParameter("target");\r
+               Target target = null;\r
+               if(!StringUtils.isEmpty(targetName)){\r
+                       // target指定時\r
+                       if(targetName.equals("null")){\r
+                               target = null;\r
+                       }else{\r
+                               target = Target.select(targetName, getServlet().getServletContext().getRealPath("./"));\r
+                       }\r
+               }else{\r
+                       target = Target.getSelectedTarget();\r
+               }\r
+               // target未指定なら選択画面へ\r
+               if(target==null){\r
+                       Config configTarget = Config.getInstance("target.xml", true);\r
+                       try {\r
+                               List<String> targetList = configTarget.getNodeValueList("/lacoder/target");\r
+                               request.setAttribute("targetList", targetList);\r
+                       } catch (Exception e) {\r
+                               logger.error("target error. Check lacoder/conf/target.xml");\r
+                       }\r
+                       return mapping.findForward("selectTarget");\r
+               }\r
+\r
+               // ファイル一覧の読み込み\r
+               request.setAttribute("fileList", target.getConfList());\r
+\r
+               // ユーザータイプの読込\r
+//             Role.setList(config.getNodeValueList("/lacoder/role"));\r
+\r
+               // 設定ファイルの読込\r
+               String configFile = request.getParameter(CONFIG_FILE);\r
+               if(configFile==null){\r
+                       configFile = "lacoder.xml";\r
+               }\r
+\r
+               XMLReader reader = new XMLReader();\r
+               reader.read(target, configFile);\r
+               return mapping.findForward("ok");\r
+       }\r
+\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/action/ModelAction.java b/lacoder/src/com/lavans/lacoder/action/ModelAction.java
new file mode 100644 (file)
index 0000000..249569d
--- /dev/null
@@ -0,0 +1,38 @@
+package com.lavans.lacoder.action;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.apache.struts.action.Action;\r
+import org.apache.struts.action.ActionForm;\r
+import org.apache.struts.action.ActionForward;\r
+import org.apache.struts.action.ActionMapping;\r
+\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.lacoder.model.EnumClass;\r
+import com.lavans.lacoder.model.Package;\r
+import com.lavans.lacoder.model.Role;\r
+import com.lavans.lacoder.model.Service;\r
+\r
+public class ModelAction extends Action {\r
+       @Override\r
+       public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {\r
+               // パース済みの情報から取得\r
+               Package pkg = Package.getPackage(request.getParameter("package"));\r
+               Entity entity = pkg.getEntity(request.getParameter("entity"));\r
+               EnumClass enums = pkg.getEnum(request.getParameter("enum"));\r
+               Service service = pkg.getService(request.getParameter("service"));\r
+               // パラメータからroleを作成\r
+               Role role = new Role(request.getParameter("role"));\r
+               // パラメータからメソッド名(jsp作成用)を取得\r
+               String method = request.getParameter("method");\r
+               request.setAttribute("lacoder.package",pkg);\r
+               request.setAttribute("lacoder.entity",entity);\r
+               request.setAttribute("lacoder.enum",enums);\r
+               request.setAttribute("lacoder.service",service);\r
+               request.setAttribute("lacoder.role", role);\r
+               request.setAttribute("lacoder.method", method);\r
+               return mapping.findForward("ok");\r
+       }\r
+\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/db/H2Dialect.java b/lacoder/src/com/lavans/lacoder/db/H2Dialect.java
new file mode 100644 (file)
index 0000000..3fa17cd
--- /dev/null
@@ -0,0 +1,105 @@
+/* $Id: PostgresType.java 247 2011-02-01 14:08:35Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.db;\r
+\r
+import java.util.Properties;\r
+\r
+import com.lavans.lacoder.model.Attribute;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class H2Dialect extends TypeManager {\r
+       private static Properties map = new Properties();\r
+       static{\r
+               map.put("int",          "INT");\r
+               map.put("Integer",      "INT");\r
+               map.put("long",         "BIGINT");\r
+               map.put("Long",         "BIGINT");\r
+               // IDENTITYによるSEQの自動生成ではなく自前でわかりやすい名前で用意するのでBIGINT\r
+               map.put("int-sequence",         "BIGINT");\r
+               map.put("Integer-sequence","BIGINT");\r
+               map.put("long-sequence",        "BIGINT");\r
+               map.put("Long-sequence",        "BIGINT");\r
+               map.put("BigDecimal","DECIMAL");\r
+               map.put("String",       "VARCHAR");\r
+               map.put("Date",         "TIMESTAMP");\r
+               map.put("boolean",      "BOOLEAN");\r
+               map.put("byte[]",       "BINARY");\r
+       }\r
+\r
+       /**\r
+        * シーケンスの型を取得。バックアップテーブル用。\r
+        * @return\r
+        */\r
+       @Override\r
+       public String getSequenceType(){\r
+               return "BIGINT";\r
+       }\r
+\r
+       /**\r
+        * javaの型に対応したDBの型を取得。\r
+        * @return\r
+        */\r
+       @Override\r
+       public String getDbType(String javaType){\r
+               return map.getProperty(javaType);\r
+       }\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getJavaType(java.lang.String)\r
+        */\r
+       public String getDbType(Attribute attr) {\r
+               String javaType = attr.getJavaType();\r
+               // シーケンスの場合\r
+               if(attr.isSequence()){\r
+                       javaType += "-sequence";\r
+               }\r
+               String dbType = map.getProperty(javaType);\r
+\r
+               // BigDecimalでprecisionとscaleの指定がある場合\r
+               if(javaType.equals("BigDecimal")){\r
+                       if(attr.getPrecision()!=null && attr.getScale()!=null){\r
+                               dbType +="("+attr.getPrecision()+","+attr.getScale()+")";\r
+                       }else   if(attr.getPrecision()!=null && attr.getScale()==null){\r
+                               dbType +="("+attr.getPrecision()+")";\r
+                       }\r
+                       // scaleのみ指定の場合や指定無しの場合はnumericとだけ宣言する。\r
+               }\r
+\r
+               return dbType;\r
+       }\r
+\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getSequenceType()\r
+        */\r
+//     public String getSequenceType() {\r
+//             return "serial";        // number(10)?\r
+//     }\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getSequenceSql(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
+        */\r
+       public String getSequenceSql(String entity) {\r
+               // sequenceはPKでしか使わないので、"_PK_SEQ"とする。\r
+               String result = "CREATE SEQUENCE "+ entity +"_PK_SEQ;";\r
+               return result;\r
+       }\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getNextval(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
+        */\r
+       public String getNextval(Attribute attr) {\r
+               return "SELECT "+ attr.getEntity().getTableName() +"_PK_SEQ.NEXTVAL";\r
+       }\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getCurrentTime()\r
+        */\r
+       public String getCurrentTime() {\r
+               return "now()";         // "sysdate"\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/db/OracleDialect.java b/lacoder/src/com/lavans/lacoder/db/OracleDialect.java
new file mode 100644 (file)
index 0000000..0ecb8b1
--- /dev/null
@@ -0,0 +1,103 @@
+/* $Id: OracleDialect.java 474 2011-08-21 10:48:48Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.db;\r
+\r
+import java.util.Properties;\r
+\r
+import com.lavans.lacoder.model.Attribute;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class OracleDialect extends TypeManager {\r
+       private static Properties map = new Properties();\r
+       static{\r
+               map.put("int",          "NUMBER(10)");\r
+               map.put("Integer",      "NUMBER(10)");\r
+               map.put("long",         "NUMBER(20)");\r
+               map.put("Long",         "NUMBER(20)");\r
+               map.put("BigDecimal","NUMBER");\r
+               map.put("String",       "VARCHR2");\r
+               map.put("Date",         "DATE");\r
+               map.put("boolean",      "NUMBER(1)");\r
+               map.put("byte[]",       "BLOB");\r
+\r
+\r
+       }\r
+\r
+       /**\r
+        * javaの型に対応したDBの型を取得。\r
+        * @return\r
+        */\r
+       @Override\r
+       public String getDbType(String javaType){\r
+               return map.getProperty(javaType);\r
+       }\r
+\r
+       /**\r
+        * javaの型に対応したDBの型を取得。\r
+        * @return\r
+        */\r
+       public String getDbType(Attribute attr) {\r
+               String javaType = attr.getJavaType();\r
+               String dbType = map.getProperty(attr.getJavaType());\r
+\r
+               // BigDecimalでprecisionとscaleの指定がある場合\r
+               if(javaType.equals("BigDecimal")){\r
+                       if(attr.getPrecision()!=null && attr.getScale()!=null){\r
+                               dbType +="("+attr.getPrecision()+","+attr.getScale()+")";\r
+                       }else   if(attr.getPrecision()!=null && attr.getScale()==null){\r
+                               dbType +="("+attr.getPrecision()+")";\r
+                       }\r
+                       // scaleのみ指定の場合や指定無しの場合はnumericとだけ宣言する。\r
+               }\r
+\r
+               return dbType;\r
+       }\r
+\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getSequenceType()\r
+        */\r
+//     public String getSequenceType() {\r
+//             return "serial";        // number(10)?\r
+//     }\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getSequenceSql(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
+        */\r
+       public String getSequenceSql(String entity) {\r
+               // sequenceはPKでしか使わないので、"PK_SEQ"とする。\r
+               String result =\r
+                 "CREATE SEQUENCE "+ entity +"_PK_SEQ "\r
+                 +"INCREMENT BY 1 START WITH 1 MAXVALUE 99999999 MINVALUE 1 CYCLE NOCACHE ";\r
+               return result;\r
+       }\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getNextval(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
+        */\r
+       public String getNextval(Attribute attr) {\r
+               return (attr.getEntity().getName() +"_PK_SEQ.NEXTVAL").toUpperCase();\r
+       }\r
+\r
+       /**\r
+        * シーケンスの型を取得。バックアップテーブル用。\r
+        * @return\r
+        */\r
+       @Override\r
+       public String getSequenceType(){\r
+               return "NUMBER(20)";\r
+       }\r
+\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getCurrentTime()\r
+        */\r
+       public String getCurrentTime() {\r
+               return "sysdate";               // "sysdate"\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/db/PostgresDialect.java b/lacoder/src/com/lavans/lacoder/db/PostgresDialect.java
new file mode 100644 (file)
index 0000000..1064f67
--- /dev/null
@@ -0,0 +1,116 @@
+/* $Id: PostgresDialect.java 474 2011-08-21 10:48:48Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.db;\r
+\r
+import java.util.Properties;\r
+\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class PostgresDialect extends TypeManager {\r
+       private static Properties map = new Properties();\r
+       static{\r
+               map.put("int",          "int4");\r
+               map.put("Integer",      "int4");\r
+               map.put("long",         "int8");\r
+               map.put("Long",         "int8");\r
+               map.put("int-sequence",         "serial4");\r
+               map.put("Integer-sequence","serial4");\r
+               map.put("long-sequence",        "serial8");\r
+               map.put("Long-sequence",        "serial8");\r
+               map.put("BigDecimal","numeric");\r
+               map.put("String",       "text");\r
+               map.put("Date",         "timestamp");\r
+               map.put("boolean",      "boolean");\r
+               map.put("byte[]",       "bytea");\r
+       }\r
+\r
+       /**\r
+        * javaの型に対応したDBの型を取得。\r
+        * @return\r
+        */\r
+       @Override\r
+       public String getDbType(String javaType){\r
+               return map.getProperty(javaType);\r
+       }\r
+\r
+       /**\r
+        * javaの型に対応したDBの型を取得。\r
+        * @return\r
+        */\r
+       public String getDbType(Attribute attr) {\r
+               String javaType = attr.getJavaType();\r
+               // シーケンスの場合\r
+               if(attr.isSequence()){\r
+                       javaType += "-sequence";\r
+               }\r
+               String dbType = map.getProperty(javaType);\r
+\r
+               // BigDecimalでprecisionとscaleの指定がある場合\r
+               if(javaType.equals("BigDecimal")){\r
+                       if(attr.getPrecision()!=null && attr.getScale()!=null){\r
+                               dbType +="("+attr.getPrecision()+","+attr.getScale()+")";\r
+                       }else   if(attr.getPrecision()!=null && attr.getScale()==null){\r
+                               dbType +="("+attr.getPrecision()+")";\r
+                       }\r
+                       // scaleのみ指定の場合や指定無しの場合はnumericとだけ宣言する。\r
+               }\r
+\r
+               return dbType;\r
+       }\r
+\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getSequenceType()\r
+        */\r
+//     public String getSequenceType() {\r
+//             return "serial";        // number(10)?\r
+//     }\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getSequenceSql(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
+        */\r
+       public String getSequenceSql(String entity) {\r
+               // Postgresはserial指定にすると自動的にシーケンスを作成するので不要。\r
+               /* CREATE SEQUENCE ENTITY_ATTR_SEQ\r
+                 INCREMENT BY 1\r
+                 START WITH 98080\r
+                 MAXVALUE 99999999\r
+                 MINVALUE 1\r
+                 CYCLE\r
+                 NOCACHE\r
+               */\r
+\r
+               return "";\r
+       }\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getNextval(com.lavans.lacoder.main.Entity, com.lavans.lacoder.main.Attribute)\r
+        */\r
+       public String getNextval(Attribute attr) {\r
+               return ("nextval('"+ StringUtils.toUnderscore(attr.getEntity().getName()) +"_"+ StringUtils.toUnderscore(attr.getName()) +"_seq')").toUpperCase();\r
+       }\r
+\r
+       /**\r
+        * シーケンスの型を取得。バックアップテーブル用。\r
+        * @return\r
+        */\r
+       @Override\r
+       public String getSequenceType(){\r
+               return "INT8";\r
+       }\r
+\r
+\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getCurrentTime()\r
+        */\r
+       public String getCurrentTime() {\r
+               return "now()";         // "sysdate"\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/db/TypeManager.java b/lacoder/src/com/lavans/lacoder/db/TypeManager.java
new file mode 100644 (file)
index 0000000..650e48e
--- /dev/null
@@ -0,0 +1,73 @@
+/* $Id: TypeManager.java 474 2011-08-21 10:48:48Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.db;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.lacoder.model.Entity;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public abstract class TypeManager {\r
+       public static final String SEQUENCE="sequence";\r
+       private static Map<String, TypeManager> typeMap = new HashMap<String, TypeManager>();\r
+       static{\r
+               typeMap.put("oracle", new OracleDialect());\r
+               typeMap.put("postgres", new PostgresDialect());\r
+               typeMap.put("h2", new H2Dialect());\r
+       }\r
+       public static TypeManager getInstance(String dbType){\r
+               return typeMap.get(dbType);\r
+       }\r
+\r
+       /**\r
+        * シーケンスの実際の型を取得。\r
+        * @return\r
+        */\r
+//     public String getSequenceType();\r
+\r
+       /**\r
+        * Javaの型からDBの型を取得\r
+        * @param dbType\r
+        * @return\r
+        */\r
+       public abstract String getDbType(String javaType);\r
+       public abstract String getDbType(Attribute attr);\r
+\r
+       /**\r
+        * シーケンス作成用のSQL取得。\r
+        * @param entity\r
+        * @param attr\r
+        * @return\r
+        */\r
+       public String getSequenceSql(Entity entity){\r
+               return getSequenceSql(entity.getTableName().toUpperCase());\r
+       }\r
+       public abstract String getSequenceSql(String entity);\r
+       /**\r
+        * シーケンスの次の値を取得。\r
+        * @param entity\r
+        * @param attr\r
+        * @return\r
+        */\r
+       public abstract String getNextval(Attribute attr);\r
+\r
+       /**\r
+        * シーケンスの型を取得。バックアップテーブル用。\r
+        * @return\r
+        */\r
+       public abstract String getSequenceType();\r
+\r
+       /**\r
+        * 現在時刻を取得。\r
+        * @return\r
+        */\r
+       public abstract String getCurrentTime();\r
+\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/main/FileMaker.java b/lacoder/src/com/lavans/lacoder/main/FileMaker.java
new file mode 100644 (file)
index 0000000..b299561
--- /dev/null
@@ -0,0 +1,422 @@
+/* $Id: FileMaker.java 474 2011-08-21 10:48:48Z dobashi $\r
+ * created: 2005/09/08\r
+ */\r
+package com.lavans.lacoder.main;\r
+\r
+import java.io.BufferedInputStream;\r
+import java.io.BufferedOutputStream;\r
+import java.io.File;\r
+import java.io.FileNotFoundException;\r
+import java.io.FileOutputStream;\r
+import java.io.OutputStream;\r
+import java.io.OutputStreamWriter;\r
+import java.io.PrintWriter;\r
+import java.io.StringWriter;\r
+import java.io.UnsupportedEncodingException;\r
+import java.net.URL;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.commons.lang.StringEscapeUtils;\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.lacoder.model.EnumClass;\r
+import com.lavans.lacoder.model.Package;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+/**\r
+ *\r
+ * @author dobashi\r
+ */\r
+public class FileMaker {\r
+       private static final Log logger = LogFactory.getLog(FileMaker.class);\r
+       private String urlBase = null;\r
+       private String targetPath = null;\r
+       private StringBuffer buf = new StringBuffer();\r
+       /** ファイル存在時に上書きするかどうか */\r
+       private boolean isOverride = false;\r
+\r
+       public void makefile(Target target, String filetype, String urlBase) {\r
+               this.urlBase = urlBase;\r
+               targetPath = target.getPath();\r
+               List<Package> pkgList = Package.getAllList();\r
+\r
+               for (int i = 0; i < pkgList.size(); i++) {\r
+                       // パッケージディレクトリの作成\r
+                       Package pkg = (Package) pkgList.get(i);\r
+                       String dirPath = (targetPath + "/src/" + pkg.getDomainSubPackagePath().replaceAll("\\.", "/"));\r
+                       buf.append("dir:" + dirPath + "<br>");\r
+\r
+                       // ファイル作成\r
+                       if (filetype.equals("enums")) {\r
+                               makeEnum(pkg, dirPath);\r
+                       } else if (filetype.equals("base")) {\r
+                               // entityの場合\r
+                               buf.append("--Base作成:<br>");\r
+                               makeBase(pkg, dirPath);\r
+                       } else if (filetype.equals("entity")) {\r
+                               // entityの場合\r
+                               buf.append("--Entity作成:<br>");\r
+                               makeEntity(pkg, dirPath);\r
+                               makeService(pkg, dirPath);\r
+                       } else if (filetype.equals("action")) {\r
+                               // entityの場合\r
+                               buf.append("--action作成:<br>");\r
+                               makeAction(pkg);\r
+                               makeJsp(pkg);\r
+                       } else if (filetype.equals("sql")) {\r
+                               // sqlの場合enumは飛ばす\r
+                               if(pkg.getDomainSubPackagePath().endsWith("enums")){\r
+                                       continue;\r
+                               }\r
+                               buf.append("--SQL作成:<br>");\r
+                               makeSql(pkg);\r
+                       } else {\r
+                               buf.append("--err:" + filetype);\r
+                       }\r
+\r
+               }\r
+       }\r
+\r
+       private void makeEnum(Package pkg, String dirPath) {\r
+               // enumの場合\r
+               if (pkg.enumSize() > 0) {\r
+                       dirPath = makeDir(dirPath);\r
+               }\r
+               for (int j = 0; j < pkg.enumSize(); j++) {\r
+                       EnumClass enumClass = pkg.getEnum(j);\r
+                       String path = "Enums.do?package=" + pkg.getName() + "&enum=" + enumClass.getName();\r
+                       makeEntity(dirPath + "/" + enumClass.getClassName() + ".java", urlBase + path);\r
+               }\r
+       }\r
+\r
+       private void makeBase(Package pkg, String dirPath) {\r
+               // baseの場合\r
+               if (pkg.entitySize() > 0) {\r
+                       makeDir(dirPath + "/entity/base");\r
+//                     makeDir(dirPath + "/dao/base");\r
+               }\r
+               for (int j = 0; j < pkg.entitySize(); j++) {\r
+                       Entity entity = pkg.getEntity(j);\r
+                       String path;\r
+                       String name = entity.getClassName();\r
+                       path = "EntityBase.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                       makeEntity(dirPath + "/entity/base/" + name + "Base.java", urlBase + path);\r
+                       path = "DaoBaseXml.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                       makeEntity(dirPath + "/dao/" + name + "DaoBase.xml", urlBase + path);\r
+                       // path = "daoBase.do?package="+ pkg.getName() +"&entity="+\r
+                       // entity.getName();\r
+                       // makeEntity(dirPath+"/dao/base/"+name+"DaoBase.java",\r
+                       // urlBase+path);\r
+                       // path = "daoBaseXml.do?package="+ pkg.getName() +"&entity="+\r
+                       // entity.getName();\r
+                       // makeEntity(dirPath+"/dao/base/"+name+"DaoBase.xml",\r
+                       // urlBase+path);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Entity作成\r
+        * @param pkg\r
+        * @param dirPath\r
+        */\r
+       private void makeEntity(Package pkg, String dirPath) {\r
+               // ディレクトリ作成\r
+               if (pkg.entitySize() > 0) {\r
+                       makeDir(dirPath + "/entity");\r
+                       makeDir(dirPath + "/dao");\r
+               }\r
+               for (int j = 0; j < pkg.entitySize(); j++) {\r
+                       Entity entity = pkg.getEntity(j);\r
+                       String path;\r
+                       String name = entity.getClassName();\r
+                       path = "Entity.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                       makeEntity(dirPath + "/entity/" + name + ".java", urlBase + path);\r
+                       path = "Dao.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                       makeEntity(dirPath + "/dao/" + name + "Dao.java", urlBase + path);\r
+                       path = "DaoXml.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                       makeEntity(dirPath + "/dao/" + name + "Dao.xml", urlBase + path);\r
+\r
+                       // for backup\r
+                       if(entity.hasBackup()){\r
+                               path = "EntityBak.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                               makeEntity(dirPath + "/entity/" + name + "Bak.java", urlBase + path);\r
+                       }\r
+}\r
+       }\r
+\r
+       /**\r
+        * サービス、EntityManager\r
+        * @param pkg\r
+        * @param dirPath\r
+        */\r
+       private void makeService(Package pkg, String dirPath) {\r
+               // ディレクトリ作成\r
+               String servicePath = (targetPath + "/src/" + pkg.getServiceSubPackagePath().replaceAll("\\.", "/"));\r
+\r
+               if (pkg.entitySize() > 0) {\r
+                       makeDir(dirPath);\r
+                       makeDir(servicePath);\r
+               }\r
+               // serviceの場合\r
+               for (int j = 0; j < pkg.entitySize(); j++) {\r
+                       Entity entity = pkg.getEntity(j);\r
+                       String path;\r
+                       String name = entity.getClassName();\r
+\r
+                       // サービスの時はdomainをserviceにする\r
+                       path = "Service.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                       makeEntity(servicePath + "/" + name + "Service.java", urlBase + path);\r
+\r
+                       // EntityManager\r
+                       path = "EntityManager.do?package=" + pkg.getName() + "&entity=" + entity.getName();\r
+                       makeEntity(dirPath + "/" + name + "Manager.java", urlBase + path);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * アクション生成\r
+        *\r
+        * @param pkg\r
+        */\r
+       private void makeAction(Package pkg) {\r
+               // jspの場合\r
+               for (int j = 0; j < pkg.entitySize(); j++) {\r
+                       Entity entity = pkg.getEntity(j);\r
+                       // presentation パス\r
+                       String path, filename;\r
+                       for (String role : entity.getUserList()) {\r
+                               String dirPath = targetPath + "/src/" + pkg.getActionPath(role).replaceAll("\\.", "/");\r
+                               makeDir(dirPath);\r
+                               // Action取得\r
+                               path = "Action.do?package=" + pkg.getName() + "&entity=" + entity.getName() + "&role=" + role;\r
+                               filename = dirPath + "/" + entity.getClassName() + "Action.java";\r
+                               logger.debug(filename + "\n" + urlBase + path);\r
+                               makeEntity(filename, urlBase + path);\r
+                       }\r
+               }\r
+       }\r
+\r
+       private static List<String> methodList;\r
+       static {\r
+               methodList = new ArrayList<String>();\r
+               methodList.add("list");\r
+               methodList.add("read");\r
+               methodList.add("createInput");\r
+               methodList.add("createConfirm");\r
+               methodList.add("createResult");\r
+               methodList.add("updateInput");\r
+               methodList.add("updateConfirm");\r
+               methodList.add("updateResult");\r
+               methodList.add("logicalDeleteConfirm");\r
+               methodList.add("logicalDeleteResult");\r
+               methodList.add("deleteConfirm");\r
+               methodList.add("deleteResult");\r
+               methodList.add("bakList");\r
+               methodList.add("bakRead");\r
+       }\r
+\r
+       private void makeJsp(Package pkg) {\r
+               // jspの場合\r
+               for (int j = 0; j < pkg.entitySize(); j++) {\r
+                       Entity entity = pkg.getEntity(j);\r
+                       // presentation パス\r
+                       String path, filename;\r
+                       for (String role : entity.getUserList()) {\r
+                               String dirPath = targetPath + "/src/" + pkg.getJspPath(role).replaceAll("\\.", "/");\r
+                               makeDir(dirPath);\r
+                               String filenameBase = StringUtils.capitalize(StringUtils.toCamelCase(entity.getName()));\r
+                               // 一覧\r
+                               String pathBase = "jsp.do?package=" + pkg.getName() + "&entity=" + entity.getName() + "&role=" + role;\r
+                               for (String method : methodList) {\r
+                                       if(entity.isSkipConfirm() && method.endsWith("Confirm")) continue;\r
+                                       if(entity.isSkipResult() && method.endsWith("Result")) continue;\r
+                                       if(!entity.hasBackup() && method.startsWith("bak")) continue;\r
+                                       path = pathBase + "&method=" + method;\r
+                                       filename = dirPath + "/" + filenameBase + "-" + method + ".jsp";\r
+                                       logger.debug(filename + "\n" + urlBase + path);\r
+                                       makeEntity(filename, urlBase + path);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * ディレクトリ作成\r
+        * @param dirPath\r
+        * @return\r
+        */\r
+       private String makeDir(String dirPath) {\r
+               buf.append("mkdir:" + dirPath + "<br>");\r
+               File file = new File(dirPath);\r
+               if (!file.mkdirs()) {\r
+                       // すでに作成済みの場合でもfalse\r
+                       logger.debug(file.getPath() + " create false");\r
+               }\r
+               return dirPath;\r
+       }\r
+\r
+       /**\r
+        * Entity(dao,entity)の作成\r
+        *\r
+        * @param pkg\r
+        * @param filetype\r
+        * @param urlBase\r
+        * @param dirPath\r
+        */\r
+       private void makeEntity(String filename, String uri) {\r
+               buf.append("makeEntity:" + filename + "<br>");\r
+\r
+               // ファイル存在チェック\r
+               if (!isOverride && new File(filename).exists()) {\r
+                       buf.append("ファイルが存在するため作成しない<br>");\r
+                       return;\r
+               }\r
+\r
+               URL url;\r
+               try {\r
+                       url = new URL(uri);\r
+                       logger.info(url.getContent().toString());\r
+                       BufferedInputStream is = new BufferedInputStream(url.openStream());\r
+\r
+                       // 1000バイトずつ読み込んでみる\r
+                       int length = 1000;\r
+                       byte[] predata = new byte[0];\r
+                       byte[] data = null;\r
+                       byte[] buf = new byte[length];\r
+                       // StringBuffer sbuf = new StringBuffer();\r
+                       while (true) {\r
+                               int readLength = is.read(buf);\r
+                               if (readLength < 0) {\r
+                                       break;\r
+                               }\r
+                               // log.debug(new String(buf, "JISAutoDetect"));\r
+                               data = new byte[predata.length + readLength];\r
+                               System.arraycopy(predata, 0, data, 0, predata.length);\r
+                               System.arraycopy(buf, 0, data, predata.length, readLength);\r
+                               predata = new byte[data.length];\r
+                               System.arraycopy(data, 0, predata, 0, data.length);\r
+\r
+                       }\r
+                       String sourceCode = new String(data, "UTF-8");\r
+                       sourceCode = StringEscapeUtils.unescapeHtml(sourceCode);\r
+                       int pre = sourceCode.indexOf("<pre>") + 7;\r
+                       int presla = sourceCode.indexOf("</pre>");\r
+                       sourceCode = sourceCode.substring(pre, presla);\r
+                       PrintWriter out = createWriter(filename, false);\r
+                       out.print(new String(sourceCode));\r
+                       out.close();\r
+                       // url.get\r
+               } catch (Exception e) {\r
+                       logger.error(e);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * SQL作成\r
+        * @param pkg\r
+        */\r
+       private void makeSql(Package pkg) {\r
+               StringBuilder builder = new StringBuilder();\r
+               for (int j = 0; j < pkg.entitySize(); j++) {\r
+                       Entity entity = pkg.getEntity(j);\r
+                       String path = "sql.do?package=" + pkg.getName() + "&entity=" + entity.getName() +"&createOnly=true";\r
+                       builder.append(getSql(urlBase + path));//.append("\n");\r
+               }\r
+               PrintWriter out = createWriter(targetPath + "/sql/"+ pkg.getSubPackageName() +".sql", false);\r
+               out.print(builder.toString());\r
+               out.close();\r
+       }\r
+\r
+       /**\r
+        * Entity(dao,entity)の作成\r
+        *\r
+        * @param pkg\r
+        * @param filetype\r
+        * @param urlBase\r
+        * @param dirPath\r
+        */\r
+       private String getSql(String uri) {\r
+               buf.append("getSql:" + uri + "<br>");\r
+\r
+               URL url;\r
+               StringWriter out = null;\r
+               try {\r
+                       url = new URL(uri);\r
+                       logger.info(url.getContent().toString());\r
+                       BufferedInputStream is = new BufferedInputStream(url.openStream());\r
+\r
+                       out = new StringWriter();\r
+                       // 1000バイトずつ読み込んでみる\r
+                       int length = 1000;\r
+                       byte[] predata = new byte[0];\r
+                       byte[] data = null;\r
+                       byte[] buf = new byte[length];\r
+                       // StringBuffer sbuf = new StringBuffer();\r
+                       while (true) {\r
+                               int readLength = is.read(buf);\r
+                               if (readLength < 0) {\r
+                                       break;\r
+                               }\r
+                               // log.debug(new String(buf, "JISAutoDetect"));\r
+                               data = new byte[predata.length + readLength];\r
+                               System.arraycopy(predata, 0, data, 0, predata.length);\r
+                               System.arraycopy(buf, 0, data, predata.length, readLength);\r
+                               predata = new byte[data.length];\r
+                               System.arraycopy(data, 0, predata, 0, data.length);\r
+\r
+                       }\r
+                       String sourceCode = new String(data, "UTF-8");\r
+                       sourceCode = StringEscapeUtils.unescapeHtml(sourceCode);\r
+                       int pre = sourceCode.indexOf("<pre>") + 7;\r
+                       int presla = sourceCode.indexOf("</pre>");\r
+                       sourceCode = sourceCode.substring(pre, presla);\r
+                       out.write(new String(sourceCode));\r
+                       out.close();\r
+                       // url.get\r
+               } catch (Exception e) {\r
+                       logger.error(e);\r
+               }\r
+\r
+               return out.toString();\r
+       }\r
+       /**\r
+        * ログ出力先の指定\r
+        **/\r
+       private PrintWriter createWriter(String logfile, boolean append) {\r
+               PrintWriter out = null;\r
+               try {\r
+                       OutputStream os = new BufferedOutputStream(new FileOutputStream(logfile, append));\r
+                       out = new PrintWriter(new OutputStreamWriter(os, "UTF-8"), true);\r
+               } catch (FileNotFoundException e) {\r
+                       System.err.println("Can't open logfile.[" + logfile + "] log is set to [System.out]");\r
+                       System.err.println(e.getMessage());\r
+                       out = new PrintWriter(System.out);\r
+               } catch (UnsupportedEncodingException e) {\r
+                       System.err.print(e.getMessage());\r
+               }\r
+               return out;\r
+       }\r
+\r
+       public StringBuffer getBuf() {\r
+               return buf;\r
+       }\r
+\r
+       public String getTarget() {\r
+               return targetPath;\r
+       }\r
+\r
+       public String getUrlBase() {\r
+               return urlBase;\r
+       }\r
+\r
+       public boolean isOverride() {\r
+               return isOverride;\r
+       }\r
+\r
+       public void setOverride(boolean isOverride) {\r
+               this.isOverride = isOverride;\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/main/JavaType.java b/lacoder/src/com/lavans/lacoder/main/JavaType.java
new file mode 100644 (file)
index 0000000..de96ba3
--- /dev/null
@@ -0,0 +1,53 @@
+/* $Id: JavaType.java 129 2009-07-05 12:49:47Z dobashi $\r
+ * create: 2005/01/04\r
+ * (c)2005 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.main;\r
+\r
+import java.util.Properties;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class JavaType{\r
+       private static Properties jdbcMap = new Properties();\r
+       static{\r
+               jdbcMap.put("int",              "Int");\r
+               jdbcMap.put("Integer",  "Int");\r
+               jdbcMap.put("double",   "Double");\r
+               jdbcMap.put("long",             "Long");\r
+               jdbcMap.put("Long",             "Long");\r
+               jdbcMap.put("String",   "String");\r
+               jdbcMap.put("Date",             "Timestamp");\r
+               jdbcMap.put("boolean",  "Boolean");\r
+               jdbcMap.put("BigDecimal",       "BigDecimal");\r
+               jdbcMap.put("byte[]",   "Bytes");\r
+               //jdbcMap.put("byte[]", "Blob");\r
+\r
+       }\r
+       /* (非 Javadoc)\r
+        * @see com.lavans.lacoder.main.TypeManager#getJavaType(java.lang.String)\r
+        */\r
+       public static String getJdbcMethodName(String type) {\r
+               return jdbcMap.getProperty(type);\r
+       }\r
+\r
+//     private static Properties wrapperMap = new Properties();\r
+//     static{\r
+//             wrapperMap.put("int",   "Integer");\r
+//             wrapperMap.put("long",  "Long");\r
+//             wrapperMap.put("double","Double");\r
+//             wrapperMap.put("float","Float");\r
+//             wrapperMap.put("boolean","Boolean");\r
+//     }\r
+//\r
+//\r
+//     /* (非 Javadoc)\r
+//      * @see com.lavans.lacoder.main.TypeManager#getJavaType(java.lang.String)\r
+//      */\r
+//     public static String getWrapperName(String type) {\r
+//             return wrapperMap.getProperty(type);\r
+//     }\r
+\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/main/Target.java b/lacoder/src/com/lavans/lacoder/main/Target.java
new file mode 100644 (file)
index 0000000..66f193a
--- /dev/null
@@ -0,0 +1,73 @@
+package com.lavans.lacoder.main;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import com.lavans.lacoder.action.MainAction;\r
+import com.lavans.luz2.util.Config;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+public class Target {\r
+       private static final Log logger = LogFactory.getLog(Target.class);\r
+\r
+       private static Target instance = null;\r
+       public static Target select(String targetName, String realPath){\r
+               logger.debug("targetName="+ targetName +",realPath="+realPath);\r
+               \r
+               instance = new Target();\r
+               instance.targetName = targetName;\r
+               // ファイル名指定の場合はターゲットとなるプロジェクトのlacoderフォルダを参照\r
+               String pathes[] = realPath.split(File.separator);\r
+               //String pathes[] = realPath.split("\\\\");\r
+               logger.debug(StringUtils.join(pathes, " --- "));\r
+\r
+               instance.path = StringUtils.join(Arrays.copyOf(pathes, pathes.length-7),"/")+"/"+targetName;\r
+               return instance;\r
+       }\r
+\r
+       public static Target getSelectedTarget(){\r
+               return instance;\r
+       }\r
+       public static boolean isSelected(){\r
+               return instance!=null;\r
+       }\r
+       public static void deselect(){\r
+               instance = null;\r
+       }\r
+       private String targetName;\r
+       private String path;\r
+       public String getTargetName() {\r
+               return targetName;\r
+       }\r
+       public String getPath() {\r
+               return path;\r
+       }\r
+\r
+       public String getConfPath() {\r
+               return path+"/conf/lacoder/";\r
+       }\r
+\r
+       public String getTemplatePath() {\r
+               return path+"/conf/lacoder/templates/";\r
+       }\r
+\r
+       public Config getConfig(String fileName){\r
+               return Config.getInstance(getConfPath()+fileName, true);\r
+       }\r
+       public List<String> getConfList(){\r
+               File dir = new File(getConfPath());\r
+               File[] confFiles = dir.listFiles();\r
+               List<String> list = new ArrayList<String>();\r
+               for(File file: confFiles){\r
+                       if(file.getName().endsWith(".xml") && !file.getName().equals("lacoder.xml")){\r
+                               list.add(file.getName());\r
+                       }\r
+               }\r
+               return list;\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/main/XMLReader.java b/lacoder/src/com/lavans/lacoder/main/XMLReader.java
new file mode 100644 (file)
index 0000000..c66510e
--- /dev/null
@@ -0,0 +1,357 @@
+/* $Id: XMLReader.java 471 2011-08-19 13:15:36Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.main;\r
+\r
+import java.io.UnsupportedEncodingException;\r
+import java.net.URLDecoder;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+\r
+import javax.xml.xpath.XPathExpressionException;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.w3c.dom.Element;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+\r
+import com.lavans.lacoder.db.PostgresDialect;\r
+import com.lavans.lacoder.db.TypeManager;\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.lacoder.model.EnumClass;\r
+import com.lavans.lacoder.model.EnumMember;\r
+import com.lavans.lacoder.model.Package;\r
+import com.lavans.lacoder.model.Service;\r
+import com.lavans.luz2.util.Config;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class XMLReader {\r
+       private static Log logger = LogFactory.getLog(XMLReader.class);\r
+       private Config lacoderConfig = null;\r
+\r
+//     public void read() {\r
+//             read("lacoder.xml");\r
+//     }\r
+\r
+       /**\r
+        * 設定ファイル読み込み\r
+        * @param filename\r
+        */\r
+       public void read(Target target, String filename) {\r
+               Package.getAllList().clear();\r
+\r
+               lacoderConfig = target.getConfig("lacoder.xml");\r
+\r
+               String fqdn = null;\r
+               String project = null;\r
+               try {\r
+                       fqdn = lacoderConfig.getNodeValue("/lacoder/fqdn");\r
+                       project = lacoderConfig.getNodeValue("/lacoder/project");\r
+               } catch (XPathExpressionException e) {\r
+                       // xpath式が固定なのでここにくることは無い\r
+                       logger.error(null,e);\r
+               }\r
+\r
+               Element root = target.getConfig(filename).getRoot();\r
+\r
+               NodeList nodeList = root.getChildNodes();\r
+               for (int i = 0; i < nodeList.getLength(); i++) {\r
+                       Node item = nodeList.item(i);\r
+                       //                      System.out.println(item.getNodeName() +":"+ item.getNodeType());\r
+\r
+                       if ((item.getNodeType() == Node.TEXT_NODE)\r
+                                       || (item.getNodeType() == Node.COMMENT_NODE)) {\r
+                               continue;\r
+                       }\r
+                       Element ele = (Element) item;\r
+                       //                      System.out.println(ele.getAttribute("name")\r
+                       // +":"+ele.getAttribute("value"));\r
+                       if (ele.getNodeName().equals("package")) {\r
+                               Package.addPackage(readPackage(fqdn,project,ele));\r
+                       }\r
+               }\r
+       }\r
+\r
+       private Package readPackage(String domain, String project, Element pkgEle) {\r
+               Package pkg = new Package();\r
+               pkg.setName(domain, project, pkgEle.getAttribute("name"));\r
+\r
+               // テーブル取得開始 -------------------------------\r
+               NodeList tableList = pkgEle.getChildNodes();\r
+               for (int i = 0; i < tableList.getLength(); i++) {\r
+                       Node item = tableList.item(i);\r
+                       //                      System.out.println(item.getNodeName() +":"+ item.getNodeType());\r
+\r
+                       if ((item.getNodeType() == Node.TEXT_NODE)\r
+                                       || (item.getNodeType() == Node.COMMENT_NODE)) {\r
+                               continue;\r
+                       }\r
+\r
+                       Element ele = (Element) item;\r
+                       if (ele.getNodeName().equals("entity")) {\r
+                               pkg.addEntity(readEntity(ele));\r
+                       }else if (ele.getNodeName().equals("enum")) {\r
+                               pkg.addEnum(readEnum(ele));\r
+                       }else if (ele.getNodeName().equals("service")) {\r
+                               pkg.addService(readService(ele));\r
+                       }\r
+\r
+               }\r
+               return pkg;\r
+\r
+       }\r
+\r
+       /**\r
+        * エンティティの読み出し\r
+        * @param entityEle\r
+        * @return\r
+        */\r
+       private Entity readEntity(Element entityEle) {\r
+               Entity entity = new Entity();\r
+\r
+               // DBTypeの読込\r
+               TypeManager typeManager = null;\r
+               String dbType=null;\r
+               try {\r
+                       dbType = lacoderConfig.getNodeValue("database");\r
+               } catch (XPathExpressionException e) {\r
+               }\r
+               typeManager = TypeManager.getInstance(dbType);\r
+               if(typeManager == null){\r
+                       // デフォルトはpostgreSQL\r
+                       logger.info("db_type error. use postgresType.");\r
+                       typeManager = new PostgresDialect();\r
+               }\r
+               entity.setTypeManager(typeManager);\r
+\r
+               // デフォルト設定 skip\r
+               try {\r
+                       entity.setSkipConfirm(          Boolean.parseBoolean(lacoderConfig.getNodeValue("defaultValue/skipConfirm")));\r
+                       entity.setSkipDeleteConfirm(Boolean.parseBoolean(lacoderConfig.getNodeValue("defaultValue/skipDeleteConfirm")));\r
+                       entity.setSkipResult(           Boolean.parseBoolean(lacoderConfig.getNodeValue("defaultValue/skipResult")));\r
+                       entity.setSkipDeleteResult(     Boolean.parseBoolean(lacoderConfig.getNodeValue("defaultValue/skipDeleteResult")));\r
+               } catch (Exception e) {}\r
+\r
+               // 個別に上書き skip\r
+               if(!StringUtils.isEmpty(entityEle.getAttribute("skipConfirm"))){\r
+                       entity.setSkipConfirm(          Boolean.parseBoolean(entityEle.getAttribute("skipConfirm")));\r
+               }\r
+               if(!StringUtils.isEmpty(entityEle.getAttribute("skipDeleteConfirm"))){\r
+                       entity.setSkipDeleteConfirm(Boolean.parseBoolean(entityEle.getAttribute("skipDeleteConfirm")));\r
+               }\r
+               if(!StringUtils.isEmpty(entityEle.getAttribute("skipResult"))){\r
+                       entity.setSkipResult(           Boolean.parseBoolean(entityEle.getAttribute("skipResult")));\r
+               }\r
+               if(!StringUtils.isEmpty(entityEle.getAttribute("skipDeleteResult"))){\r
+                       entity.setSkipDeleteResult(     Boolean.parseBoolean(entityEle.getAttribute("skipDeleteResult")));\r
+               }\r
+\r
+               // 基本情報\r
+               entity.setName(entityEle.getAttribute("name"));\r
+               entity.setTitle(entityEle.getAttribute("title"));\r
+               String shortName = entityEle.getAttribute("shortname");\r
+               if(!shortName.equals("")){\r
+                       entity.setShortname(shortName);\r
+               }else{\r
+                       entity.setShortname(entityEle.getAttribute("name"));\r
+               }\r
+               entity.setCached(Boolean.parseBoolean(entityEle.getAttribute("cache")));\r
+               entity.setUser(Boolean.parseBoolean(entityEle.getAttribute("user")));\r
+               if(entityEle.getAttribute("primaryKey")!=null){\r
+                       entity.setPrimaryKey(entityEle.getAttribute("primaryKey"));\r
+               }\r
+\r
+               // プライマリーキー\r
+               List<String> primaryKeyStrList = new ArrayList<String>(Arrays.asList(StringUtils.splitTrim(entity.getPrimaryKey(),",")));\r
+\r
+               // 編集可能ユーザー "member","admin"など\r
+               String userStr = entityEle.getAttribute("editRole");\r
+               String users[] = userStr.split(",");\r
+               for(int i=0; i<users.length; i++){\r
+                       if(!StringUtils.isEmpty(users[i].trim())){\r
+                               entity.getUserList().add(users[i].trim());\r
+                       }\r
+               }\r
+\r
+               // バックアップをとるか\r
+               entity.setHasBackup(Boolean.parseBoolean(entityEle.getAttribute("backup")));\r
+\r
+               // フィールド取得開始 -------------------------------\r
+               NodeList nodeList = entityEle.getChildNodes();\r
+               for (int i = 0; i < nodeList.getLength(); i++) {\r
+                       Node item = nodeList.item(i);\r
+                       //                              System.out.println(item.getNodeName() +":"+ item.getNodeType());\r
+\r
+                       if ((item.getNodeType() == Node.TEXT_NODE)\r
+                                       || (item.getNodeType() == Node.COMMENT_NODE)) {\r
+                               continue;\r
+                       }\r
+\r
+                       Element ele = (Element) item;\r
+                       Attribute attr = new Attribute();\r
+                       attr.setEntity(entity);\r
+                       attr.setName(ele.getNodeName());\r
+                       // プライマリーキーの設定\r
+                       if(primaryKeyStrList.contains(ele.getNodeName())){\r
+                               attr.setPrimaryKey(true);\r
+                       }\r
+                       attr.setTitle(ele.getAttribute("title"));\r
+                       // type属性\r
+                       if(!ele.getAttribute("dbType").equals("")){\r
+                               attr.setDbType(ele.getAttribute("dbType"));\r
+                       }\r
+                       if(!ele.getAttribute("javaType").equals("")){\r
+                               attr.setJavaType(ele.getAttribute("javaType"));\r
+                       }\r
+                       attr.setClassName(ele.getAttribute("class"));\r
+//                     attr.setClassAttrName(ele.getAttribute("class_attr"));\r
+                       if(ele.getAttribute("sequence").equals("true")){\r
+                               attr.setSequence(true);\r
+                       }\r
+                       if(ele.getAttribute("enum").equals("true")){\r
+                               attr.setEnum(true);\r
+                       }\r
+\r
+                       // 日付型なら入力フォーマットの指定。未指定ならデフォルト"yyyy/MM/dd"。\r
+//                     logger.debug(attr.getName());\r
+                       String javaType = attr.getJavaType();\r
+                       if(javaType == null){\r
+                               logger.info("xmlファイルのtype設定を見直してください。"+ ele.getNodeName()+":"+ ele.getAttribute("javaType"));\r
+                       }\r
+                       if(javaType.equals("Date")){\r
+                               if(!ele.getAttribute("format").equals("")){\r
+                                       attr.setDateFormat(ele.getAttribute("format"));\r
+                               }\r
+                       }\r
+\r
+                       // NOT NULL指定\r
+                       // 設定が存在しない場合(default)はfalse\r
+                       try{ attr.setNullable(Boolean.parseBoolean(ele.getAttribute("nullable"))); }catch (Exception e) {}\r
+                       // constraint\r
+                       // defaultはnull\r
+                       try{ attr.setMax(Long.parseLong(ele.getAttribute("max"))); }catch (Exception e) {}\r
+                       try{ attr.setMin(Long.parseLong(ele.getAttribute("min"))); }catch (Exception e) {}\r
+                       try{ attr.setPrecision(Integer.parseInt(ele.getAttribute("precision"))); }catch (Exception e) {}\r
+                       try{ attr.setScale(Integer.parseInt(ele.getAttribute("scale"))); }catch (Exception e) {}\r
+\r
+                       // listの取得\r
+                       if(!ele.getAttribute("list").equals("")){\r
+                               Boolean isList = false;\r
+                               try {\r
+                                       isList = Boolean.parseBoolean(ele.getAttribute("list"));\r
+                               } catch (Exception e) {\r
+                               }\r
+                               if(isList){\r
+                                       attr.setList(true);\r
+                                       entity.setHasList(true);\r
+                               }\r
+                       }\r
+\r
+                       // Blobを持っているかどうか\r
+                       if(attr.getJavaType().equals("byte[]")){\r
+                               entity.setHasBlob(true);\r
+                       }\r
+\r
+//                     if(attr.getName().equals("insertDatetime")){\r
+//                             entity.setHasInsertDatetime(true);\r
+//                     }else if(attr.getName().equals("updatDatetime")){\r
+//                             entity.setHasUpdateDatetime(true);\r
+//                     }\r
+\r
+                       entity.add(attr);\r
+               }\r
+\r
+               return entity;\r
+       }\r
+\r
+       private EnumClass readEnum(Element enumEle) {\r
+               EnumClass enumClass = new EnumClass();\r
+               enumClass.setName(enumEle.getAttribute("name"));\r
+               enumClass.setTitle(enumEle.getAttribute("title"));\r
+               // valueListのセット\r
+               if(enumEle.getAttribute("value_list")!=""){\r
+                   enumClass.setValueList(enumEle.getAttribute("value_list"));\r
+               }\r
+               // booleanListのセット\r
+               if(enumEle.getAttribute("boolean_list")!=""){\r
+                   enumClass.setBooleanList(enumEle.getAttribute("boolean_list"));\r
+               }\r
+\r
+               // フィールド取得開始 -------------------------------\r
+               NodeList nodeList = enumEle.getChildNodes();\r
+               for (int i = 0; i < nodeList.getLength(); i++) {\r
+                       Node item = nodeList.item(i);\r
+                       //System.out.println(item.getNodeName() +":"+ item.getNodeType());\r
+\r
+                       if ((item.getNodeType() == Node.TEXT_NODE)\r
+                                       || (item.getNodeType() == Node.COMMENT_NODE)) {\r
+                               continue;\r
+                       }\r
+\r
+                       Element ele = (Element) item;\r
+                       EnumMember member = new EnumMember();\r
+                       member.setName(ele.getNodeName());\r
+                       try {\r
+                               member.setTitle(URLDecoder.decode(ele.getAttribute("title"), "UTF-8"));\r
+                       } catch (UnsupportedEncodingException e1) {\r
+                               e1.printStackTrace();\r
+                       }\r
+                       if(ele.getAttribute("default").equals("true")){\r
+                               member.setDefault(true);\r
+                       }\r
+                       // enum_int\r
+//                     if(ele.getAttribute("id")!=""){\r
+//                             member.setId(Integer.parseInt(ele.getAttribute("id")));\r
+//                     }\r
+                       // value\r
+//                     if(ele.getAttribute("value")!=""){\r
+//                             member.setValue(ele.getAttribute("value"));\r
+//                             enum.setHasValue(true);\r
+//                     }\r
+                       // valueListのセット\r
+                       for(int j=0; j<enumClass.getValueList().size(); j++){\r
+                           String listName = enumClass.getValueList().get(j);\r
+                           if(ele.getAttribute(listName)!=""){\r
+                               try {\r
+                                               member.putValue(listName, URLDecoder.decode(ele.getAttribute(listName), "UTF-8"));\r
+                                       } catch (UnsupportedEncodingException e) {\r
+                                               e.printStackTrace();\r
+                                       }\r
+                           }else{\r
+                               member.setExclude(listName);\r
+                           }\r
+                       }\r
+\r
+                       // booleanListのセット\r
+                       for(int j=0; j<enumClass.getBooleanList().size(); j++){\r
+                           String listName = enumClass.getBooleanList().get(j);\r
+                           if(ele.getAttribute(listName)!=""){\r
+                                       member.putBoolean(listName, Boolean.parseBoolean(ele.getAttribute(listName)));\r
+                           }\r
+                       }\r
+\r
+                       // Allリストからの除外登録\r
+                       if(ele.getAttribute("exclude")!=""){\r
+                               member.setExclude("all");\r
+                       }\r
+\r
+                       enumClass.add(member);\r
+               }\r
+\r
+               return enumClass;\r
+       }\r
+\r
+       private Service readService(Element ele){\r
+               Service service = new Service();\r
+               service.setName(ele.getAttribute("name"));\r
+               return service;\r
+       }\r
+}
\ No newline at end of file
diff --git a/lacoder/src/com/lavans/lacoder/model/Attribute.java b/lacoder/src/com/lavans/lacoder/model/Attribute.java
new file mode 100644 (file)
index 0000000..9aa9a30
--- /dev/null
@@ -0,0 +1,655 @@
+/* $Id: Attribute.java 451 2011-08-12 11:38:19Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.model;\r
+\r
+import com.lavans.lacoder.main.JavaType;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+/**\r
+ * toGetParameter/toSetParameterにjspでやるべき事が混じってるような感じ。\r
+ * やはりmap.put()あたりはjspに持って行くべきか?\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class Attribute{\r
+//     private static Log logger = LogFactory.getLog(Attribute.class);\r
+\r
+       /** 親となるエンティティ */\r
+       private Entity entity = null;\r
+       /** 名前。意味区切り大文字 */\r
+       private String name = null;\r
+       /** タイトル */\r
+       private String title = null;\r
+       /** DB上の型 */\r
+       private String dbType = null;\r
+       /** javaの型 */\r
+       private String javaType = null;\r
+       /** 対応するクラス名 */\r
+       private String className = null;\r
+//     private String classAttrName = null;\r
+       // list形式の場合\r
+       private boolean isList = false;\r
+       // 固定長リストの場合\r
+       private int listSize=0;\r
+\r
+       /** 日付入力用のformat。 */\r
+       private String dateFormat = "yyyy/MM/dd";\r
+\r
+       /** sequence flag */\r
+       private boolean isSequence = false;\r
+\r
+       /** enum flag */\r
+       private boolean isEnum = false;\r
+\r
+       /** primary key flag */\r
+       private boolean isPrimaryKey = false;\r
+\r
+       // constraint 制約\r
+       /** nullable flag. default = false. */\r
+       private boolean isNullable = false;\r
+\r
+       /** precision for BigDecimal */\r
+       private Integer precision = null;\r
+       /** scale for BigDecimal */\r
+       private Integer scale = null;\r
+\r
+       // 最小値最大値。\r
+       // longで指定できる範囲ならvalidate()で判定処理を自動生成する。\r
+       // 数値なら大きさ、文字列なら長さを指定する。\r
+       /** min value */\r
+       private Long min = null;\r
+       /** max value */\r
+       private Long max = null;\r
+\r
+       /**\r
+        * 初期化値を返す。主にStringの初期値を""にして新規登録時にjspにnullが表示されないようにするため。\r
+        * @return\r
+        */\r
+       public String getInitValue(){\r
+//             logger.debug(arg0)\r
+               String result = null;\r
+               if(getJavaType().equals("int") ||\r
+                       getJavaType().equals("long") ||\r
+                       getJavaType().equals("double") ||\r
+                       getJavaType().equals("float") ){\r
+                       result = "0";\r
+               }else if(getJavaType().equals("boolean")){\r
+                       result = "false";\r
+               }else if(getName().equals("statusEnumId") ){\r
+                       // ステータスEnumのデフォルト値\r
+                       result = "\"on\"";\r
+               }else if(getJavaType().equals("String")){\r
+                       result = "\"\"";\r
+               }else if(!isEditable()){\r
+                       result = "null";\r
+               }else if(getJavaType().equals("Date")){\r
+//                     result = "new Date()";\r
+                       result = "null";\r
+               }else{\r
+                       result = "null";\r
+               }\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * jdbcでのset/getメソッドでの型名を返す。\r
+        * @return\r
+        */\r
+       public String getJdbcMethodName(){\r
+               // Oracleでbyte[]の時はBytesじゃなくてBlobにしないといけないかも\r
+               return JavaType.getJdbcMethodName(javaType);\r
+       }\r
+\r
+       /**\r
+        * INSERT文でのvalue名を返す。\r
+        * @return\r
+        */\r
+       public String getInsertSql(){\r
+               return  ", :"+name;\r
+       }\r
+\r
+       /**\r
+        * UPDATE文でのフィールド名を返す。\r
+        * @return\r
+        */\r
+       public String getUpdateSql(){\r
+               String result = null;\r
+\r
+               if(isPrimaryKey){\r
+                       // PKはWHERE句に含まれている\r
+                       result="";\r
+               }else if(name.equals("insert_datetime")){\r
+                       // insert_dateは更新できない\r
+                       result = "";\r
+               }else{\r
+                       result = ", "+ getColumnName()+"=:"+name;\r
+               }\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * テーブルでのカラム名を返す。\r
+        * @return\r
+        */\r
+       public String getColumnName(){\r
+               return StringUtils.toUnderscore(name).toUpperCase();\r
+       }\r
+\r
+       /**\r
+        * パラメータ化する時の値を返す。Stringならそのまま。\r
+        * それ以外のクラスならgetId()を返す。プリミティブ型なら文字列に変換。\r
+        * @return\r
+        */\r
+       public String toGetParameter(){\r
+               // insert_date/userはパラメータ化の必要なし。\r
+               if(!isEditable()){\r
+                       return "";\r
+               }\r
+\r
+               String result  = null;\r
+//             if(!className.equals("")){\r
+//                     if(entity.getTypeManager().getJavaType(type).equals("int")){\r
+//                             result = "new Integer("+ getVarName() + ".getId())";\r
+//                     }else{\r
+//                             result = getVarName() + ".getId()";\r
+//                     }\r
+//             }else\r
+               if(isList){\r
+                       // とりあえずリストはOutputパラメータだけなので無視\r
+                       return "";\r
+//                     buf.append(getClassLastName() +".getInstance(((String[])map.get(prefix+"+ getConstName() +"))[0]);");\r
+               }else if(getJavaType().equals("String")){\r
+                       result = getVarName();\r
+               }else if(getJavaType().equals("Date")){\r
+                       // date型は値が入っていない場合NullPo抑制が必要\r
+\r
+                       result = name + "==null?\"\":"+ getGetterName() +"Str()";\r
+               }else if(getJavaType().equals("byte[]")){\r
+                       // Base64で埋められるけど、バイナリデータをformに入れて持ち回りたいことはないのでなにもしない。\r
+                       // でも後で入れるかもしれないからコメントで残しておく\r
+                       //result = "StringUtils.encodeBase64Url( + name + ")";\r
+               }else{\r
+                       result = "String.valueOf("+ getVarName() +")";\r
+               }\r
+               result = "map.put(prefix+"+ getConstName() +", new String[]{"+ result +"});";\r
+\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * mapからインスタンス変数へ代入。\r
+        * @return\r
+        */\r
+       public String toSetParameter(){\r
+               // insert_date/userはパラメータ化の必要なし。\r
+               if(!isEditable()){\r
+                       return "";\r
+               }\r
+\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("if(map.get(prefix+"+ getConstName() +")!=null) "+ getVarName() +" = ");\r
+\r
+               if(isList){\r
+                       // とりあえずリストはOutputパラメータだけなので無視\r
+                       return "";\r
+//                     buf.append(getClassLastName() +".getInstance(((String[])map.get(prefix+"+ getConstName() +")));");\r
+               }else if(getJavaType().equals("int")){\r
+                       buf.append("Integer.parseInt(map.get(prefix+"+ getConstName() +")[0]);");\r
+               }else if(getJavaType().equals("long")){\r
+                       buf.append("Long.parseLong(map.get(prefix+"+ getConstName() +")[0]);");\r
+               }else if(getJavaType().equals("double")){\r
+                       buf.append("Double.parseDouble(map.get(prefix+"+ getConstName() +")[0]);");\r
+               }else if(getJavaType().equals("boolean")){\r
+                       buf.append("Boolean.parseBoolean(map.get(prefix+"+ getConstName() +")[0]);");\r
+               }else if(getJavaType().equals("Date")){\r
+                       buf.append(getGetterName() +"DateFormat().parse(map.get(prefix+"+ getConstName() +")[0]);");\r
+               }else if(getJavaType().equals("BigDecimal")){\r
+                       buf.append("new BigDecimal(map.get(prefix+"+ getConstName() +")[0]);");\r
+               }else if(getJavaType().equals("byte[]")){\r
+                       //buf.append("StringUtils.decodeBase64Url(map.get(prefix+"+ getConstName() +"));");\r
+               }else{  // それ以外(String)\r
+                       buf.append("map.get(prefix+"+ getConstName() +")[0];");\r
+               }\r
+\r
+               return "try{ "+ buf.toString() +"}catch(Exception e){}";\r
+       }\r
+\r
+       /**\r
+        * パラメータ化する時の値を返す。Stringならそのまま。\r
+        * それ以外のクラスならgetId()を返す。プリミティブ型なら文字列に変換。\r
+        * @return\r
+        */\r
+       public String toGetAttributeInfo(){\r
+               StringBuilder buf = new StringBuilder();\r
+               buf.append("map.put("+ getConstName() +", ");\r
+\r
+               if(getJavaType().equals("int")){\r
+                       buf.append("Integer.class);");\r
+               }else if(getJavaType().equals("long")){\r
+                       buf.append("Long.class);");\r
+               }else if(getJavaType().equals("double")){\r
+                       buf.append("Double.class);");\r
+               }else if(getJavaType().equals("boolean")){\r
+                       buf.append("Boolean.class);");\r
+               }else if(getJavaType().equals("Date")){\r
+                       buf.append("java.sql.Date.class);");\r
+//             }else if(getJavaType().equals("BigDecimal")){\r
+//                     buf.append("BigDecimal.class;");\r
+//             }else if(getJavaType().equals("byte[]")){\r
+//                     buf.append("byte[].class;");\r
+               }else{  // それ以外(String, BigDecimal, byt[])\r
+                       buf.append(getJavaType()+".class);");\r
+               }\r
+\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * パラメータ化する時の値を返す。Stringならそのまま。\r
+        * それ以外のクラスならgetId()を返す。プリミティブ型なら文字列に変換。\r
+        * @return\r
+        */\r
+       public String toGetAttributeMap(){\r
+               String result  = null;\r
+               if(isList){\r
+                       // リストは後で考える。Enumの配列とか?カンマ区切りStringの処理?\r
+                       return "";\r
+               }\r
+               result = "map.put("+ getConstName() +","+ getVarName() +");";\r
+\r
+               return result;\r
+       }\r
+\r
+       public String toGetter(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("    /**\n");\r
+               buf.append("     * @return "+ getVarName() +"を戻します。\n");\r
+               buf.append("     */\n");\r
+               buf.append("    public "+ getJavaType() +" "+ getGetterName() +"(){\n");\r
+               buf.append("            return "+ getVarName() +";\n");\r
+               buf.append("    }\n");\r
+\r
+               if(hasClass()){\r
+                       buf.append("    /**\n");\r
+                       buf.append("     * @return "+ getClassLastName() +"を戻します。\n");\r
+                       buf.append("     */\n");\r
+                       buf.append("    public "+ getClassLastName() +" get"+ StringUtils.capitalize(getClassVarName()) +"(){\n");\r
+                       if(isEnum){\r
+                               if(getJavaType().equals("boolean")){\r
+                                       buf.append("            return "+ getClassLastName() +".getInstance(Boolean.toString("+ getVarName() +"));\n");\r
+                               }else if(getJavaType().equals("int")){\r
+                                       buf.append("            return "+ getClassLastName() +".getInstanceByInt("+ getVarName() +");\n");\r
+                               }else{\r
+                                       buf.append("            return "+ getClassLastName() +".getInstance("+ getVarName() +");\n");\r
+                               }\r
+                       }else{\r
+                               buf.append("            return "+ getClassVarName() +";\n");\r
+                       }\r
+                       buf.append("    }\n");\r
+                       if(isEnum){\r
+                               buf.append("    /**\n");\r
+                               buf.append("     * @return "+ getVarName() +"Titleを戻します。\n");\r
+                               buf.append("     */\n");\r
+                               buf.append("    public String get"+ StringUtils.capitalize(getClassVarName()) +"Title(){\n");\r
+                               buf.append("            if(get"+ StringUtils.capitalize(getClassVarName()) +"()==null) return \"\";\n");\r
+                               buf.append("            return get"+ StringUtils.capitalize(getClassVarName()) +"().getTitle();\n");\r
+                               buf.append("    }\n");\r
+                       }\r
+                       // enumの時はtitleも返す\r
+               }else if(getJavaType().equals("Date")){\r
+                       buf.append("    /**\n");\r
+                       buf.append("     * @return "+ getVarName() +"の日付フォーマットを戻します。\n");\r
+                       buf.append("     */\n");\r
+                       buf.append("    public DateFormat "+ getGetterName() +"DateFormat(){\n");\r
+                       buf.append("            return new SimpleDateFormat(\""+ getDateFormat() +"\");\n");\r
+                       buf.append("    }\n");\r
+                       buf.append("    /**\n");\r
+                       buf.append("     * @return "+ getVarName() +"の日付文字列を戻します。\n");\r
+                       buf.append("     */\n");\r
+                       buf.append("    public String "+ getGetterName() +"Str(){\n");\r
+                       buf.append("            return "+ getGetterName() + "DateFormat().format("+ getVarName() +");\n");\r
+                       buf.append("    }\n");\r
+               }\r
+\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * setterの生成\r
+        * @return\r
+        */\r
+       public String toSetter(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("    /**\n");\r
+               buf.append("     *  "+ getVarName() +"を設定します。\n");\r
+               buf.append("     */\n");\r
+               buf.append("    public void "+ getSetterName() +"("+ getJavaType() +" "+ getVarName() +"){\n");\r
+               buf.append("            this."+ getVarName() +"="+ getVarName() +";\n");\r
+               buf.append("    }\n");\r
+\r
+               if(hasClass()){\r
+                       buf.append("    /**\n");\r
+                       buf.append("     * "+ getClassLastName() +"を設定します。\n");\r
+                       buf.append("     */\n");\r
+                       buf.append("    public void set"+ StringUtils.capitalize(getClassVarName()) +"("+ getClassLastName() +" "+ getClassVarName() +"){\n");\r
+                       if(isEnum){\r
+                               if(getJavaType().equals("boolean")){\r
+                                       buf.append("            this."+ getVarName() +"=Boolean.parseBoolean("+ getClassVarName() +".getId());\n");\r
+                               }else if(getJavaType().equals("int")){\r
+                                       buf.append("            this."+ getVarName() +"="+ getClassVarName() +".getInt();\n");\r
+                               }else{\r
+                                       buf.append("            this."+ getVarName() +"="+ getClassVarName() +".getId();\n");\r
+                               }\r
+                       }else{\r
+                               buf.append("            this."+ getClassVarName() +"="+ getClassVarName() +";\n");\r
+                       }\r
+                       buf.append("    }\n");\r
+               }else if(getJavaType().equals("Date")){\r
+                       buf.append("    /**\n");\r
+                       buf.append("     * "+ getVarName() +"の日付文字列を設定します。\n");\r
+                       buf.append("     */\n");\r
+                       buf.append("    public void "+ getSetterName() +"Str(String "+ getVarName() +"Str) throws ParseException{\n");\r
+                       buf.append("            this."+ getVarName() +"="+ getGetterName() + "DateFormat().parse("+ getVarName() +"Str);\n");\r
+                       buf.append("    }\n");\r
+               }\r
+\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        *  insert_date/user等は入力不可。\r
+        * @return\r
+        */\r
+       public boolean isEditable(){\r
+               // insert_date/userはパラメータ化の必要なし。\r
+               if(name.equals("insert_datetime") || name.equals("update_datetime") ){\r
+                       return false;\r
+               }\r
+               return true;\r
+       }\r
+       /**\r
+        * @return entity を戻します。\r
+        */\r
+       public Entity getEntity() {\r
+               return entity;\r
+       }\r
+       /**\r
+        * @param entity entity を設定。\r
+        */\r
+       public void setEntity(Entity entity) {\r
+               this.entity = entity;\r
+       }\r
+\r
+//     /**\r
+//      * @return classAttrName を戻します。\r
+//      */\r
+//     public String getClassAttrName() {\r
+//             return classAttrName;\r
+//     }\r
+//     /**\r
+//      * @param classAttrName classAttrName を設定。\r
+//      */\r
+//     public void setClassAttrName(String attrName) {\r
+//             this.classAttrName = attrName;\r
+//     }\r
+       /**\r
+        * @return className を戻します。\r
+        */\r
+       public String getClassName() {\r
+               // クラス名が.で始まる場合はドメインパスまでを省略している\r
+               if((className!=null) && className.startsWith(".")){\r
+                       className = entity.getParentPackage().getDomainPath()+className;\r
+               }\r
+               return className;\r
+       }\r
+       /**\r
+        * @return className を戻します。\r
+        */\r
+       public String getClassLastName() {\r
+               String names[] = className.split("\\.");\r
+               return names[names.length-1];\r
+       }\r
+       /**\r
+        * @param className className を設定。\r
+        */\r
+       public void setClassName(String className) {\r
+               this.className = className;\r
+       }\r
+       /**\r
+        * @return name を戻します。\r
+        */\r
+       public String getName() {\r
+               return name;\r
+       }\r
+       public String getConstName() {\r
+               return StringUtils.toUnderscore(name).toUpperCase();\r
+       }\r
+       /**\r
+        * Entity内での変数名を返す。\r
+        * classを持っている場合、末尾がIdで終わらなければIdをつける。\r
+        * @return\r
+        */\r
+       public String getVarName() {\r
+               if(!getClassName().equals("") && !name.endsWith("Id")){\r
+                       return name+"Id";\r
+               }\r
+               return name;\r
+       }\r
+       /**\r
+        * 最初を大文字にした名前を返す。\r
+        * @return\r
+        */\r
+       public String getCapitalizeName() {\r
+               return StringUtils.capitalize(getVarName());\r
+       }\r
+\r
+       /**\r
+        * Entity内でのクラス型の変数名を返す。\r
+        * 変数名が必ずIdで終わっているので、最後の2文字を削除した物をクラス型の変数名とする。\r
+        * @return\r
+        */\r
+       public String getClassVarName() {\r
+               String classVarName = getVarName();\r
+               classVarName = classVarName.substring(0, classVarName.length()-2);\r
+               return classVarName;\r
+       }\r
+\r
+       /**\r
+        * getterのメソッド名。customerId -> getCustomerId\r
+        * booleanでis/can/hasの場合はgetIsBoolとならずにisBoolだけとしたいところだけど\r
+        * struts2のActionの自動設定で失敗するのでgetIsBoolとする。\r
+        * @return\r
+        */\r
+       public String getGetterName(){\r
+//             if(getJavaType().equals("boolean")){\r
+//                     if(name.startsWith("is") || name.startsWith("can") || name.startsWith("has")){\r
+//                             return name;\r
+//                     }\r
+//             }\r
+\r
+               return "get" + StringUtils.capitalize(getVarName());\r
+       }\r
+\r
+       /**\r
+        * setterのメソッド名。customerId -> setCustomerId\r
+        * booleanでis/can/hasの場合はgetIsBoolとならずにisBoolだけとする\r
+        * @return\r
+        */\r
+       public String getSetterName(){\r
+               return "set" + StringUtils.capitalize(getVarName());\r
+\r
+       }\r
+       /**\r
+        * 変数名を頭大文字にして返す。getXX(),setXX()等で使用。\r
+        * @return\r
+        */\r
+//     public String getVarNameUpperFirst(){\r
+//             return StringUtils.upperFirst(name);\r
+//     }\r
+\r
+       /**\r
+        * @param name name を設定。\r
+        */\r
+       public void setName(String name) {\r
+               this.name = name;\r
+       }\r
+\r
+       /**\r
+        * @return isSequence を戻します。\r
+        */\r
+       public boolean isSequence() {\r
+               return isSequence;\r
+       }\r
+       /**\r
+        * @param isSequence isSequence を設定。\r
+        */\r
+       public void setSequence(boolean isSequence) {\r
+               this.isSequence = isSequence;\r
+       }\r
+       /**\r
+        * @return title を戻します。\r
+        */\r
+       public String getTitle() {\r
+               return title;\r
+       }\r
+       /**\r
+        * @param title title を設定。\r
+        */\r
+       public void setTitle(String title) {\r
+               this.title = title;\r
+       }\r
+       /**\r
+        * @return dateFormat を戻します。\r
+        */\r
+       public String getDateFormat() {\r
+               return dateFormat;\r
+       }\r
+       /**\r
+        * @param dateFormat dateFormat を設定。\r
+        */\r
+       public void setDateFormat(String format) {\r
+               this.dateFormat = format;\r
+       }\r
+       /**\r
+        * @return isEnum を戻します。\r
+        */\r
+       public boolean isEnum() {\r
+               return isEnum;\r
+       }\r
+       /**\r
+        * @param isEnum isEnum を設定。\r
+        */\r
+       public void setEnum(boolean isEnum) {\r
+               this.isEnum = isEnum;\r
+       }\r
+\r
+       public boolean hasClass() {\r
+               return !getClassName().equals("");\r
+       }\r
+\r
+       /**\r
+        * EntityクラスにおけるJavaの型。\r
+        * @return\r
+        */\r
+       public String getJavaType(){\r
+               return javaType;\r
+       }\r
+\r
+       /**\r
+        * @param javaType javaType を設定。\r
+        */\r
+       public void setJavaType(String javaType) {\r
+               this.javaType = javaType;\r
+       }\r
+       /**\r
+        * @return isList を戻します。\r
+        */\r
+       public boolean isList() {\r
+               return isList;\r
+       }\r
+       /**\r
+        * @param isList isList を設定。\r
+        */\r
+       public void setList(boolean isList) {\r
+               this.isList = isList;\r
+       }\r
+       /**\r
+        * @return listSize を戻します。\r
+        */\r
+       public int getListSize() {\r
+               return listSize;\r
+       }\r
+       /**\r
+        * @param listSize listSize を設定。\r
+        */\r
+       public void setListSize(int listSize) {\r
+               this.listSize = listSize;\r
+       }\r
+       /**\r
+        * @return isPrimaryKey を戻します。\r
+        */\r
+       public boolean isPrimaryKey() {\r
+               return isPrimaryKey;\r
+       }\r
+       /**\r
+        * @param isPrimaryKey isPrimaryKey を設定。\r
+        */\r
+       public void setPrimaryKey(boolean isPrimaryKey) {\r
+               this.isPrimaryKey = isPrimaryKey;\r
+       }\r
+\r
+       public String getDbType() {\r
+               // xmlで指定済みならそれを返す\r
+               if(dbType!=null){\r
+                       return dbType;\r
+               }\r
+               // 未指定ならTypeManagerから取得。\r
+               return entity.getTypeManager().getDbType(this);\r
+       }\r
+\r
+       public void setDbType(String dbType) {\r
+               this.dbType = dbType;\r
+       }\r
+\r
+       public boolean isNullable() {\r
+               return isNullable;\r
+       }\r
+\r
+       public void setNullable(boolean isNullable) {\r
+               this.isNullable = isNullable;\r
+       }\r
+\r
+       public Integer getPrecision() {\r
+               return precision;\r
+       }\r
+\r
+       public void setPrecision(Integer precision) {\r
+               this.precision = precision;\r
+       }\r
+\r
+       public Integer getScale() {\r
+               return scale;\r
+       }\r
+\r
+       public void setScale(Integer scale) {\r
+               this.scale = scale;\r
+       }\r
+\r
+       public Long getMin() {\r
+               return min;\r
+       }\r
+\r
+       public void setMin(Long min) {\r
+               this.min = min;\r
+       }\r
+\r
+       public Long getMax() {\r
+               return max;\r
+       }\r
+\r
+       public void setMax(Long max) {\r
+               this.max = max;\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/model/Entity.java b/lacoder/src/com/lavans/lacoder/model/Entity.java
new file mode 100644 (file)
index 0000000..0b3b206
--- /dev/null
@@ -0,0 +1,350 @@
+/* $Id: Entity.java 466 2011-08-16 13:56:56Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import com.lavans.lacoder.db.TypeManager;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class Entity {\r
+       private static Log logger = LogFactory.getLog(Entity.class);\r
+\r
+       private TypeManager typeManager = null; // 暫定。\r
+\r
+       private String name = null;\r
+       private String title = null;\r
+\r
+       private String shortname = null;\r
+       private List<Attribute> attrList = new ArrayList<Attribute>();\r
+       private String primaryKey = null;\r
+       private boolean isCached = false;\r
+       private boolean isUser = false;\r
+       // リスト属性を持っているか\r
+       private boolean hasList = false;\r
+       /** Blob属性を持っているか */\r
+       private boolean hasBlob = false;\r
+       /** バックアップ用テーブルを持っているか */\r
+       private boolean hasBackup = false;\r
+\r
+       /** 親パッケージ */\r
+       private Package parentPackage = null;\r
+\r
+       // behavior\r
+       /** 確認画面をskipするかどうか */\r
+       private boolean isSkipConfirm = false;\r
+       private boolean isSkipDeleteConfirm = false;\r
+\r
+       /** 登録処理の後、登録結果画面をSkipして検索画面に戻るか */\r
+       private boolean isSkipResult = false;\r
+       private boolean isSkipDeleteResult = false;\r
+\r
+       // 編集するユーザーの一覧\r
+       private List<String> userList = new ArrayList<String>();\r
+\r
+       /**\r
+        *\r
+        * @return\r
+        */\r
+       public List<Attribute> getPrimaryKeyList(){\r
+               List<Attribute> list = new ArrayList<Attribute>();\r
+               for(Attribute attr: attrList){\r
+                       if(attr.isPrimaryKey()){\r
+                               list.add(attr);\r
+                       }\r
+               }\r
+               return list;\r
+       }\r
+\r
+       /**\r
+        * プライマリキー一覧をメソッドの引数形式で返す。\r
+        * pkeyがcompany_id::string, detail_id::integerなら"String companyId, int detailId"\r
+        * @return\r
+        */\r
+       public String getPrimaryKeyArg(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: getPrimaryKeyList()){\r
+                       buf.append(", "+ attr.getJavaType()+" "+ attr.getVarName());\r
+               }\r
+               if(buf.length()>2){\r
+                       return buf.substring(2);\r
+               }\r
+               // primaryKeyの設定が間違っているとエラーとなる。\r
+               logger.info("エラー: PKが存在しない。"+getName()+ " PK:"+ primaryKey);\r
+               return "";\r
+       }\r
+\r
+       /**\r
+        * プライマリキー一覧を変数名形式で返す。\r
+        * pkeyがcompany_id::string, detail_id::integerなら"companyId, detailId"\r
+        * @return\r
+        */\r
+       public String getPrimaryKeyVar(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: getPrimaryKeyList()){\r
+                       buf.append(", "+ attr.getVarName());\r
+               }\r
+               return buf.substring(2);\r
+       }\r
+\r
+       /**\r
+        * @return isCached を戻します。\r
+        */\r
+       public boolean isCached() {\r
+               return isCached;\r
+       }\r
+       /**\r
+        * @param isCached isCached を設定。\r
+        */\r
+       public void setCached(boolean isCached) {\r
+               this.isCached = isCached;\r
+       }\r
+       /**\r
+        * @return name を戻します。\r
+        */\r
+       public String getName() {\r
+               return name;\r
+       }\r
+       public String getTableName() {\r
+               return StringUtils.toUnderscore(name).toUpperCase();\r
+       }\r
+       public String getClassName() {\r
+               return StringUtils.capitalize(name);\r
+       }\r
+       public String getClassNameFull() {\r
+               return getParentPackage().getDomainSubPackagePath() + ".entity."+ StringUtils.capitalize(name);\r
+       }\r
+       /**\r
+        * @param name name を設定。\r
+        */\r
+       public void setName(String name) {\r
+               this.name = name;\r
+       }\r
+       /**\r
+        * @return primaryKey を戻します。\r
+        */\r
+       public String getPrimaryKey() {\r
+               return primaryKey;\r
+       }\r
+       /**\r
+        * @param primaryKey primaryKey を設定。\r
+        */\r
+       public void setPrimaryKey(String primaryKey) {\r
+               this.primaryKey = primaryKey;\r
+       }\r
+       /**\r
+        *\r
+        * @return\r
+        */\r
+       public List<Attribute> getAttrList(){\r
+               return attrList;\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public boolean add(Attribute attr) {\r
+\r
+               return attrList.add(attr);\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public Attribute get(int arg0) {\r
+               return attrList.get(arg0);\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public boolean remove(Object arg0) {\r
+               return attrList.remove(arg0);\r
+       }\r
+       /**\r
+        * @return\r
+        */\r
+       public int size() {\r
+               return attrList.size();\r
+       }\r
+       /**\r
+        * @return typeManager を戻します。\r
+        */\r
+       public TypeManager getTypeManager() {\r
+               return typeManager;\r
+       }\r
+       /**\r
+        * @param typeManager typeManager を設定。\r
+        */\r
+       public void setTypeManager(TypeManager typeManager) {\r
+               this.typeManager = typeManager;\r
+       }\r
+       /**\r
+        * @return shortname を戻します。\r
+        */\r
+       public String getShortname() {\r
+               return shortname;\r
+       }\r
+       /**\r
+        * @param shortname shortname を設定。\r
+        */\r
+       public void setShortname(String shortname) {\r
+               // 一文字目は小文字にする\r
+               this.shortname = StringUtils.uncapitalize(shortname);\r
+       }\r
+       /**\r
+        * @return title を戻します。\r
+        */\r
+       public String getTitle() {\r
+               return title;\r
+       }\r
+       /**\r
+        * @param title title を設定。\r
+        */\r
+       public void setTitle(String title) {\r
+               this.title = title;\r
+       }\r
+       /**\r
+        * @return isUser を戻します。\r
+        */\r
+       public boolean isUser() {\r
+               return isUser;\r
+       }\r
+       /**\r
+        * @param isUser isUser を設定。\r
+        */\r
+       public void setUser(boolean isUser) {\r
+               this.isUser = isUser;\r
+       }\r
+       /**\r
+        * @return hasList を戻します。\r
+        */\r
+       public boolean isHasList() {\r
+               return hasList;\r
+       }\r
+       /**\r
+        * @param hasList hasList を設定。\r
+        */\r
+       public void setHasList(boolean hasList) {\r
+               this.hasList = hasList;\r
+       }\r
+\r
+       /**\r
+        * 日付型を持っているか\r
+        * @return\r
+        */\r
+       public boolean hasDate(){\r
+               boolean hasDate = false;\r
+               for(int i=1; i<size(); i++){\r
+                       Attribute attr = get(i);\r
+                       if(attr.getJavaType().equals("Date")){\r
+                               hasDate = true;\r
+                               break;\r
+                       }\r
+               }\r
+               return hasDate;\r
+       }\r
+\r
+       /**\r
+        * 日付型を持っているか\r
+        * @return\r
+        */\r
+       public boolean hasInsertDatetime(){\r
+               return hasAttrName("insertDatetime");\r
+       }\r
+\r
+       public boolean hasUpdateDatetime(){\r
+               return hasAttrName("updateDatetime");\r
+       }\r
+\r
+       private boolean hasAttrName(String name){\r
+               boolean hasDate = false;\r
+               for(int i=1; i<size(); i++){\r
+                       Attribute attr = get(i);\r
+                       if(attr.getName().equals(name)){\r
+                               hasDate = true;\r
+                               break;\r
+                       }\r
+               }\r
+               return hasDate;\r
+       }\r
+\r
+       /**\r
+        * @return hasBlob\r
+        */\r
+       public boolean isHasBlob() {\r
+               return hasBlob;\r
+       }\r
+\r
+       /**\r
+        * @param hasBlob 設定する hasBlob\r
+        */\r
+       public void setHasBlob(boolean hasBlob) {\r
+               this.hasBlob = hasBlob;\r
+       }\r
+\r
+       public List<String> getUserList() {\r
+               return userList;\r
+       }\r
+\r
+       public void setUserList(List<String> userList) {\r
+               this.userList = userList;\r
+       }\r
+\r
+       public Package getParentPackage() {\r
+               return parentPackage;\r
+       }\r
+\r
+       public void setParentPackage(Package parentPackage) {\r
+               this.parentPackage = parentPackage;\r
+       }\r
+\r
+       public boolean isSkipConfirm() {\r
+               return isSkipConfirm;\r
+       }\r
+\r
+       public void setSkipConfirm(boolean isSkipConfirm) {\r
+               this.isSkipConfirm = isSkipConfirm;\r
+       }\r
+\r
+       public boolean isSkipDeleteConfirm() {\r
+               return isSkipDeleteConfirm;\r
+       }\r
+\r
+       public void setSkipDeleteConfirm(boolean isSkipDeleteConfirm) {\r
+               this.isSkipDeleteConfirm = isSkipDeleteConfirm;\r
+       }\r
+\r
+       public boolean isSkipResult() {\r
+               return isSkipResult;\r
+       }\r
+\r
+       public void setSkipResult(boolean isSkipResult) {\r
+               this.isSkipResult = isSkipResult;\r
+       }\r
+       public boolean isSkipDeleteResult() {\r
+               return isSkipDeleteResult;\r
+       }\r
+\r
+       public void setSkipDeleteResult(boolean isSkipDeleteResult) {\r
+               this.isSkipDeleteResult = isSkipDeleteResult;\r
+       }\r
+\r
+       public boolean hasBackup() {\r
+               return hasBackup;\r
+       }\r
+\r
+       public void setHasBackup(boolean hasBackup) {\r
+               this.hasBackup = hasBackup;\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/model/EnumClass.java b/lacoder/src/com/lavans/lacoder/model/EnumClass.java
new file mode 100644 (file)
index 0000000..1600d77
--- /dev/null
@@ -0,0 +1,123 @@
+/* $Id: EnumClass.java 247 2011-02-01 14:08:35Z dobashi $\r
+ * create: 2005/01/20\r
+ * (c)2005 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+\r
+/**\r
+ * @author dobashi\r
+ *\r
+ */\r
+public class EnumClass {\r
+       private String name = null;\r
+       private String title = null;\r
+       private List<EnumMember> memberList = new ArrayList<EnumMember>();\r
+       private EnumMember defaultMember = null;\r
+       /** 各値を保持するリストの名称一覧 */\r
+       private List<String> valueList = new ArrayList<String>();\r
+       /** booleanを保持するリストの名称一覧 */\r
+       private List<String> booleanList = new ArrayList<String>();\r
+\r
+       /**\r
+        * @return name を戻します。\r
+        */\r
+       public String getName() {\r
+               return name;\r
+       }\r
+       public String getClassName() {\r
+               return StringUtils.capitalize(name);\r
+       }\r
+       /**\r
+        * @param name name を設定。\r
+        */\r
+       public void setName(String name) {\r
+               this.name = name;\r
+       }\r
+       /**\r
+        * @return title を戻します。\r
+        */\r
+       public String getTitle() {\r
+               return title;\r
+       }\r
+       /**\r
+        * @param title title を設定。\r
+        */\r
+       public void setTitle(String title) {\r
+               this.title = title;\r
+       }\r
+       /**\r
+        * @param member\r
+        * @return\r
+        */\r
+       public boolean add(EnumMember member) {\r
+               if(member.isDefault()){\r
+                       defaultMember = member;\r
+               }\r
+               return memberList.add(member);\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public EnumMember get(int member) {\r
+               return memberList.get(member);\r
+       }\r
+       /**\r
+        * @param member\r
+        * @return\r
+        */\r
+       public boolean remove(EnumMember member) {\r
+               return memberList.remove(member);\r
+       }\r
+       /**\r
+        * @return\r
+        */\r
+       public int size() {\r
+               return memberList.size();\r
+       }\r
+       /**\r
+        * @return defaultMemger を戻します。\r
+        */\r
+       public EnumMember getDefaultMember() {\r
+               return defaultMember;\r
+       }\r
+       /**\r
+        * @param defaultMemger defaultMemger を設定。\r
+        */\r
+       public void setDefaultMember(EnumMember defaultMember) {\r
+               this.defaultMember = defaultMember;\r
+       }\r
+\r
+       /**\r
+        * valueListをcsv形式で追加\r
+        * @param listStr\r
+        */\r
+       public void setValueList(String listStr){\r
+           String[] lists = listStr.split(",");\r
+           for(int i=0; i<lists.length; i++){\r
+               valueList.add(lists[i].trim());\r
+           }\r
+       }\r
+\r
+    /**\r
+     * @return valueList を戻します。\r
+     */\r
+    public List<String> getValueList() {\r
+        return valueList;\r
+    }\r
+       public List<String> getBooleanList() {\r
+               return booleanList;\r
+       }\r
+       public void setBooleanList(String listStr) {\r
+           String[] lists = listStr.split(",");\r
+           for(int i=0; i<lists.length; i++){\r
+               booleanList.add(lists[i].trim());\r
+           }\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/model/EnumMember.java b/lacoder/src/com/lavans/lacoder/model/EnumMember.java
new file mode 100644 (file)
index 0000000..5e64ddb
--- /dev/null
@@ -0,0 +1,130 @@
+/* $Id: EnumMember.java 97 2008-12-24 10:00:46Z dobashi $\r
+ * create: 2005/01/20\r
+ * (c)2005 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.model;\r
+\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+/**\r
+ * @author dobashi\r
+ *\r
+ */\r
+public class EnumMember {\r
+       private String name = null;\r
+       private String title = null;\r
+       private boolean isDefault = false;\r
+       \r
+       /** 各リスト値保存用のMap */\r
+       private Map<String, String> valueMap = new HashMap<String, String>();\r
+\r
+       /** 各リスト除外用のSet */\r
+       private Set<String> excludeSet = new HashSet<String>();\r
+\r
+       /** 各bool値保存用のMap */\r
+       private Map<String, Boolean> booleanMap = new HashMap<String, Boolean>();\r
+\r
+       /**\r
+        * @return isDefault を戻します。\r
+        */\r
+       public boolean isDefault() {\r
+               return isDefault;\r
+       }\r
+       /**\r
+        * @param isDefault isDefault を設定。\r
+        */\r
+       public void setDefault(boolean isDefault) {\r
+               this.isDefault = isDefault;\r
+       }\r
+       /**\r
+        * @return name を戻します。\r
+        */\r
+       public String getName() {\r
+               return name;\r
+       }\r
+       /**\r
+        * @return name を戻します。\r
+        */\r
+       public String getConstName() {\r
+               return name.toUpperCase().replace(".", "_");\r
+       }\r
+       /**\r
+        * @param name name を設定。\r
+        */\r
+       public void setName(String name) {\r
+               this.name = name;\r
+       }\r
+       /**\r
+        * @return title を戻します。\r
+        */\r
+       public String getTitle() {\r
+               return title;\r
+       }\r
+       /**\r
+        * @param title title を設定。\r
+        */\r
+       public void setTitle(String title) {\r
+               this.title = title;\r
+       }\r
+\r
+    /**\r
+     * @param arg0\r
+     * @return\r
+     */\r
+    public String getValue(Object arg0) {\r
+        return valueMap.get(arg0);\r
+    }\r
+    /**\r
+     * @param arg0\r
+     * @param arg1\r
+     * @return\r
+     */\r
+    public Object putValue(String arg0, String arg1) {\r
+        return valueMap.put(arg0, arg1);\r
+    }\r
+    \r
+    /**\r
+     * リスト除外設定。\r
+     * @param 除外するリスト名。\r
+     * @return\r
+     */\r
+    public void setExclude(String excludeStr) {\r
+        excludeSet.add(excludeStr);\r
+//        String[] excludes = excludeStr.split(",");\r
+//        for(int i=0; i<excludes.length; i++){\r
+//            excludeSet.add(excludes[i].trim());\r
+//        }\r
+    }\r
+    /**\r
+     * このリスト一覧から除外するか\r
+     * @param arg0\r
+     * @param arg1\r
+     * @return\r
+     */\r
+    public boolean isExclude(String listName){\r
+        return excludeSet.contains(listName);\r
+    }\r
+    \r
+    /**\r
+     * @param arg0\r
+     * @return\r
+     */\r
+    public boolean getBoolean(String arg0) {\r
+        Boolean result = booleanMap.get(arg0);\r
+        if(result==null){\r
+               result = Boolean.FALSE;\r
+        }\r
+        return result;\r
+    }\r
+    /**\r
+     * @param arg0\r
+     * @param arg1\r
+     * @return\r
+     */\r
+    public Boolean putBoolean(String arg0, boolean value) {\r
+        return booleanMap.put(arg0, value);\r
+    }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/model/Package.java b/lacoder/src/com/lavans/lacoder/model/Package.java
new file mode 100644 (file)
index 0000000..d4ecc06
--- /dev/null
@@ -0,0 +1,232 @@
+/* $Id: Package.java 421 2011-07-29 09:55:09Z dobashi $\r
+ * create: 2004/12/28\r
+ * (c)2004 Lavans Networks Inc. All Rights Reserved.\r
+ */\r
+package com.lavans.lacoder.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+/**\r
+ * @author dobashi\r
+ * @version 1.00\r
+ */\r
+public class Package {\r
+       private static final String PRESENTATION  = "presentation";\r
+       private static final String DOMAIN  = "domain";\r
+       private static final String SERVICE = "service";\r
+       private static List<Package> allList = new ArrayList<Package>();\r
+       public static boolean addPackage(Package p) {\r
+               return allList.add(p);\r
+       }\r
+       public static List<Package> getAllList(){\r
+               return allList;\r
+       }\r
+       public static Package getPackage(String name){\r
+               Package result = null;\r
+               for(int i=0; i<allList.size(); i++){\r
+                       Package pkg = allList.get(i);\r
+                       if(pkg.getName().equals(name)){\r
+                               result=pkg;\r
+                               break;\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private String fqdn = null;\r
+       private String project = null;\r
+       private String subname=null;\r
+\r
+       private List<Entity> entityList = new ArrayList<Entity>();\r
+       private List<EnumClass> enumList= new ArrayList<EnumClass>();\r
+       private List<Service> serviceList= new ArrayList<Service>();\r
+\r
+       public Entity getEntity(String name){\r
+               Entity result = null;\r
+               for(int i=0; i<entityList.size(); i++){\r
+                       Entity table = entityList.get(i);\r
+                       if(table.getName().equals(name)){\r
+                               result=table;\r
+                               break;\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+       public EnumClass getEnum(String name){\r
+               EnumClass result = null;\r
+               for(int i=0; i<enumList.size(); i++){\r
+                       EnumClass enums = enumList.get(i);\r
+                       if(enums.getName().equals(name)){\r
+                               result=enums;\r
+                               break;\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+       public Service getService(String name){\r
+               Service result = null;\r
+               for(int i=0; i<serviceList.size(); i++){\r
+                       Service service = serviceList.get(i);\r
+                       if(service.getName().equals(name)){\r
+                               result=service;\r
+                               break;\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        *\r
+        * @return fullname(domain.project.package) を戻します。\r
+        * パッケージを特定するためのキーとしてのみ利用します。\r
+        * lacoderが生成するクラスではこの組み合わせ(projectの次にsubname)のjavaパッケージは存在しません。\r
+        *\r
+        */\r
+       public String getName() {\r
+               return fqdn+"."+project+"."+subname;\r
+       }\r
+       /**\r
+        * @return fullname(domain.project.package) を戻します。\r
+        */\r
+       public String getDomainPath() {\r
+               return fqdn+"."+project+"."+DOMAIN ;\r
+       }\r
+\r
+       public String getDomainSubPackagePath() {\r
+               return fqdn+"."+project+"."+DOMAIN +"."+ subname;\r
+       }\r
+       public String getServiceSubPackagePath() {\r
+               return fqdn+"."+project+"."+SERVICE +"."+ subname;\r
+       }\r
+       public String getPresentationPath() {\r
+               return fqdn+"."+project+"."+PRESENTATION;\r
+       }\r
+       /**\r
+        * Actionのpathを取得します。Actionはroleの下にあるので引数でroleをとります。\r
+        * @return\r
+        */\r
+       public String getActionPath(String role) {\r
+               return getPresentationPath()+"."+ role +"."+ subname +".action";\r
+       }\r
+       /**\r
+        * jspのpathを取得します。Actionはroleの下にあるので引数でroleをとります。\r
+        * @return\r
+        */\r
+       public String getJspPath(String role) {\r
+               return getPresentationPath()+"."+ role +"."+ subname +".jsp";\r
+       }\r
+\r
+       /**\r
+        * @return package名のみを戻します。\r
+        */\r
+       public String getSubPackageName() {\r
+               return subname;\r
+       }\r
+\r
+       /**\r
+        * @param name name を設定。\r
+        */\r
+       public void setName(String fqdn, String project, String name) {\r
+               this.subname = name;\r
+               this.fqdn = fqdn;\r
+               this.project = project;\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public boolean addEntity(Entity entity) {\r
+               entity.setParentPackage(this);\r
+               return entityList.add(entity);\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public Entity getEntity(int arg0) {\r
+               return entityList.get(arg0);\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public boolean removeEntity(Object arg0) {\r
+               return entityList.remove(arg0);\r
+       }\r
+       /**\r
+        * @return\r
+        */\r
+       public int entitySize() {\r
+               return entityList.size();\r
+       }\r
+\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public boolean addEnum(EnumClass arg0) {\r
+               return enumList.add(arg0);\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public EnumClass getEnum(int arg0) {\r
+               return enumList.get(arg0);\r
+       }\r
+       /**\r
+        * @param arg0\r
+        * @return\r
+        */\r
+       public boolean removeEnum(Object arg0) {\r
+               return enumList.remove(arg0);\r
+       }\r
+       /**\r
+        * @return\r
+        */\r
+       public int enumSize() {\r
+               return enumList.size();\r
+       }\r
+\r
+       public boolean addService(Service arg0) {\r
+               return serviceList.add(arg0);\r
+       }\r
+       public Service getService(int arg0) {\r
+               return serviceList.get(arg0);\r
+       }\r
+       public Service removeService(int arg0) {\r
+               return serviceList.remove(arg0);\r
+       }\r
+       /**\r
+        * @return\r
+        */\r
+       public int serviceSize() {\r
+               return serviceList.size();\r
+       }\r
+\r
+       /**\r
+        * @return domain を戻します。\r
+        */\r
+       public String getFqdn() {\r
+               return fqdn;\r
+       }\r
+       /**\r
+        * @param domain domain を設定。\r
+        */\r
+       public void setFqdn(String domain) {\r
+               this.fqdn = domain;\r
+       }\r
+       /**\r
+        * @return project を戻します。\r
+        */\r
+       public String getProject() {\r
+               return project;\r
+       }\r
+       /**\r
+        * @param project project を設定。\r
+        */\r
+       public void setProject(String project) {\r
+               this.project = project;\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/model/Role.java b/lacoder/src/com/lavans/lacoder/model/Role.java
new file mode 100644 (file)
index 0000000..373cf98
--- /dev/null
@@ -0,0 +1,43 @@
+package com.lavans.lacoder.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+/**\r
+ * \r
+ * @author Yuki\r
+ *\r
+ */\r
+public class Role {\r
+       private static List<String> list = new ArrayList<String>();\r
+       \r
+       public static void addUserType(String userType){\r
+               list.add(userType);\r
+       }\r
+       \r
+       public static List<String> getList(){\r
+               return list;\r
+       }\r
+\r
+       public static void setList(List<String> userTypeList) {\r
+               Role.list = userTypeList;\r
+       }\r
+       \r
+       private String name;\r
+       public Role(String name){\r
+               this.name = name;\r
+       }\r
+       public String getName(){\r
+               return name;\r
+       }\r
+       public String getClassName(){\r
+               return StringUtils.capitalize(name);\r
+       }\r
+       @Override\r
+       public String toString(){\r
+               return name;\r
+       }\r
+       \r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/model/Service.java b/lacoder/src/com/lavans/lacoder/model/Service.java
new file mode 100644 (file)
index 0000000..299cd8c
--- /dev/null
@@ -0,0 +1,19 @@
+/* $Id: Service.java 97 2008-12-24 10:00:46Z dobashi $\r
+ * created: 2005/08/11\r
+ */\r
+package com.lavans.lacoder.model;\r
+\r
+\r
+/**\r
+ * \r
+ * @author dobashi\r
+ */\r
+public class Service {\r
+       private String name = null;\r
+       public String getName() {\r
+               return name;\r
+       }\r
+       public void setName(String name) {\r
+               this.name = name;\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/writer/ActionWriter.java b/lacoder/src/com/lavans/lacoder/writer/ActionWriter.java
new file mode 100644 (file)
index 0000000..1666a07
--- /dev/null
@@ -0,0 +1,133 @@
+package com.lavans.lacoder.writer;\r
+\r
+import java.util.Set;\r
+import java.util.TreeSet;\r
+\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+public class ActionWriter {\r
+       //private static Log logger = LogFactory.getLog(DaoWriter.class);\r
+       private Entity entity;\r
+\r
+       private String varName;\r
+       public ActionWriter(Entity entity){\r
+               this.entity = entity;\r
+               varName = entity.getShortname();\r
+       }\r
+\r
+       /**\r
+        * このEntityで使用しているEnumのimportを列挙する。\r
+        * @return\r
+        */\r
+       public String writeImportsEnum(){\r
+               StringBuffer buf = new StringBuffer();\r
+\r
+               // 重複を回避するために一旦Setに格納\r
+               Set<String> classSet = new TreeSet<String>();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       if(attr.isEnum()){\r
+                               classSet.add(attr.getClassName());\r
+                       }\r
+               }\r
+\r
+               // Setからimport文を作成\r
+               for(String className: classSet){\r
+                       // stausEnumは参照不要(暫定)\r
+                       //if(className.endsWith("StatusEnum")) continue;\r
+                       buf.append("import "+ className +";\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * このEntityで使用しているEnumのuiParts作成。\r
+        * @return\r
+        */\r
+       public String writeUiPartsEnum(){\r
+               StringBuffer buf = new StringBuffer();\r
+\r
+               Set<String> classSet = new TreeSet<String>();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       if(attr.isEnum()){\r
+                               classSet.add(attr.getClassLastName());\r
+                       }\r
+               }\r
+\r
+               for(String className: classSet){\r
+                       buf.append("uiParts.put(\""+ StringUtils.uncapitalize(className) +"List\", "+ className +".getAllList());\n");\r
+               }\r
+               return StringUtils.chomp(StringUtils.indent(buf.toString(), 2));\r
+       }\r
+       /**\r
+        * Resultアノテーションリダイレクト用PK書き出し\r
+        * @return\r
+        */\r
+       public String writeResults(String jspPath){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append(writeResultsInsert(jspPath, "create"));\r
+               buf.append(writeResultsInsert(jspPath, "update"));\r
+               buf.append(writeResultsDelete(jspPath, "logicalDelete"));\r
+               buf.append(writeResultsDelete(jspPath, "delete"));\r
+\r
+               return StringUtils.indent(buf.toString(), 2);\r
+       }\r
+\r
+       private String writeResultsInsert(String jspPath, String crud){\r
+               String constName = crud.toUpperCase();\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("// "+ crud +"\n");\r
+               buf.append("@Result(name = ActionSupport."+ constName +"_INPUT, location = \""+ jspPath +"/"+ varName +"-"+ crud +"Input.jsp\"),\n");\r
+               if(!entity.isSkipConfirm()){\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_CONFIRM,location = \""+ jspPath +"/"+ varName +"-"+ crud +"Confirm.jsp\"),\n");\r
+               }\r
+               if(!entity.isSkipResult()){\r
+                       // TODO Cookie確認\r
+                       buf.append("// これだとCookie非対応機種の時にセッションが維持されなくね?\n");\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_EXECUTE,location = \""+ varName +"-crud!"+ crud +"Result.action?"+ writeRedirectPK() +"\", type=\"redirect\"),\n");\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_RESULT,        location = \""+ jspPath +"/"+ varName +"-"+ crud +"Result.jsp\"),\n");\r
+               }else{\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_EXECUTE,location = \""+ varName +"List\", type=\"redirectAction\"),\n");\r
+               }\r
+\r
+               return buf.toString();\r
+       }\r
+\r
+       private String writeResultsDelete(String jspPath, String crud){\r
+               String constName = StringUtils.toUnderscore(crud).toUpperCase();\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("// "+ crud +"\n");\r
+               if(!entity.isSkipDeleteConfirm()){\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_CONFIRM,location = \""+ jspPath +"/"+ varName +"-"+ crud +"Confirm.jsp\"),\n");\r
+               }\r
+               if(!entity.isSkipDeleteResult()){\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_EXECUTE,location = \""+ varName +"-crud\", type=\"redirectAction\", params={\"method\",ActionSupport."+ constName +"_RESULT}),\n");\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_RESULT,        location = \""+ jspPath +"/"+ varName +"-"+ crud +"Result.jsp\"),\n");\r
+               }else{\r
+                       buf.append("@Result(name = ActionSupport."+ constName +"_EXECUTE,location = \""+ varName +"List\", type=\"redirectAction\"),\n");\r
+               }\r
+\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * PKをentityからgetするメソッドをカンマ区切りで列挙する。\r
+        * @return\r
+        */\r
+       public String writePrimaryKeyGetter(){\r
+               return new DaoWriter(entity).writePrimaryKeyGetter();\r
+       }\r
+\r
+       /**\r
+        * Resultアノテーションリダイレクト用PK書き出し\r
+        * @return\r
+        */\r
+       public String writeRedirectPK(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       buf.append(entity.getShortname()+"."+attr.getVarName()+"="+"${"+entity.getShortname()+"."+attr.getVarName()+"}");\r
+               }\r
+               return buf.toString();\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/writer/DaoWriter.java b/lacoder/src/com/lavans/lacoder/writer/DaoWriter.java
new file mode 100644 (file)
index 0000000..4d0b7e1
--- /dev/null
@@ -0,0 +1,166 @@
+package com.lavans.lacoder.writer;\r
+\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+public class DaoWriter {\r
+       //private static Log logger = LogFactory.getLog(DaoWriter.class);\r
+       private Entity entity;\r
+\r
+       public DaoWriter(Entity entity){\r
+               this.entity = entity;\r
+       }\r
+\r
+       public Entity getEntity() {\r
+               return entity;\r
+       }\r
+\r
+       public void setEntity(Entity entity) {\r
+               this.entity = entity;\r
+       }\r
+\r
+\r
+       public String writeBindPk(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       String constStr = entity.getClassName() +"."+ attr.getConstName();\r
+\r
+                       if(attr.getJavaType().equals("Date")){\r
+                               buf.append("st.setTimestamp("+ constStr +",new Timestamp("+ attr.getVarName() +".getTime())));\n");\r
+                       }else{\r
+                               buf.append("st.set"+ attr.getJdbcMethodName()+"("+ constStr +","+ attr.getVarName() +");\n");\r
+                       }\r
+               }\r
+               return StringUtils.indent(buf.toString(),3);\r
+       }\r
+\r
+       /**\r
+        * selectに必要なキーがそろっているか確認する。\r
+        * Stringが空でないかどうかだけチェック。\r
+        * @return\r
+        */\r
+       public String writeSelectCheck(){\r
+               StringBuffer buf = new StringBuffer();\r
+\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       if(attr.getJavaType().equals("String")){\r
+                               buf.append("if("+ attr.getVarName() +"==null || "+ attr.getVarName() +".equals(\"\")){;\n");\r
+                               buf.append("    logger.info(\""+ attr.getVarName() +" is empty\");\n");\r
+                               buf.append("    return null;");\r
+                               buf.append("}");\r
+                       }\r
+               }\r
+\r
+               return StringUtils.indent(buf.toString(),2);\r
+       }\r
+\r
+\r
+       public String writeBindInsert(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       buf.append(bindStr(attr));\r
+               }\r
+               return StringUtils.indent(buf.toString(),3);\r
+       }\r
+\r
+       public String writeBindUpdate(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       if(attr.getName().equals("insertDatetime")){\r
+                               // 登録日時は更新しない\r
+                               continue;\r
+                       }\r
+                       buf.append(bindStr(attr));\r
+               }\r
+               return StringUtils.indent(buf.toString(),3);\r
+       }\r
+\r
+       public String writeBindPK(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       buf.append(bindStr(attr));\r
+               }\r
+               return StringUtils.indent(buf.toString(),3);\r
+       }\r
+\r
+       private String bindStr(Attribute attr){\r
+               StringBuffer buf = new StringBuffer();\r
+\r
+               String getMethodStr = entity.getShortname() +"."+ attr.getGetterName() +"()";\r
+               String constStr = entity.getClassName() +"."+ attr.getConstName();\r
+\r
+               if(attr.getJavaType().equals("Date")){\r
+                       buf.append("if("+ getMethodStr +"!=null){\n");\r
+                       buf.append("    st.setTimestamp("+ constStr +",new Timestamp("+ getMethodStr +".getTime()));\n");\r
+                       buf.append("}else{\n");\r
+                       buf.append("    st.setTimestamp("+ constStr +", null);\n");\r
+                       // Oracle 9以前ではsetNullが使えない\r
+                       //buf.append("                          st.setNull("+ attr.getName() +",Types.NULL); --+"\r
+                       buf.append("}\n");\r
+\r
+               }else{\r
+                       buf.append("st.set"+ attr.getJdbcMethodName()+"("+ constStr +","+ getMethodStr +");\n");\r
+               }\r
+\r
+               return buf.toString();\r
+\r
+               // Oracleの時に以下の処理が必要かも\r
+               //\r
+//                     }else if(attr.getJavaType().equals("byte[]")){\r
+//                             buf.append("if("+ getMethodStr +"!=null){\n");\r
+//                             buf.append("    st.setBlob("+ constStr +", new SerialBlob("+ getMethodStr +")));\n");\r
+//                             buf.append("}else{\n");\r
+//                             buf.append("st.setTimestamp("+ constStr +", null);\n");\r
+//                             buf.append("}\n");\r
+       }\r
+\r
+       /**\r
+        * PKをentityからgetするメソッドをカンマ区切りで列挙する。\r
+        * @return\r
+        */\r
+       public String writePrimaryKeyGetter(){\r
+               return writePrimaryKeyGetter(entity.getShortname());\r
+       }\r
+\r
+       /**\r
+        * PKをpkからgetするメソッドをカンマ区切りで列挙する。\r
+        * @return\r
+        */\r
+       public String writePrimaryKeyGetterFromPK(){\r
+               return writePrimaryKeyGetter("pk");\r
+       }\r
+\r
+       /**\r
+        * PKをentityからgetするメソッドをカンマ区切りで列挙する。\r
+        * @return\r
+        */\r
+       private String writePrimaryKeyGetter(String name){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       buf.append(", "+ name +"."+ attr.getGetterName() +"()");\r
+               }\r
+               return buf.substring(2);\r
+       }\r
+\r
+       public String writeMakeTarget(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       String setter = attr.getSetterName();\r
+                       String columnName = "\""+ attr.getColumnName() +"\"";\r
+                       buf.append("if(columnNames.contains("+ columnName +")) target."+ setter +"(rs.get"+ attr.getJdbcMethodName() +"("+ columnName +"));\n" );\r
+               }\r
+               return StringUtils.indent(buf.toString(), 2);\r
+       }\r
+\r
+\r
+       public String writeMakeTargetPK(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       String setter = attr.getSetterName();\r
+                       String columnName = "\""+ attr.getColumnName() +"\"";\r
+                       buf.append("target."+ setter +"(rs.get"+ attr.getJdbcMethodName() +"("+ columnName +"));\n" );\r
+               }\r
+               return StringUtils.indent(buf.toString(), 2);\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/writer/DaoXmlWriter.java b/lacoder/src/com/lavans/lacoder/writer/DaoXmlWriter.java
new file mode 100644 (file)
index 0000000..b78dbf7
--- /dev/null
@@ -0,0 +1,182 @@
+package com.lavans.lacoder.writer;\r
+\r
+import java.util.List;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import com.lavans.lacoder.db.OracleDialect;\r
+import com.lavans.lacoder.db.TypeManager;\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+public class DaoXmlWriter {\r
+       private static Log logger = LogFactory.getLog(DaoXmlWriter.class);\r
+       private Entity entity;\r
+       private String pkWhere;\r
+       String tableName;\r
+\r
+       private String pkSelectColumns;\r
+       private String allSelectColumns;\r
+       private String allInsertColumns;\r
+       private String allUpdateColumns;\r
+\r
+       public DaoXmlWriter(Entity entity){\r
+               this.entity = entity;\r
+               parse();\r
+       }\r
+\r
+       public Entity getEntity() {\r
+               return entity;\r
+       }\r
+\r
+       public void setEntity(Entity entity) {\r
+               this.entity = entity;\r
+               parse();\r
+       }\r
+\r
+       public void parse(){\r
+               tableName = StringUtils.toUnderscore(entity.getName()).toUpperCase();\r
+               // primaryKeyが2つ以上の場合はとりあえず両方ともStringとして扱う?。\r
+               List<Attribute> primaryKeyList = entity.getPrimaryKeyList();\r
+               logger.info("--pk数:"+primaryKeyList.size());\r
+\r
+               // WHERE句における更新条件作成\r
+               StringBuffer whereBuf = new StringBuffer();\r
+               StringBuffer pkBuf = new StringBuffer();\r
+               // 全カラム名\r
+               StringBuffer allSelectBuf = new StringBuffer();\r
+               StringBuffer allInsertBuf = new StringBuffer();\r
+               StringBuffer allUpdateBuf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       if(attr.isPrimaryKey()){\r
+                               whereBuf.append(" AND "+ attr.getConstName() +"=:"+ attr.getName());\r
+                               pkBuf.append(", ").append(tableName).append(".").append(attr.getConstName());\r
+                       }\r
+                       allSelectBuf.append(", ").append(tableName).append(".").append(attr.getConstName());\r
+                       allInsertBuf.append(attr.getInsertSql());\r
+                       allUpdateBuf.append(attr.getUpdateSql());\r
+               }\r
+               pkWhere = whereBuf.substring(5);\r
+               pkSelectColumns  = pkBuf.substring(2);\r
+               allSelectColumns = allSelectBuf.substring(2);\r
+               allInsertColumns = allInsertBuf.substring(2);\r
+               allUpdateColumns = allUpdateBuf.substring(2);\r
+       }\r
+\r
+       public String writeSelectSql(){\r
+               return "SELECT "+ allSelectColumns +" FROM "+ tableName +" WHERE "+ pkWhere;\r
+       }\r
+\r
+       public String writeNextValSql(){\r
+               return entity.getTypeManager().getNextval(entity.get(0));\r
+       }\r
+\r
+       public String writeInsertSql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("INSERT INTO "+ tableName +" VALUES(");\r
+               buf.append(""+ allInsertColumns +")");\r
+               return buf.toString();\r
+       }\r
+       public String writeUpdateSql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("UPDATE "+ tableName +" SET ");\r
+               buf.append(""+ allUpdateColumns +" WHERE "+ pkWhere);\r
+               return buf.toString();\r
+       }\r
+\r
+       // 削除\r
+       public String writeDeleteSql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("DELETE FROM "+ tableName +" WHERE "+ pkWhere);\r
+               return buf.toString();\r
+       }\r
+       public String writeDeleteAnySql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("DELETE FROM "+ tableName +" $condition");\r
+               return buf.toString();\r
+       }\r
+\r
+       // 一覧\r
+       public String writeListCountSql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("SELECT COUNT(1) FROM "+ tableName +" $condition");\r
+               return buf.toString();\r
+       }\r
+       public String writeListPagerSql(){\r
+               TypeManager typeManager = entity.getTypeManager();\r
+               StringBuffer buf = new StringBuffer();\r
+               if(typeManager instanceof OracleDialect){\r
+                       buf.append("SELECT * FROM (SELECT A.*, ROWNUM AS NUM FROM (\n ");\r
+               }\r
+               buf.append(writeListAnySql()).append("\n$condition \n");\r
+               if(typeManager instanceof OracleDialect){\r
+                       buf.append(") A ) WHERE NUM>:_start AND NUM<=:_end\n");\r
+               }else{\r
+                       // Postgres/H2DB用 MySQLもOK?\r
+                       buf.append("LIMIT :_rows OFFSET :_offset\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+       public String writeListPagerPkSql(){\r
+               TypeManager typeManager = entity.getTypeManager();\r
+               StringBuffer buf = new StringBuffer();\r
+               if(typeManager instanceof OracleDialect){\r
+                       buf.append("SELECT * FROM (SELECT A.*, ROWNUM AS NUM FROM (\n ");\r
+               }\r
+               buf.append(writeListAnySql()).append("\n$condition \n");\r
+               if(typeManager instanceof OracleDialect){\r
+                       buf.append(") A ) WHERE NUM>:_start AND NUM<=:_end");\r
+               }else{\r
+                       // Postgres用 MySQLもOK?\r
+                       buf.append("LIMIT :_rows OFFSET :_offset");\r
+               }\r
+               return buf.toString();\r
+       }\r
+       public String writeListAnySql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("SELECT "+ allSelectColumns +"\nFROM "+ tableName);  // $condition\n$order"\r
+               return buf.toString();\r
+       }\r
+\r
+       public String writeListAnyPkSql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("SELECT "+ pkSelectColumns +"\nFROM "+ tableName);   // $condition\n$order"\r
+               return buf.toString();\r
+       }\r
+\r
+       public String writeBackupSql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("INSERT INTO "+ tableName +"_BAK SELECT :pk,"+ allSelectColumns +"\nFROM "+ tableName +" WHERE "+ pkWhere);  // $condition\n$order"\r
+               return buf.toString();\r
+       }\r
+       public String writeBackupNextValSql(){\r
+               return entity.getTypeManager().getNextval(entity.get(0)).replace(tableName +"_PK_SEQ", tableName +"_BAK_PK_SEQ");\r
+       }\r
+\r
+       public String writePagerBakSql(){\r
+               TypeManager typeManager = entity.getTypeManager();\r
+               StringBuffer buf = new StringBuffer();\r
+               if(typeManager instanceof OracleDialect){\r
+                       buf.append("SELECT * FROM (SELECT A.*, ROWNUM AS NUM FROM (\n ");\r
+               }\r
+               buf.append("SELECT BACKUP_ID,BACKUP_DATE,"+ allSelectColumns +"\nFROM "+ tableName +"_BAK");\r
+               buf.append("\n$condition \n");\r
+               if(typeManager instanceof OracleDialect){\r
+                       buf.append(") A ) WHERE NUM>:_start AND NUM<=:_end\n");\r
+               }else{\r
+                       // Postgres/H2DB用 MySQLもOK?\r
+                       buf.append("LIMIT :_rows OFFSET :_offset\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       public String writeRestoreSql(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("INSERT INTO "+ tableName +"_BAK");\r
+               buf.append("SELECT "+ pkSelectColumns + allSelectColumns +"\nFROM "+ tableName +"_BAK \nWHERE "+ pkWhere);\r
+               return buf.toString();\r
+       }\r
+\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/writer/JspTemplateEngine.java b/lacoder/src/com/lavans/lacoder/writer/JspTemplateEngine.java
new file mode 100644 (file)
index 0000000..c5e3de6
--- /dev/null
@@ -0,0 +1,160 @@
+package com.lavans.lacoder.writer;\r
+\r
+import java.io.BufferedReader;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.io.InputStreamReader;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+import com.lavans.lacoder.main.Target;\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.lacoder.model.Role;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+public class JspTemplateEngine {\r
+       private static Log logger = LogFactory.getLog(DaoWriter.class);\r
+       private Entity entity;\r
+       private Role role;\r
+       //private String varName;\r
+       private Target target = Target.getSelectedTarget();\r
+       public JspTemplateEngine(Entity entity, Role role){\r
+               this.entity = entity;\r
+               this.role = role;\r
+               //varName = entity.getShortname();\r
+       }\r
+\r
+       private StringBuilder getTemplate(String fileName){\r
+               // roleの下から取得\r
+               logger.debug(target.getTemplatePath()+ "/"+ role +"/"+ fileName);\r
+               File file = new File(target.getTemplatePath()+ "/"+ role +"/"+ fileName);\r
+               if(!file.exists()){\r
+                       // 存在しないなら親から\r
+                       logger.debug(target.getTemplatePath()+ "/"+ fileName);\r
+                       file = new File(target.getTemplatePath()+ "/"+ fileName);\r
+                       // これも存在しないならエラー\r
+                       if(!file.exists()){\r
+                               logger.error("テンプレートファイルが存在しない:"+ fileName);\r
+                       }\r
+               }\r
+               StringBuilder buf = new StringBuilder((int)file.length());\r
+               try {\r
+                       BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));\r
+                       String line;\r
+                       while((line = in.readLine()) != null){\r
+                               buf.append(line+"\n");\r
+                       }\r
+               } catch (IOException e) {\r
+                       logger.error(e);\r
+               }\r
+\r
+               return buf;\r
+       }\r
+\r
+       private class TagSplitter{\r
+               String before;\r
+               String body;\r
+               String after;\r
+               String[] attrs;\r
+               /**\r
+                * 空要素タグの事は<del>明日考えよう</del>考えた\r
+                * @param buf\r
+                * @param tagName\r
+                * @return\r
+                */\r
+               public boolean find(StringBuilder buf, String tagName){\r
+                       String startTag = "<#"+tagName +" ";\r
+                       String endTag   = "</#"+tagName +">";\r
+                       int startTagIndex = buf.indexOf(startTag);\r
+                       if(startTagIndex<0) return false;\r
+\r
+                       // タグの前\r
+                       before = buf.substring(0, startTagIndex);\r
+                       before = StringUtils.chomp(before);\r
+                       logger.debug("before:"+before);\r
+\r
+                       int startTagEnd = buf.indexOf(">", startTagIndex);\r
+                       String tagAttrStr = buf.substring(startTagIndex+2, startTagEnd);\r
+                       logger.debug("tagAttrStr:"+ tagAttrStr);\r
+\r
+                       if(tagAttrStr.endsWith("/")){\r
+                               // 空要素タグなら\r
+                               body="";\r
+                               tagAttrStr = tagAttrStr.substring(0, tagAttrStr.length()-1);\r
+                               after = buf.substring(startTagEnd+1);\r
+                               logger.debug("after:"+after);\r
+                       }else{\r
+                               int endTagIndex =  buf.indexOf(endTag);\r
+                               body = buf.substring(startTagEnd+1, endTagIndex);\r
+                               body = StringUtils.chomp(body);\r
+                               logger.debug("body:"+body);\r
+\r
+                               after = buf.substring(endTagIndex+endTag.length());\r
+                               logger.debug("after:"+after);\r
+                       }\r
+                       attrs = tagAttrStr.split(" ");\r
+\r
+                       return true;\r
+               }\r
+       }\r
+       public String writeJsp(String method){\r
+               // ファイルの読み込み\r
+               StringBuilder buf = getTemplate(method+".tmpl");\r
+               TagSplitter splitter = new TagSplitter();\r
+               while(splitter.find(buf, "foreach")){\r
+                       StringBuilder bufwork = new StringBuilder();\r
+                       bufwork.append(splitter.before);\r
+                       for(Attribute attr: entity.getAttrList()){\r
+                               // pkのみ\r
+                               if(splitter.attrs.length==4 && splitter.attrs[2].equals("only") && splitter.attrs[3].equals("pk")){\r
+                                       if(!attr.isPrimaryKey()){ continue; }\r
+                               }\r
+                               // pk以外\r
+                               if(splitter.attrs.length==4 && splitter.attrs[2].equals("except") && splitter.attrs[3].equals("pk")){\r
+                                       if(attr.isPrimaryKey()){ continue; }\r
+                               }\r
+                               String body = splitter.body;\r
+                               body = body.replace("<#attr title>", attr.getTitle());\r
+                               body = body.replace("<#attr name>", attr.getVarName());\r
+                               body = body.replace("<#attr getterName>", attr.getGetterName());\r
+                               body = body.replace("<#attr constName>", attr.getConstName());\r
+                               bufwork.append(body);\r
+                       }\r
+                       bufwork.append(splitter.after);\r
+                       // 入れ替え\r
+                       buf = bufwork;\r
+               }\r
+\r
+               while(splitter.find(buf, "if")){\r
+                       StringBuilder bufwork = new StringBuilder();\r
+                       bufwork.append(splitter.before);\r
+                       bufwork.append(splitter.body);\r
+                       bufwork.append(splitter.after);\r
+                       // 入れ替え\r
+                       buf = bufwork;\r
+               }\r
+\r
+               //\r
+               String result = buf.toString();\r
+               result = result.replace("<#entity title>", entity.getTitle());\r
+               result = result.replace("<#entity name>", entity.getShortname());\r
+               result = result.replace("<#entity className>", entity.getClassName());\r
+               result = result.replace("<#entity classNameFull>", entity.getClassNameFull());\r
+               result = result.replace("<#role>", role.toString());\r
+               // foreach attr attriute\r
+//             entity.geta\r
+//             buf.indexOf()\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * PKをentityからgetするメソッドをカンマ区切りで列挙する。\r
+        * @return\r
+        */\r
+       public String writePrimaryKeyGetter(){\r
+               return new DaoWriter(entity).writePrimaryKeyGetter();\r
+       }\r
+}\r
diff --git a/lacoder/src/com/lavans/lacoder/writer/ModelWriter.java b/lacoder/src/com/lavans/lacoder/writer/ModelWriter.java
new file mode 100644 (file)
index 0000000..3c55bab
--- /dev/null
@@ -0,0 +1,245 @@
+package com.lavans.lacoder.writer;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import com.lavans.lacoder.model.Attribute;\r
+import com.lavans.lacoder.model.Entity;\r
+import com.lavans.luz2.commons.StringUtils;\r
+\r
+public class ModelWriter {\r
+       private Entity entity;\r
+\r
+       public ModelWriter(Entity entity){\r
+               this.entity = entity;\r
+       }\r
+\r
+       public Entity getEntity() {\r
+               return entity;\r
+       }\r
+\r
+       public void setEntity(Entity entity) {\r
+               this.entity = entity;\r
+       }\r
+\r
+       /**\r
+        * このEntityに必要なimportを列挙する。\r
+        * @return\r
+        */\r
+       public String writeImports(){\r
+               StringBuffer buf = new StringBuffer();\r
+               if(entity.hasDate()){\r
+                       buf.append("import java.util.Date;\n");\r
+                       buf.append("import java.text.DateFormat;\n");\r
+                       buf.append("import java.text.ParseException;\n");\r
+                       buf.append("import java.text.SimpleDateFormat;\n");\r
+               }\r
+\r
+               Set<String> classSet = new HashSet<String>();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       if((!attr.getClassName().equals(""))){\r
+                               classSet.add(attr.getClassName());\r
+                       }\r
+               }\r
+\r
+               for(String className: classSet){\r
+                       buf.append("import "+ className +";\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * 定数定義書き出し。\r
+        * @return\r
+        */\r
+       public String writeConsts(){\r
+               StringBuffer buf = new StringBuffer();\r
+               buf.append("    public static final String _NAME = \""+ entity.getName() +"\";\n");\r
+\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       buf.append("    public static final String "+ attr.getConstName() +" = \""+ attr.getName() +"\";\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * インスタンス変数書きだし。\r
+        * @return\r
+        */\r
+       public String writeInstanceVarsPK(){\r
+               return StringUtils.indent(writeInstanceVars(entity.getPrimaryKeyList()),1);\r
+       }\r
+       public String writeInstanceVars(){\r
+               return writeInstanceVars(entity.getAttrList());\r
+       }\r
+       private String writeInstanceVars(List<Attribute> list){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: list){\r
+                       buf.append("    /** "+ attr.getTitle() +" */\n");\r
+                       buf.append("    private "+ attr.getJavaType() +" "+ attr.getVarName() +" = "+ attr.getInitValue() +";\n");\r
+                       if(!attr.getClassName().equals("") && !attr.isEnum()){\r
+                               // クラスを持つ場合\r
+                               buf.append("    private "+ attr.getClassLastName() +" "+ attr.getClassVarName() +" = null;\n");\r
+                       }\r
+               }\r
+               // enumはsetter/getterで直接参照するのでクラス型は必要ない\r
+\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * getParameters()の各属性の書き出し\r
+        * @return\r
+        */\r
+       public String writeGetParameters(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+//                     if(org.apache.commons.lang.StringUtils)\r
+                       buf.append("\t\t"+attr.toGetParameter()).append("\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * setParameters()の各属性の書き出し\r
+        * @return\r
+        */\r
+       public String writeSetParameters(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+//                     if(org.apache.commons.lang.StringUtils)\r
+                       buf.append("\t\t"+attr.toSetParameter()).append("\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * getAttributeMap()の各属性の書き出し\r
+        * @return\r
+        */\r
+       public String writeGetAttributeInfo(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       buf.append("\t\t"+attr.toGetAttributeInfo()).append("\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * getAttributeMap()の各属性の書き出し\r
+        * @return\r
+        */\r
+       public String writeGetAttributeMap(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       buf.append("\t\t"+attr.toGetAttributeMap()).append("\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * アクセッサの書き出し\r
+        * @return\r
+        */\r
+       /**\r
+        * インスタンス変数書きだし。\r
+        * @return\r
+        */\r
+       public String writeAccesssorPK(){\r
+               return StringUtils.indent(writeAccesssor(entity.getPrimaryKeyList()),1);\r
+       }\r
+       public String writeAccesssor(){\r
+               return writeAccesssor(entity.getAttrList());\r
+       }\r
+       private String writeAccesssor(List<Attribute> list){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: list){\r
+//                     if(org.apache.commons.lang.StringUtils)\r
+                       buf.append(attr.toGetter()).append("\n");\r
+                       buf.append(attr.toSetter()).append("\n");\r
+               }\r
+               return buf.toString();\r
+       }\r
+\r
+       /**\r
+        * PK作成用\r
+        * @return\r
+        */\r
+       public String writePKSetter(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+//                     if(org.apache.commons.lang.StringUtils)\r
+                       buf.append("pk."+ attr.getSetterName()).append("("+ attr.getGetterName() +"());\n");\r
+               }\r
+               return StringUtils.indent(buf.toString(),2);\r
+       }\r
+\r
+       /**\r
+        * getParameters()の各属性の書き出し\r
+        * @return\r
+        */\r
+       public String writeGetParametersPK(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       buf.append(attr.toGetParameter()).append("\n");\r
+               }\r
+               return StringUtils.indent(buf.toString(),3);\r
+       }\r
+\r
+       /**\r
+        * setParameters()の各属性の書き出し\r
+        * @return\r
+        */\r
+       public String writeSetParametersPK(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       buf.append(attr.toSetParameter()).append("\n");\r
+               }\r
+               return StringUtils.indent(buf.toString(),3);\r
+       }\r
+\r
+       /**\r
+        * getAttributeMap()の各属性の書き出し\r
+        * @return\r
+        */\r
+       public String writeGetAttributeMapPK(){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: entity.getPrimaryKeyList()){\r
+                       buf.append(attr.toGetAttributeMap()).append("\n");\r
+               }\r
+               return StringUtils.indent(buf.toString(),3);\r
+       }\r
+\r
+       /**\r
+        * メンバーを文字列に書き出し\r
+        * @return\r
+        */\r
+       public String writeStringMembersPK(){\r
+               return writeStringMembers(entity.getPrimaryKeyList());\r
+       }\r
+       public String writeStringMembers(){\r
+               List<Attribute> list = new ArrayList<Attribute>();\r
+               // PKと名前(あれば)を入れる\r
+               for(Attribute attr: entity.getAttrList()){\r
+                       if(attr.isPrimaryKey()){\r
+                               list.add(attr);\r
+                       }else if(attr.getName().startsWith(entity.getName()) && attr.getName().endsWith("Name")){\r
+                               list.add(attr);\r
+                       }\r
+               }\r
+               return writeStringMembers(list);\r
+       }\r
+       private String writeStringMembers(List<Attribute> list){\r
+               StringBuffer buf = new StringBuffer();\r
+               for(Attribute attr: list){\r
+                       if(attr.getJavaType().equals("String")){\r
+                               buf.append(" +\":\"+ "+ attr.getGetterName()+"()");\r
+                       }else{\r
+                               buf.append(" +\":\"+ String.valueOf("+ attr.getGetterName() +"())");\r
+                       }\r
+               }\r
+               return buf.substring(7);\r
+       }\r
+}\r
diff --git a/luz2/conf/.gitignore b/luz2/conf/.gitignore
new file mode 100644 (file)
index 0000000..1d5e2c9
--- /dev/null
@@ -0,0 +1 @@
+/luz.xml