--- /dev/null
+<?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
--- /dev/null
+<?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>
--- /dev/null
+#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
--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+#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
--- /dev/null
+#Tue Jun 30 16:10:03 JST 2009\r
+eclipse.preferences.version=1\r
+encoding/<project>=UTF-8\r
--- /dev/null
+<?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
--- /dev/null
+<?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>
--- /dev/null
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
--- /dev/null
+Window
\ No newline at end of file
--- /dev/null
+#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
--- /dev/null
+#Thu Dec 04 18:17:16 JST 2008\r
+eclipse.preferences.version=1\r
+org.eclipse.wst.ws.service.policy.projectEnabled=false\r
--- /dev/null
+Manifest-Version: 1.0\r
+Class-Path: \r
+\r
--- /dev/null
+<?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
--- /dev/null
+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
--- /dev/null
+<%@ 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
--- /dev/null
+### 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
--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+<%-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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<<%= className %>> 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<Map<String, Object>> 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<<%= className %>> list(Map<String, String[]> cond) throws SQLException{\r
+ // copy for editng key. ex) "name" to "%name%"\r
+ Map<String, String[]> condWork = new HashMap<String, String[]>();\r
+ for(Map.Entry<String, String[]> 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()>4){\r
+ sql += "\nWHERE "+ condition.substring(4);\r
+ }\r
+ List<<%= className %>> 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<<%= className %>> pager(PageInfo pageInfo, Map<String, String[]> cond) throws SQLException{\r
+ // copy for editng key. ex) "name" to "%name%"\r
+ Map<String, String[]> condWork = new HashMap<String, String[]>();\r
+ for(Map.Entry<String, String[]> 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()>4){\r
+ condition = "WHERE "+ condition.substring(4);\r
+ }\r
+ Map<String, Object> 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<Map<String, Object>> 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<<%= className %>> list = dao.list(<%= className %>.class, sql, searchCond);\r
+\r
+ // add to pager\r
+ Pager<<%= className %>> pager = new Pager<<%= className %>>(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<Map<String, Object>> 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<String, Object> searchCond = new HashMap<String, Object>();\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<<%= className %>Bak> pagerBak(PageInfo pageInfo, Map<String, String[]> cond) throws SQLException{\r
+ // copy for editng key. ex) "name" to "%name%"\r
+ Map<String, String[]> condWork = new HashMap<String, String[]>();\r
+ for(Map.Entry<String, String[]> 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()>4){\r
+ condition = "WHERE "+ condition.substring(4);\r
+ }\r
+ Map<String, Object> 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<Map<String, Object>> 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<<%= className %>Bak> list = dao.list(<%= className %>Bak.class, sql, searchCond);\r
+\r
+ // add to pager\r
+ Pager<<%= className %>Bak> pager = new Pager<<%= className %>Bak>(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<String, Object> searchCond = new HashMap<String, Object>();\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
--- /dev/null
+<!-- $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
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!DOCTYPE well-formed>\r
+<!--\r
+ $Id: DaoBaseXml.jsp 421 2011-07-29 09:55:09Z dobashi $\r
+ created: <%= sdf.format(new Date()) %>\r
+\r
+ This source code is generated by lacoder.\r
+ DO NOT EDIT.<%--\r
+ @see http://www.lavans.com/soft/lacoder/\r
+--%>\r
+ -->\r
+<sql>\r
+ <!-- select 1 record -->\r
+ <load>\r
+ <![CDATA[\r
+<%= writer.writeSelectSql() %>\r
+ ]]>\r
+ </load>\r
+\r
+<% // ID(プライマリキー)がsequenceの時\r
+ if(entity.get(0).isSequence()){\r
+%> <nextval>\r
+ <![CDATA[\r
+<%= writer.writeNextValSql() %>\r
+ ]]>\r
+ </nextval>\r
+\r
+<%\r
+ }\r
+%> <insert>\r
+ <![CDATA[\r
+<%= writer.writeInsertSql() %>\r
+ ]]>\r
+ </insert>\r
+\r
+ <update>\r
+ <![CDATA[\r
+<%= writer.writeUpdateSql() %>\r
+ ]]>\r
+ </update>\r
+\r
+ <delete>\r
+ <![CDATA[\r
+<%= writer.writeDeleteSql() %>\r
+ ]]>\r
+ </delete>\r
+\r
+ <deleteAny>\r
+ <![CDATA[\r
+<%= writer.writeDeleteAnySql() %>\r
+ ]]>\r
+ </deleteAny>\r
+\r
+ <count>\r
+ <![CDATA[\r
+<%= writer.writeListCountSql() %>\r
+ ]]>\r
+ </count>\r
+\r
+ <pager>\r
+ <![CDATA[\r
+<%= writer.writeListPagerSql() %>\r
+ ]]>\r
+ </pager>\r
+\r
+ <pagerPk>\r
+ <![CDATA[\r
+<%= writer.writeListPagerPkSql() %>\r
+ ]]>\r
+ </pagerPk>\r
+\r
+ <list>\r
+ <![CDATA[\r
+<%= writer.writeListAnySql() %>\r
+ ]]>\r
+ </list>\r
+\r
+ <listPk>\r
+ <![CDATA[\r
+<%= writer.writeListAnyPkSql() %>\r
+ ]]>\r
+ </listPk>\r
+<% if(entity.hasBackup()){ %>\r
+ <backup>\r
+ <![CDATA[\r
+<%= writer.writeBackupSql() %>\r
+ ]]>\r
+ </backup>\r
+\r
+ <backupNextval>\r
+ <![CDATA[\r
+<%= writer.writeBackupNextValSql() %>\r
+ ]]>\r
+ </backupNextval>\r
+\r
+ <pagerBak>\r
+ <![CDATA[\r
+<%= writer.writePagerBakSql() %>\r
+ ]]>\r
+ </pagerBak>\r
+\r
+ <restore>\r
+ <![CDATA[\r
+<%= writer.writeRestoreSql() %>\r
+ ]]>\r
+ </restore>\r
+<% } %>\r
+</sql>\r
+</pre>\r
+\r
+<!-- <%= debugStr %> -->\r
+</body>\r
+\r
--- /dev/null
+<!-- $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
+<?xml version="1.0" encoding="UTF-8" ?>\r
+<!DOCTYPE well-formed>\r
+<!--\r
+ $Id: DaoXml.jsp 421 2011-07-29 09:55:09Z dobashi $\r
+ created: <%= sdf.format(new Date()) %>\r
+ -->\r
+<sql>\r
+ <!-- sample -->\r
+ <sample>\r
+ <![CDATA[\r
+INPUT YOUR SQL\r
+ ]]>\r
+ </sample>\r
+</sql>\r
+</pre>\r
+\r
+<!-- <%= debugStr %> -->\r
+</body>\r
+\r
--- /dev/null
+<!-- $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<String,String> validate() {\r
+ Map<String,String> errors = new HashMap<String,String>(2);\r
+\r
+ return errors;\r
+ }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
+\r
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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<String, Class<?>> getAttributeInfo(){\r
+ Map<String, Class<?>> map = new HashMap<String, Class<?>>();\r
+<%= writer.writeGetAttributeInfo() %>\r
+ return map;\r
+ }\r
+\r
+ // instance variables.\r
+<%= writer.writeInstanceVars() %>\r
+\r
+ /**\r
+ * Get Map<String, String[]> paramegters from Attributes for HTTP\r
+ */<%-- @SuppressWarnings("unchecked") --%>\r
+ public Map<String, String[]> getParameters() {\r
+ return getParameters("");\r
+ }\r
+ @Override\r
+ public Map<String, String[]> getParameters(String prefix) {\r
+ Map<String, String[]> map = new HashMap<String, String[]>();\r
+<%= writer.writeGetParameters() %>\r
+ return map;\r
+ }\r
+\r
+ /**\r
+ * Set Attributes from Map<String, String[]> paramegters for HTTP\r
+ */\r
+ public void setParameters(Map<String, String[]> map){\r
+ setParameters(map, "");\r
+ }\r
+ public void setParameters(Map<String, String[]> map, String prefix){\r
+<%= writer.writeSetParameters()\r
+%> }\r
+\r
+ /**\r
+ * Get Map<String, Object> paramegters from Attributes for SQL\r
+ */<%-- @SuppressWarnings("unchecked") --%>\r
+ @Override\r
+ public Map<String, Object> getAttributeMap() {\r
+ Map<String, Object> map = new HashMap<String, Object>();\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<String, String[]> paramegters from Attributes for HTTP\r
+ */<%-- @SuppressWarnings("unchecked") --%>\r
+ public Map<String, String[]> getParameters() {\r
+ return getParameters("");\r
+ }\r
+ @Override\r
+ public Map<String, String[]> getParameters(String prefix) {\r
+ Map<String, String[]> map = new HashMap<String, String[]>();\r
+<%= writer.writeGetParametersPK() %>\r
+ return map;\r
+ }\r
+\r
+ /**\r
+ * Set Attributes from Map<String, String[]> paramegters for HTTP\r
+ */\r
+ public void setParameters(Map<String, String[]> map){\r
+ setParameters(map, "");\r
+ }\r
+ @Override\r
+ public void setParameters(Map<String, String[]> map, String prefix){\r
+<%= writer.writeSetParametersPK()\r
+%> }\r
+\r
+ /**\r
+ * Get Map<String, Object> paramegters from Attributes for SQL\r
+ */<%-- @SuppressWarnings("unchecked") --%>\r
+ @Override\r
+ public Map<String, Object> getAttributeMap() {\r
+ Map<String, Object> map = new HashMap<String, Object>();\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
--- /dev/null
+<!-- $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<<%= className %>.PK, <%= className %>> <%= entityName %>Map = new ConcurrentHashMap<<%= className %>.PK, <%= className %>>();\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<<%= className %>> <%= 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<<%= className %>> list(Map<String,String[]> 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<<%= className %>> pager(PageInfo pageInfo, Map<String,String[]> cond) throws SQLException{\r
+ return <%= entityName %>Dao.pager(pageInfo, cond);\r
+ }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
--- /dev/null
+<!-- $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<Integer, <%= className %>> <%= listName %>Map = new HashMap<Integer, <%= className %>>(<%= enumClass.size() %>);\r
+<% }else{ %>\r
+ private static Map<String, <%= className %>> <%= listName %>Map = new HashMap<String, <%= className %>>(<%= enumClass.size() %>);\r
+<% }\r
+%> private static List<<%= className %>> <%= listName %>List = new ArrayList<<%= className %>>(<%= 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<<%= className %>> 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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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<<%= className %>> 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<String, String[]> cond = DaoUtils.getSearchCond(getRequest().getParameterMap(), "cond.");\r
+ Pager<<%= className %>> 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<String, String> errors = <%= varName %>.validate();\r
+ if(errors.size()>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<String, String> errors = <%= varName %>.validate();\r
+ if(errors.size()>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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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<<%= className %>> list(Map<String,String[]> 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<<%= className %>> pager(PageInfo pageInfo, Map<String,String[]> cond) throws SQLException{\r
+ return <%= entityName %>Manager.pager(pageInfo, cond);\r
+ }\r
+}\r
+</pre>\r
+<!--\r
+<%= debugStr %>\r
+-->\r
+</body>\r
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+<!-- $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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+/* $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
--- /dev/null
+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
--- /dev/null
+/* $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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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