diff --git a/AMM/.project b/AMM/.project new file mode 100644 index 0000000..94726ac --- /dev/null +++ b/AMM/.project @@ -0,0 +1,17 @@ + + + AMM + + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + + diff --git a/AMM/.settings/org.eclipse.core.resources.prefs b/AMM/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..4824b80 --- /dev/null +++ b/AMM/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/AMM/pom.xml b/AMM/pom.xml new file mode 100644 index 0000000..4b3281e --- /dev/null +++ b/AMM/pom.xml @@ -0,0 +1,732 @@ + + + 4.0.0 + + jp.co.y_net + AMM + AMM + 1.4.2 + pom + http://172.16.12.13/trac/P11344 + + + SunDataCenter + http://www.y-net.co.jp/ + + + + ../AMM_web + + + + + server001 + Sun Data Center Repository + http://172.16.12.13/maven + + + mirrors.ibiblio.org.pub.mirrors.maven2 + Central Mirror + http://mirrors.ibiblio.org/pub/mirrors/maven2 + + + com.springsource.repository.bundles.release + SpringSource Enterprise Bundle Repository - + SpringSource Bundle Releases + http://repository.springsource.com/maven/bundles/release + + + + com.springsource.repository.bundles.external + SpringSource Enterprise Bundle Repository - External + Bundle Releases + http://repository.springsource.com/maven/bundles/external + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.7 + 1.7 + true + true + UTF-8 + + + ${java.home}/lib/rt.jar + + + + + org.apache.maven.plugins + maven-resources-plugin + ${maven-resources-plugin.version} + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + + JavadocSiteExecution1 + site + + aggregate + + + + JavadocSiteExecution2 + site + + javadoc + + + + + package + true + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${maven-checkstyle-plugin.version} + + false + + + + org.apache.maven.plugins + maven-pmd-plugin + ${maven-pmd-plugin.version} + + + org.codehaus.mojo + cobertura-maven-plugin + ${cobertura-maven-plugin.version} + + + CoberturaCleanExecution1 + clean + + clean + + + + CoberturaPackageExecution1 + package + + cobertura + + + + + UTF-8 + + html + xml + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + org.apache.maven.plugins + maven-site-plugin + ${maven-site-plugin.version} + + ja + true + + + org.apache.maven.plugins + maven-project-info-reports-plugin + ${maven-project-info-reports-plugin.version} + + false + false + + + + dependencies + scm + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + + + + + com.atlassian.maven.plugins + maven-clover2-plugin + ${maven-clover2-plugin.version} + + true + true + false + + + + org.apache.maven.plugins + maven-shade-plugin + ${maven-shade-plugin.version} + + + org.apache.maven.plugins + maven-deploy-plugin + ${maven-deploy-plugin.version} + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + org.apache.maven.plugins + maven-pmd-plugin + + + org.codehaus.mojo + cobertura-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + org.apache.maven.plugins + maven-site-plugin + + + com.atlassian.maven.plugins + maven-clover2-plugin + + + org.apache.maven.plugins + maven-shade-plugin + + + + + + + + + + + + junit + junit + ${junit.version} + jar + test + false + + + net.sf.twip + twip + ${twip.version} + jar + test + + + org.hamcrest + hamcrest-library + ${hamcrest.version} + jar + test + + + org.hamcrest + hamcrest-integration + ${hamcrest.version} + jar + test + + + + + + ch.qos.logback + logback-core + 1.1.3 + + + ch.qos.logback + logback-classic + 1.1.3 + + + janino + janino + 2.5.10 + + + + + org.mortbay.jetty + jetty + ${jetty.version} + provided + + + org.mortbay.jetty + jetty-util + ${jetty.version} + provided + + + org.mortbay.jetty + jetty-management + ${jetty.version} + provided + + + + + org.springframework + org.springframework.core + ${spring.version} + jar + false + + + org.aopalliance + com.springsource.org.aopalliance + ${aopalliance.version} + jar + false + + + org.springframework + org.springframework.aop + ${spring.version} + jar + false + + + org.springframework + org.springframework.aspects + ${spring.version} + jar + false + + + org.springframework + org.springframework.beans + ${spring.version} + jar + false + + + org.springframework + org.springframework.asm + ${spring.version} + jar + false + + + org.springframework + org.springframework.expression + ${spring.version} + jar + false + + + org.springframework + org.springframework.jdbc + ${spring.version} + jar + false + + + org.springframework + org.springframework.jms + ${spring.version} + jar + false + + + org.springframework + org.springframework.orm + ${spring.version} + jar + false + + + org.springframework + org.springframework.oxm + ${spring.version} + jar + false + + + org.springframework + org.springframework.context + ${spring.version} + jar + false + + + org.springframework + org.springframework.web + ${spring.version} + jar + + + + + org.hibernate + hibernate-core + ${hibernate.version} + jar + false + + + + javassist + javassist + ${javassist.version} + compile + + + commons-dbcp + commons-dbcp + ${commons-dbcp.version} + jar + compile + + + + org.hibernate + hibernate-c3p0 + ${hibernate.version} + + + + mysql + mysql-connector-java + 5.1.6 + + + + + postgresql + postgresql + ${postgresql.version} + jar + false + + + + + org.apache.commons + commons-compress + ${commons-compress.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + commons-lang + commons-lang + ${commons-lang.version} + jar + compile + + + commons-email + commons-email + ${commons-email.version} + compile + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + org.apache.httpcomponents + httpmime + ${httpmime.version} + + + + org.quartz-scheduler + quartz + ${quartz.version} + + + org.hsqldb + hsqldb + ${hsqldb.version} + + + + com.itextpdf + itextpdf + 5.4.0 + + + com.itextpdf + itext-asian + 5.2.0 + + + + jfree + jfreechart + 1.0.13 + + + + com.fasterxml.jackson.core + jackson-core + 2.5.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.5.0 + + + com.fasterxml.jackson.core + jackson-annotations + 2.5.0 + + + + + com.fasterxml.jackson.core + jackson-core + 2.5.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.5.0 + + + com.fasterxml.jackson.core + jackson-annotations + 2.5.0 + + + + + false + + + org.codehaus.mojo + cobertura-maven-plugin + true + ${cobertura-maven-plugin.version} + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${maven-checkstyle-plugin.version} + true + + + org.apache.maven.plugins + maven-surefire-report-plugin + ${maven-surefire-report-plugin.version} + true + + false + + + + org.apache.maven.plugins + maven-jxr-plugin + ${maven-jxr-plugin.version} + true + + true + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + true + + + org.apache.maven.plugins + maven-site-plugin + ${maven-site-plugin.version} + true + + ja + true + + + + org.apache.maven.plugins + maven-pmd-plugin + ${maven-pmd-plugin.version} + true + + + + pmd + cpd + + + + + + org.codehaus.mojo + javancss-maven-plugin + ${javancss-maven-plugin.version} + true + + + org.codehaus.mojo + findbugs-maven-plugin + ${findbugs-maven-plugin} + + true + true + + + + + + + + UTF-8 + UTF-8 + + + + + 1.5.6 + 4.8.2 + 3.3 + 1.2.16 + 1.6.1 + 3.1.1.RELEASE + 1.0.0 + 3.6.10.Final + + 9.1-901-1.jdbc4 + 3.12.1.GA + 2.2.2 + 1.6.11 + 1.6.11 + 4.8 + 1.4.1 + 1.6 + 2.6 + 1.1 + 1.4 + 4.1.3 + 4.1.3 + 2.2.8 + 1.8.6 + + + 2.5.1 + 2.8.1 + 2.9.1 + 2.7.1 + 2.5.1 + 2.12 + 2.5 + 2.4 + 3.1 + 3.1.6 + 1.7 + 2.7 + 2.12 + 2.3 + 2.0 + 2.5.1 + + + 6.1.4 + 1.2.1 + + \ No newline at end of file diff --git a/AMM_web/.checkstyle b/AMM_web/.checkstyle new file mode 100644 index 0000000..81730a9 --- /dev/null +++ b/AMM_web/.checkstyle @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AMM_web/.classpath b/AMM_web/.classpath new file mode 100644 index 0000000..7617edb --- /dev/null +++ b/AMM_web/.classpath @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/.project b/AMM_web/.project new file mode 100644 index 0000000..c894e63 --- /dev/null +++ b/AMM_web/.project @@ -0,0 +1,42 @@ + + + AMM_web + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/AMM_web/.settings/.jsdtscope b/AMM_web/.settings/.jsdtscope new file mode 100644 index 0000000..585c967 --- /dev/null +++ b/AMM_web/.settings/.jsdtscope @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/AMM_web/.settings/de.loskutov.anyedit.AnyEditTools.prefs b/AMM_web/.settings/de.loskutov.anyedit.AnyEditTools.prefs new file mode 100644 index 0000000..e20e398 --- /dev/null +++ b/AMM_web/.settings/de.loskutov.anyedit.AnyEditTools.prefs @@ -0,0 +1,16 @@ +activeContentFilterList=*.makefile,makefile,*.Makefile,Makefile,Makefile.*,*.mk,MANIFEST.MF +addNewLine=true +convertActionOnSaave=AnyEdit.CnvrtTabToSpaces +eclipse.preferences.version=1 +ignoreBlankLinesWhenTrimming=false +inActiveContentFilterList= +javaTabWidthForJava=true +org.eclipse.jdt.ui.editor.tab.width=2 +projectPropsEnabled=false +removeTrailingSpaces=true +replaceAllSpaces=false +replaceAllTabs=false +saveAndAddLine=false +saveAndConvert=false +saveAndTrim=true +useModulo4Tabs=false diff --git a/AMM_web/.settings/org.eclipse.core.resources.prefs b/AMM_web/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..365bbd6 --- /dev/null +++ b/AMM_web/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/AMM_web/.settings/org.eclipse.jdt.core.prefs b/AMM_web/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..f4217b0 --- /dev/null +++ b/AMM_web/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/AMM_web/.settings/org.eclipse.m2e.wtp.prefs b/AMM_web/.settings/org.eclipse.m2e.wtp.prefs new file mode 100644 index 0000000..0492759 --- /dev/null +++ b/AMM_web/.settings/org.eclipse.m2e.wtp.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.m2e.wtp.enabledProjectSpecificPrefs=false diff --git a/AMM_web/.settings/org.eclipse.wst.common.component b/AMM_web/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..616c1d7 --- /dev/null +++ b/AMM_web/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/AMM_web/.settings/org.eclipse.wst.common.project.facet.core.xml b/AMM_web/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..38b472f --- /dev/null +++ b/AMM_web/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AMM_web/.settings/org.eclipse.wst.html.core.prefs b/AMM_web/.settings/org.eclipse.wst.html.core.prefs new file mode 100644 index 0000000..fca6bf8 --- /dev/null +++ b/AMM_web/.settings/org.eclipse.wst.html.core.prefs @@ -0,0 +1,39 @@ +attrDuplicate=2 +attrInvalidName=2 +attrInvalidValue=2 +attrNameMismatch=2 +attrUndefName=-1 +attrUndefValue=2 +attrValueEqualsMissing=2 +attrValueMismatch=1 +attrValueUnclosed=2 +cdataInvalidContent=2 +cdataUnclosed=1 +commentInvalidContent=2 +commentUnclosed=1 +docDoctypeUnclosed=1 +docDuplicateTag=1 +docInvalidChar=2 +docInvalidContent=2 +eclipse.preferences.version=1 +elemCoexistence=2 +elemDuplicate=2 +elemEndInvalidCase=1 +elemInvalidContent=2 +elemInvalidDirective=1 +elemInvalidEmptyTag=2 +elemInvalidName=1 +elemInvalidText=2 +elemMissingEnd=2 +elemMissingStart=2 +elemStartInvalidCase=2 +elemUnclosedEndTag=1 +elemUnclosedStartTag=1 +elemUnknownName=-1 +elemUnnecessaryEnd=2 +piInvalidContent=2 +piUnclosed=1 +piUndefined=2 +refInvalidContent=2 +resourceNotFound=2 +use-project-settings=true diff --git a/AMM_web/.settings/org.eclipse.wst.jsdt.ui.superType.container b/AMM_web/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/AMM_web/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/AMM_web/.settings/org.eclipse.wst.jsdt.ui.superType.name b/AMM_web/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/AMM_web/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/AMM_web/.settings/org.eclipse.wst.validation.prefs b/AMM_web/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..6f1cba6 --- /dev/null +++ b/AMM_web/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/AMM_web/SQL.txt b/AMM_web/SQL.txt new file mode 100644 index 0000000..fc8e21c --- /dev/null +++ b/AMM_web/SQL.txt @@ -0,0 +1,293 @@ +DB定義作成(コマンドライン) + 参考URL:http://www.dbonline.jp/mysql/database/ +------------------------------------------------- +--全データ削除 +--truncate grp;truncate grpusr;truncate inf;truncate org;truncate usr;truncate inf; +------------------------------------------------- +CREATE DATABASE ammdb; +CREATE USER libgdc IDENTIFIED BY 'libgdcmanager'; +ユーザ一覧確認 + mysql> select User,Host from mysql.user; +-------------------------------------------------- + +CREATE TABLE ammdb.usr +( + id serial NOT NULL, + updatedate bigint, + updateusrid integer, + deleted integer, + + usrid integer unique, + + loginid character varying(512), + name character varying(512), + kind integer, + orgid integer, + orgrole integer, + stoplogin integer, + fromdate integer, + todate integer, + pwhash character varying(512), + cres character varying(512), + cresdate bigint, + joindate bigint, + lastlogintrydate bigint, + loginerrorcount integer, + lastlogindate bigint, + modpwdate bigint, + leavedate bigint, + status integer, + CONSTRAINT usr_pkey PRIMARY KEY (id ) +); + +CREATE TABLE ammdb.org +( + id serial NOT NULL, + updatedate bigint, + updateusrid integer, + deleted integer, + + orgid integer unique, + + kind integer, + name character varying(512), + adminname character varying(512), + adminnamekana character varying(512), + postnum character varying(32), + address character varying(1024), + telnum character varying(32), + mail character varying(512), + fromdate integer, + todate integer, + limitnum integer, + entrydate bigint, + approvaldate bigint, + rejectdate bigint, + note character varying(5000), + joindate bigint, + status integer, + CONSTRAINT org_pkey PRIMARY KEY (id ) +); + + +CREATE TABLE ammdb.pwtckt +( + id serial NOT NULL, + updatedate bigint, + updateusrid integer, + deleted integer, + + pwtcktid integer unique, + + usrid integer, + ticket character varying(16), + createdate bigint, + ticketdate bigint, + completedate bigint, + canceldate bigint, + status integer, + CONSTRAINT pwtckt_pkey PRIMARY KEY (id ) +); + + +CREATE TABLE ammdb.inf +( + id serial NOT NULL, + updatedate bigint, + updateusrid integer, + deleted integer, + + infid integer unique, + + title character varying(512), + body character varying(5000), + pubdate bigint, + status integer, + CONSTRAINT inf_pkey PRIMARY KEY (id ) +); + +CREATE TABLE ammdb.grp +( + id serial NOT NULL, + updatedate bigint, + updateusrid integer, + deleted integer, + + grpid integer unique, + + name character varying(512), + adminusrid integer, + createdate bigint, + + CONSTRAINT grp_pkey PRIMARY KEY (id ) +) +; +CREATE TABLE ammdb.grpusr +( + id serial NOT NULL, + updatedate bigint, + updateusrid integer, + deleted integer, + + grpusrid integer unique, + + grpid integer, + usrid integer, + invitationdate bigint, + joindate bigint, + leavedate bigint, + admindate bigint, + statusadmin integer, + status integer, + CONSTRAINT grpusr_pkey PRIMARY KEY (id ) +); + +-- テーブルへ権限を付与 +GRANT ALL PRIVILEGES ON ammdb.usr TO libgdc; +GRANT ALL PRIVILEGES ON ammdb.org TO libgdc; +GRANT ALL PRIVILEGES ON ammdb.pwtckt TO libgdc; +GRANT ALL PRIVILEGES ON ammdb.inf TO libgdc; +GRANT ALL PRIVILEGES ON ammdb.grp TO libgdc; +GRANT ALL PRIVILEGES ON ammdb.grpusr TO libgdc; + + + +=================== +PostgreSQL検証時のSQL + +/* +CREATE TABLE ammdb.usr +( + id serial NOT NULL, + updatedate bigint, + deleted integer, + usrid serial NOT NULL, + loginid character varying(512), + name character varying(512), + kind integer, + orgid integer, + orgrole integer, + stoplogin integer, + fromdate integer, + todate integer, + pwhash character varying(512), + cres character varying(512), + cresdate bigint, + joindate bigint, + lastlogintrydate bigint, + loginerrorcount integer, + lastlogindate bigint, + modpwdate bigint, + leavedate bigint, + status integer, + CONSTRAINT usr_pkey PRIMARY KEY (id ) +) WITH ( OIDS=FALSE ); +ALTER TABLE ammdb.usr OWNER TO libgdc; +*/ +/* +CREATE TABLE ammdb.org +( + id serial NOT NULL, + updatedate bigint, + deleted integer, + orgid serial NOT NULL, + kind integer, + name character varying(512), + adminname character varying(512), + adminnamekana character varying(512), + postnum character varying(32), + address character varying(1024), + telnum character varying(32), + mail character varying(512), + fromdate integer, + todate integer, + limitnum integer, + entrydate bigint, + approvaldate bigint, + rejectdate bigint, + note character varying(5000), + joindate bigint, + status integer, + CONSTRAINT org_pkey PRIMARY KEY (id ) +) WITH ( OIDS=FALSE ); +ALTER TABLE ammdb.org OWNER TO libgdc; + +*/ +/* +CREATE TABLE ammdb.pwtckt +( + id serial NOT NULL, + updatedate bigint, + deleted integer, + usrid integer, + ticket character varying(16), + createdate bigint, + ticketdate bigint, + completedate bigint, + canceldate bigint, + status integer, + CONSTRAINT pwtckt_pkey PRIMARY KEY (id ) +) WITH ( OIDS=FALSE ); +ALTER TABLE ammdb.pwtckt OWNER TO libgdc; + +*/ +/* +CREATE TABLE ammdb.inf +( + id serial NOT NULL, + updatedate bigint, + deleted integer, + infid serial NOT NULL, + title character varying(512), + body character varying(5000), + pubdate bigint, + status integer, + CONSTRAINT inf_pkey PRIMARY KEY (id ) +) WITH ( OIDS=FALSE ); +ALTER TABLE ammdb.inf OWNER TO libgdc; + +*/ +/* + * データベースのテーブル定義 +CREATE TABLE ammdb.grp +( + id serial NOT NULL, + updatedate bigint, + modusrid integer, + moddate bigint, + + grpid serial NOT NULL, + name character varying(512), + adminusrid integer, + createdate bigint, + + CONSTRAINT grp_pkey PRIMARY KEY (id ) +) WITH ( OIDS=FALSE ); +ALTER TABLE ammdb.grp OWNER TO libgdc; + +*/ +/* + * データベースのテーブル定義 +CREATE TABLE ammdb.grpusr +( + id serial NOT NULL, + updatedate bigint, + modusrid integer, + moddate bigint, + + grpusrid serial NOT NULL, + grpid integer, + usrid integer, + invitationdate bigint, + joindate bigint, + leavedate bigint, + admindate bigint, + + statusadmin integer, + status integer, + + CONSTRAINT grpusr_pkey PRIMARY KEY (id ) +) WITH ( OIDS=FALSE ); +ALTER TABLE ammdb.grpusr OWNER TO libgdc; + +*/ diff --git a/AMM_web/pom.xml b/AMM_web/pom.xml new file mode 100644 index 0000000..0362cb6 --- /dev/null +++ b/AMM_web/pom.xml @@ -0,0 +1,163 @@ + + + 4.0.0 + + + AMM + jp.co.y_net + 1.4.2 + ../AMM/pom.xml + + + AMM_web + AMM_web + war + http://172.16.12.13/trac/P11344 + + + + SunDataCenter + http://www.y-net.co.jp/ + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + + false + src/main/resources + + + false + src/main/java + + ** + + + **/*.java + + + + + + false + src/test/java + + ** + + + **/*.java + + + + + + true + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + true + true + + + + org.mortbay.jetty + maven-jetty-plugin + + + org.apache.maven.plugins + maven-eclipse-plugin + + true + + + + AMM + + + + + + + + + + + + org.apache.wicket + wicket-core + ${wicket.version} + jar + false + + + org.apache.wicket + wicket-extensions + ${wicket.version} + jar + false + + + org.apache.wicket + wicket-auth-roles + ${wicket.version} + jar + false + + + org.apache.wicket + wicket-ioc + ${wicket.version} + jar + false + + + org.apache.wicket + wicket-spring + ${wicket.version} + jar + + + servlet-api + javax.servlet + + + org.springframework + spring + + + false + + + org.msgpack + msgpack + ${org.msgpack} + + + + + false + + + + UTF-8 + UTF-8 + 1.5.7 + 0.6.4 + + + + + + \ No newline at end of file diff --git a/AMM_web/sdc/logs/AMMLog.2016-03-26.0.log b/AMM_web/sdc/logs/AMMLog.2016-03-26.0.log new file mode 100644 index 0000000..28f5df5 --- /dev/null +++ b/AMM_web/sdc/logs/AMMLog.2016-03-26.0.log @@ -0,0 +1,2 @@ +[INFO ] 2016-03-26 12:14:42 jp.TestLog#main(TestLog.java:18) + AppLogger.info diff --git a/AMM_web/sdc/logs/AMMLog.2016-03-29.0.log b/AMM_web/sdc/logs/AMMLog.2016-03-29.0.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/AMM_web/sdc/logs/AMMLog.2016-03-29.0.log diff --git a/AMM_web/sdc/logs/mail/AMM_MAIL_Log.2016-03-26.0.log b/AMM_web/sdc/logs/mail/AMM_MAIL_Log.2016-03-26.0.log new file mode 100644 index 0000000..74b6c89 --- /dev/null +++ b/AMM_web/sdc/logs/mail/AMM_MAIL_Log.2016-03-26.0.log @@ -0,0 +1 @@ +[INFO ] 2016-03-26 12:14:42 AppSendMail.loggingTest diff --git a/AMM_web/sdc/logs/mail/AMM_MAIL_Log.2016-03-29.0.log b/AMM_web/sdc/logs/mail/AMM_MAIL_Log.2016-03-29.0.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/AMM_web/sdc/logs/mail/AMM_MAIL_Log.2016-03-29.0.log diff --git a/AMM_web/src/main/java/jp/TestDb.java b/AMM_web/src/main/java/jp/TestDb.java new file mode 100644 index 0000000..3640d5c --- /dev/null +++ b/AMM_web/src/main/java/jp/TestDb.java @@ -0,0 +1,30 @@ +package jp; + +import jp.co.y_net.amm.dao.Inf; +import jp.co.y_net.amm.dao.InfDao; + +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class TestDb { + public static void main(String[] args) { + final ClassPathXmlApplicationContext context = + new ClassPathXmlApplicationContext("applicationContextBase.xml", "hibernateContextBase.xml"); + + final InfDao infDao = (InfDao)context.getBean("infDao"); + + for (Inf inf: infDao.get()) { + System.out.println(inf.getInfid()); + } + try { + Thread.sleep(40 * 1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + for (Inf inf: infDao.get()) { + System.out.println(inf.getInfid()); + } + +// BasicResourcePoolFactory + } + +} diff --git a/AMM_web/src/main/java/jp/TestLog.java b/AMM_web/src/main/java/jp/TestLog.java new file mode 100644 index 0000000..42ccb19 --- /dev/null +++ b/AMM_web/src/main/java/jp/TestLog.java @@ -0,0 +1,22 @@ +package jp; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppSendMail; +public class TestLog { +// private static org.slf4j.Logger loggerSlf = LoggerFactory.getLogger(TestLog.class.getName()); + public static void main(String[] args) { + +// System.out.println("test"); +// loggerSlf.error("テスト"); +// +// Logger loggerSlfMail = LoggerFactory.getLogger("jp.co.y_net.amm.mail"); +// loggerSlfMail.info("テストああああ\nいいい"); + + + + AppSendMail.loggingTest("AppSendMail.loggingTest"); + AppLogger.info("AppLogger.info"); + + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/AppRequestCycleListener.java b/AMM_web/src/main/java/jp/co/y_net/amm/AppRequestCycleListener.java new file mode 100644 index 0000000..ff7c778 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/AppRequestCycleListener.java @@ -0,0 +1,114 @@ +package jp.co.y_net.amm; + +import jp.co.y_net.amm.common.AppLogger; + +import org.apache.wicket.protocol.http.PageExpiredException; +import org.apache.wicket.protocol.http.servlet.ResponseIOException; +import org.apache.wicket.request.IRequestHandler; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.cycle.IRequestCycleListener; +import org.apache.wicket.request.cycle.RequestCycle; +import org.apache.wicket.request.mapper.StalePageException; + +/** + * Applicationクラス(PC版はWicketApplication)で設定する為の RequestCycleListener + * エラーログの出力などを行う。 + * + * @author k_inaba + */ +public class AppRequestCycleListener implements IRequestCycleListener { + + public IRequestHandler onException(RequestCycle cycle, Exception ex) { + + /* エラー詳細出力 2013/06/25 K.Inaba */ + String pageName = ""; + if (cycle.getUrlRenderer().getBaseUrl().getSegments().size() > 0) { + pageName = cycle.getUrlRenderer().getBaseUrl().getSegments().get(0); + } + try { + String type = null; + if (ex instanceof PageExpiredException) { // 有効期限切れ + type = "1"; + } + + /* 2016/08/06 追加 */ + if (ex instanceof StalePageException) { // 有効期限切れ + type = "1"; + } + + if (ex instanceof ResponseIOException) { + Throwable t = ex.getCause(); + if (t != null + && "org.apache.catalina.connector.ClientAbortException".equals(t.getClass().getName())) { + /* IEが発生させる既知の処理中断の例外 */ + type = "2"; + } + } + if (type == null) { + type = "3"; + } + if ("1".equals(type)) { // 有効期限切れ + AppLogger.debug(pageName); + AppLogger.debug(ex.getMessage()); + + } else if ("2".equals(type)) { // IEが発生させる既知の処理中断の例外(クライアントによる中断) + AppLogger.debug(pageName); + AppLogger.debug(ex.getMessage()); + + } else { /* 未知の問題 */ + AppLogger.error(pageName); + AppLogger.error(ex); + } + + } catch (Exception e) { + /* エラーハンドリングで循環が発生しないように、極力シンプルな実装にする。 */ + ex.printStackTrace(); + } + return null; + } + @Override + public void onExceptionRequestHandlerResolved(RequestCycle arg0, IRequestHandler arg1, Exception arg2) { + /* 処理なし */ + } +// private static long timerRequest; +// private static String uri; + @Override + public void onBeginRequest(RequestCycle reqestCycle) { // RequestHandlerの解決直前に実行 + /* 処理時間測定開始 */ +// TimeRecorder.startRequest(reqestCycle.getRequest().getUrl().toString()); +// TimeRecorder.startSub("リクエスト受付"); +// timerRequest = System.currentTimeMillis(); +// uri = reqestCycle.getRequest().getUrl().toString(); +// WebOpacLogger.info("計測開始 - [" + uri + "]-----------------------------------------------------------------"); + + } + @Override + public void onEndRequest(RequestCycle reqestCycle) { + /* 処理時間測定終了 */ +// TimeRecorder.endRequest(reqestCycle.getRequest().getUrl().toString()); +// long time = System.currentTimeMillis() - timerRequest; +// WebOpacLogger.info("計測終了 - " + time + "[ms] [" + uri + "]------------------------------------------------"); +// timerRequest = 0; +// uri = ""; + } + @Override + public void onDetach(RequestCycle arg0) { + /* 処理なし */ + } + @Override + public void onRequestHandlerExecuted(RequestCycle arg0, IRequestHandler arg1) { + /* 処理なし */ + } + @Override + public void onRequestHandlerResolved(RequestCycle arg0, IRequestHandler arg1) { + /* 処理なし */ + } + @Override + public void onRequestHandlerScheduled(RequestCycle arg0, IRequestHandler arg1) { + /* 処理なし */ + } + @Override + public void onUrlMapped(RequestCycle arg0, IRequestHandler arg1, Url arg2) { + /* 処理なし */ + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/AppSession.java b/AMM_web/src/main/java/jp/co/y_net/amm/AppSession.java new file mode 100644 index 0000000..1dfca09 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/AppSession.java @@ -0,0 +1,54 @@ +package jp.co.y_net.amm; + +import jp.co.y_net.amm.dao.Usr; + +import org.apache.wicket.Page; +import org.apache.wicket.Session; +import org.apache.wicket.protocol.http.WebSession; +import org.apache.wicket.request.Request; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class AppSession extends WebSession { +//AuthenticatedWebSession { + private static final long serialVersionUID = 1L; + + public AppSession(Request request) { + super(request); + } + public static AppSession get() { + return (AppSession) Session.get(); + } + + private LoginUser loginUser; + public boolean isLogin() { + return ((this.loginUser == null) == false); + } + public LoginUser getLoginUser() { + return this.loginUser; + } + public void setLoginUser(LoginUser loginUser) { + this.loginUser = loginUser; + } + public void clearLoginUser() { + this.loginUser = null; + } + public static class LoginUser extends Usr{ + /* 拡張無し */ + } + public void setLoginUser(Usr usr) { + loginUser = new LoginUser(); + usr.copy(loginUser); + + } + + public Class returnPageClass; + public PageParameters returnPageParameters; + + + + + + + +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/WicketApplication.java b/AMM_web/src/main/java/jp/co/y_net/amm/WicketApplication.java new file mode 100644 index 0000000..cb579dd --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/WicketApplication.java @@ -0,0 +1,133 @@ +package jp.co.y_net.amm; + +import jp.co.y_net.amm.api.ApiChallengestring; +import jp.co.y_net.amm.api.ApiDatainitialize; +import jp.co.y_net.amm.api.ApiGroupmember; +import jp.co.y_net.amm.api.ApiInfo; +import jp.co.y_net.amm.api.ApiLogincheck; +import jp.co.y_net.amm.api.ApiLogout; +import jp.co.y_net.amm.api.ApiMember; +import jp.co.y_net.amm.api.ApiMembergroup; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.page.DashboardPage; +import jp.co.y_net.amm.page.EntryPasswordPage; +import jp.co.y_net.amm.page.ErrorPage; +import jp.co.y_net.amm.page.GroupListPage; +import jp.co.y_net.amm.page.InfoListPage; +import jp.co.y_net.amm.page.InfoPage; +import jp.co.y_net.amm.page.LoginPage; +import jp.co.y_net.amm.page.MemberDetailPage; +import jp.co.y_net.amm.page.MemberListPage; +import jp.co.y_net.amm.page.OrgDetailPage; +import jp.co.y_net.amm.page.OrgEntryDetailPage; +import jp.co.y_net.amm.page.OrgEntryListPage; +import jp.co.y_net.amm.page.OrgEntryPage; +import jp.co.y_net.amm.page.OrgMemberListPage; +import jp.co.y_net.amm.page.PasswordResetPage; +import jp.co.y_net.amm.page.TopPage; + +import org.apache.wicket.Page; +import org.apache.wicket.RuntimeConfigurationType; +import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.request.Request; +import org.apache.wicket.request.Response; +import org.apache.wicket.spring.injection.annot.SpringComponentInjector; + +/** + * アプリケーション設定クラス + */ +public class WicketApplication extends WebApplication { +//AuthenticatedWebApplication { + + @Override + public Class getHomePage() { + return TopPage.class; + } + @Override + protected void init() { + super.init(); + + getRequestCycleSettings().setResponseRequestEncoding("UTF-8"); + getMarkupSettings().setDefaultMarkupEncoding("UTF-8"); + /* Wicket上でStringBeanを使用できるようにする */ + getComponentInstantiationListeners().add(new SpringComponentInjector(this)); + /* Aタグ非表示時にEMタグが表示されるのを回避 */ + getMarkupSettings().setDefaultBeforeDisabledLink(""); + getMarkupSettings().setDefaultAfterDisabledLink(""); + + /* マウント 定義 -------------------------------------------------------------------------------------------*/ + + /* 直接呼び出される可能性のあるものを定義 */ + + + mountPage("/api/challengestring", ApiChallengestring.class); + mountPage("/api/logincheck", ApiLogincheck.class); + mountPage("/api/logout", ApiLogout.class); + mountPage("/api/member", ApiMember.class); + mountPage("/api/info", ApiInfo.class); + mountPage("/api/datainitialize", ApiDatainitialize.class); + + mountPage("/info", InfoPage.class); // 訪問済みリンク、未訪問リンクを識別するためにも必要 + mountPage("/orgentry", OrgEntryPage.class); + mountPage("/passwordreset", PasswordResetPage.class); // メールに記載する + + mountPage("/memberlist", MemberListPage.class); + mountPage("/orgdetail", OrgDetailPage.class); + + mountPage("/memberdetail", MemberDetailPage.class); + + mountPage("/orgentrylist", OrgEntryListPage.class); + mountPage("/orgmemberlist", OrgMemberListPage.class); + mountPage("/infolist", InfoListPage.class); + + mountPage("/entrypassword", EntryPasswordPage.class); // メールに記載する + mountPage("/orgentrydetail", OrgEntryDetailPage.class); // メールに記載する + + + mountPage("/grouplist", GroupListPage.class); + + + mountPage("/dashboard", DashboardPage.class); + + /* API:ユーザ情報(所属グループ)取得 */ + mountPage("/api/membergroup", ApiMembergroup.class); + /* API:グループ所属メンバー情報取得 */ + mountPage("/api/groupmember", ApiGroupmember.class); + + + /* マウント 定義 ここまで------------------------------------------------------------------------------------*/ + + + /* セッションが切れた場合に表示するページ */ + getApplicationSettings().setPageExpiredErrorPage(LoginPage.class); + /* Internal Error時に表示するページ */ + getApplicationSettings().setInternalErrorPage(ErrorPage.class); + /* */ + this.getPageSettings().setVersionPagesByDefault(false); + /* 開発モード(DEVELOPMENT)のときでも、配備モード(DEPLOYMENT)と同様にTMLからwicketタグを削除するようにする */ + getMarkupSettings().setStripWicketTags(true); + /* エラーハンドリングなどを定義 */ + getRequestCycleListeners().add(new AppRequestCycleListener()); + + + } + + /* セッション管理 ------------------------------------------------------------------------------------------------*/ + @Override + public AppSession newSession(Request request, Response response) { + return new AppSession(request); + } + + + /* アプリケーションの実行モードを設定 */ + @Override + public RuntimeConfigurationType getConfigurationType() { + if(AppLogger.isDebug()) { + return RuntimeConfigurationType.DEVELOPMENT; // 開発用 + } else { + return RuntimeConfigurationType.DEPLOYMENT; // 本番用 + } + } + +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/WicketApplication.properties b/AMM_web/src/main/java/jp/co/y_net/amm/WicketApplication.properties new file mode 100644 index 0000000..faa9b19 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/WicketApplication.properties @@ -0,0 +1,7 @@ +# +# WicketApplication.properties +# +# App.properties\u3078\u79fb\u884c\u3057\u307e\u3057\u305f\u3002 +# +test = test.test +#EOF diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiChallengestring.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiChallengestring.java new file mode 100644 index 0000000..7c246c4 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiChallengestring.java @@ -0,0 +1,27 @@ +package jp.co.y_net.amm.api; + +import jp.co.y_net.amm.service.Challengestring; + +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class ApiChallengestring extends ApiPage { + + @SpringBean(name="challengestring") + private Challengestring challengestring; + + public ApiChallengestring(){ + + /* 主処理 */ + Result result = new Result(); + result.value = challengestring.execute(); + + /* JSONのレスポンスを設定 */ + super.setResponse(result); + } + /** + * 処理結果 + */ + public static class Result extends ApiResult{ + public String value; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiDatainitialize.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiDatainitialize.java new file mode 100644 index 0000000..08f75f0 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiDatainitialize.java @@ -0,0 +1,74 @@ +package jp.co.y_net.amm.api; + +import java.util.List; + +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class ApiDatainitialize extends ApiPage { + + @SpringBean(name="usrDao") + protected UsrDao usrDao; + + @SpringBean(name="orgDao") + protected OrgDao orgDao; + + public ApiDatainitialize(PageParameters pageParams) { + + /* 主処理 */ + Result result = new Result(); + + String msg = ""; + + /* 初期管理者(スーパーユーザー)、初期組織(「運営管理」)のデータがなければ作成する。 */ + Org cndOrg = new Org(); + cndOrg.setKind(Org.KIND_運営管理); + List listOrg = orgDao.get(cndOrg); + Org org運営管理; + if(listOrg.isEmpty()) { + /* 組織「運営管理」が登録されていない */ + org運営管理 = new Org(); + org運営管理.setKind(Org.KIND_運営管理); + org運営管理.setName("運営管理"); + org運営管理.setStatus(Org.STATUS_本登録済み); + + orgDao.add(org運営管理, AppDef.USERID_NONE); // データ登録 + + msg += "組織「運営管理」を登録しました。"; + + } else { + org運営管理 = listOrg.get(0); + + msg += "組織「運営管理」は登録済みです。"; + } + + Usr cndUsr = new Usr(); + cndUsr.setKind(Usr.KIND_運営管理者); + List listUsr = usrDao.get(cndUsr); + if(listUsr.isEmpty()) { + Usr usr運営管理者 = Usr.create運営管理者代表(org運営管理); + usrDao.add(usr運営管理者, AppDef.USERID_NONE); // データ登録 + + msg += "運営管理者を登録しました。"; + } else { + msg += "運営管理者は登録済みです。"; + } + + result.rmsg = msg; + + /* JSONのレスポンスを設定 */ + setResponse(result); + } + /** + * 処理結果 + */ + public static class Result extends ApiResult{ + + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiGroupmember.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiGroupmember.java new file mode 100644 index 0000000..0b55981 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiGroupmember.java @@ -0,0 +1,80 @@ +package jp.co.y_net.amm.api; + +import java.util.ArrayList; +import java.util.List; + +import jp.co.y_net.amm.dao.Grp; +import jp.co.y_net.amm.dao.GrpDao; +import jp.co.y_net.amm.dao.Grpusr; +import jp.co.y_net.amm.dao.GrpusrDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class ApiGroupmember extends ApiPage { + + @SpringBean(name="usrDao") + protected UsrDao usrDao; + + @SpringBean(name="grpDao") + protected GrpDao grpDao; + + @SpringBean(name="grpusrDao") + protected GrpusrDao grpusrDao; + + public ApiGroupmember(PageParameters pageParams) { + + String grpid = pageParams.get("grpid").toString(); + List listResult = new ArrayList(); + + + if(grpid == null) { + setResponse(new Result().err("パラメータ grpid が指定されていません。")); + return; + + } else { + try { + Integer iGrpid = Integer.parseInt(grpid); + Grp grp = grpDao.getByGrpid(iGrpid); + + if(grp == null) { + setResponse(new Result().err("指定された grpid からデータが取得できませんでした。")); + return; + + } else { + + Grpusr cndGrpusr = new Grpusr(); + cndGrpusr.setGrpid(iGrpid); + cndGrpusr.setStatus(Grpusr.STATUS_参加中); + List list = grpusrDao.get(cndGrpusr); + + /* 戻り値作成 */ + for(Grpusr gu: list) { + Usr u = usrDao.getByUsrid(gu.getUsrid()); + Result r = new Result(); + //r.usrloginid = URLEncoder.encode(u.getLoginid(), "UTF-8"); // URLエンコード; + r.usrloginid = u.getLoginid(); + r.usrname = u.getName(); + + listResult.add(r); + } + } + } catch (NumberFormatException e) { + setResponse(new Result().err("パラメータ grpid は不正です。")); + return; + } + } + + /* JSONのレスポンスを設定 */ + setResponse(listResult); + } + /** + * 処理結果 + */ + public static class Result extends ApiResult{ + public String usrloginid; + public String usrname; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiInfo.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiInfo.java new file mode 100644 index 0000000..dc8d964 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiInfo.java @@ -0,0 +1,72 @@ +package jp.co.y_net.amm.api; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import jp.co.y_net.amm.dao.Inf; +import jp.co.y_net.amm.dao.InfDao; + +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class ApiInfo extends ApiPage { + + + @SpringBean(name="infDao") + protected InfDao infDao; + + public ApiInfo(PageParameters pageParams) { + +// String infid = pageParams.get("infid").toString(); + + + /* 主処理 */ + List listResult = new ArrayList(); + +// if(infid == null) { +// setResponse(result.err("パラメータ infid が指定されていません。")); +// return; +// } + + Inf cnd = new Inf(); + cnd.setStatus(Inf.STATUS_掲載中); + List listInf = infDao.get(cnd); + + /* pubdateの降順とする */ + Collections.sort(listInf, new Comparator() { + @Override + public int compare(Inf o1, Inf o2) { + if (o1 != null && o2 != null) { + if (o1.getPubdate() != null && o2.getPubdate() != null) { + return o1.getPubdate().compareTo(o2.getPubdate()) * -1; // 降順 + } + } + return 0; + } + }); + + for(Inf i: listInf) { + Result r = new Result(); + r.infid = i.getInfid(); + r.title = i.getTitle(); + r.pubdate = i.getPubdate(); + listResult.add(r); + } + + + /* JSONのレスポンスを設定 */ + setResponse(listResult); + } + + /** + * 処理結果 + */ + public static class Result extends ApiResult{ + public Integer infid; + public String title; + public Long pubdate; + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiLogincheck.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiLogincheck.java new file mode 100644 index 0000000..3ed9542 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiLogincheck.java @@ -0,0 +1,77 @@ +package jp.co.y_net.amm.api; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + +import jp.co.y_net.amm.service.Logincheck; +import jp.co.y_net.amm.service.Logincheck.LogincheckResult; + +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class ApiLogincheck extends ApiPage { + + @SpringBean(name = "logincheck") + private Logincheck logincheck; + + public ApiLogincheck(PageParameters pageParams) { + + /* 主処理 */ + Result result = new Result(); + + String loginid = pageParams.get("loginid").toString(); + String cres = pageParams.get("cres").toString(); + String cstr = pageParams.get("cstr").toString(); + + if (loginid == null) { + setResponse(result.err("パラメータ loginid が指定されていません。")); + return; + } + if (cres == null) { + setResponse(result.err("パラメータ cres が指定されていません。")); + return; + } + if (cstr == null) { + setResponse(result.err("パラメータ cstr が指定されていません。")); + return; + } + + try { + loginid = URLDecoder.decode(loginid, "UTF-8"); // URLデコード + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + + /* 2016/02/22 戻り値にuseridを追加 */ + LogincheckResult logincheckResult = logincheck.executeFromApi(loginid, cres, cstr); // 認証実施 + if(0 == logincheckResult.errorCode) { // 認証実施 + + /* 認証成功 */ + result.value = true; + result.errorCode = logincheckResult.errorCode; + result.usrid = logincheckResult.usrid; + } else { + + /* 認証失敗 */ + result.value = false; + result.errorCode = logincheckResult.errorCode; + result.rmsg = Logincheck.errorMemo.get(logincheckResult.errorCode); + } + + + /* JSONのレスポンスを設定 */ + setResponse(result); + } + + /** + * 処理結果 + * + * @author k_inaba + */ + public static class Result extends ApiResult { + public boolean value; + public Integer errorCode; + public Integer usrid; /* 2016/02/22 戻り値にuseridを追加 */ + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiLogout.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiLogout.java new file mode 100644 index 0000000..93171d7 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiLogout.java @@ -0,0 +1,63 @@ +package jp.co.y_net.amm.api; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; +import jp.co.y_net.amm.service.Logout; + +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class ApiLogout extends ApiPage { + + @SpringBean(name="logout") + private Logout logout; + + @SpringBean(name="usrDao") + protected UsrDao usrDao; + + public ApiLogout(PageParameters pageParams) { + + String loginid = pageParams.get("loginid").toString(); + + /* 主処理 */ + Result result = new Result(); + + if(loginid == null) { + setResponse(result.err("パラメータ loginid が指定されていません。")); + return; + } + + try { + loginid = URLDecoder.decode(loginid, "UTF-8"); // URLデコード + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + + /* ログアウト処理 */ + logout.execute(loginid); + + /* 2016/03/30 ログアウト要求日時を登録する */ + Usr usr = usrDao.getByLoginid(loginid); + if(usr != null) { + usr.setRequestlogoutdate(AppUtils.createNowLong()); + usrDao.update(usr, AppDef.USERID_NONE); + } + + + /* JSONのレスポンスを設定 */ + setResponse(result); + } + /** + * 処理結果 + * @author k_inaba + */ + public static class Result extends ApiResult{ +// public boolean value; + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiMember.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiMember.java new file mode 100644 index 0000000..c88fd2f --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiMember.java @@ -0,0 +1,85 @@ +package jp.co.y_net.amm.api; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.List; + +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * @author k_inaba + * + * 2015/10/02 ユーザIDも返却する + * + */ +public class ApiMember extends ApiPage { + + + + @SpringBean(name="usrDao") + protected UsrDao usrDao; + + @SpringBean(name="orgDao") + protected OrgDao orgDao; + + public ApiMember(PageParameters pageParams) { + + String loginid = pageParams.get("loginid").toString(); + + /* 主処理 */ + Result result = new Result(); + + if(loginid == null) { + setResponse(result.err("パラメータ loginid が指定されていません。")); + return; + } + + try { + loginid = URLDecoder.decode(loginid, "UTF-8"); // URLデコード + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + + Usr usr = usrDao.getByLoginid(loginid); + + if(usr == null) { + setResponse(result.err("指定された loginid からデータが取得できませんでした。")); + return; + } else { + result.name = usr.getName(); + + result.usrid = usr.getUsrid(); + + result.kind = usr.getKind(); + + Org cnd = new Org(); + cnd.setOrgid(usr.getOrgid()); + List orgs = orgDao.get(cnd); + + if(orgs.size() > 0) { + result.orgid =orgs.get(0).getOrgid(); + result.orgname = orgs.get(0).getName(); + } + + } + + /* JSONのレスポンスを設定 */ + setResponse(result); + } + /** + * 処理結果 + */ + public static class Result extends ApiResult{ + public String name; + public Integer usrid; + public Integer orgid; + public String orgname; + public Integer kind; // 2016/03/07 追加 + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiMembergroup.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiMembergroup.java new file mode 100644 index 0000000..35c1e15 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiMembergroup.java @@ -0,0 +1,78 @@ +package jp.co.y_net.amm.api; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.List; + +import jp.co.y_net.amm.dao.Grp; +import jp.co.y_net.amm.dao.GrpDao; +import jp.co.y_net.amm.dao.Grpusr; +import jp.co.y_net.amm.dao.GrpusrDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class ApiMembergroup extends ApiPage { + + @SpringBean(name="usrDao") + protected UsrDao usrDao; + + @SpringBean(name="grpDao") + protected GrpDao grpDao; + + @SpringBean(name="grpusrDao") + protected GrpusrDao grpusrDao; + + public ApiMembergroup(PageParameters pageParams) { + + String loginid = pageParams.get("loginid").toString(); + List listResult = new ArrayList(); + + if(loginid == null) { + setResponse(new Result().err("パラメータ loginid が指定されていません。")); + return; + } else { + try { + loginid = URLDecoder.decode(loginid, "UTF-8"); // URLデコード + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + Usr usr = usrDao.getByLoginid(loginid); + + if(usr == null) { + setResponse(new Result().err("指定された loginid からデータが取得できませんでした。")); + return; + } else { + + Grpusr cndGrpusr = new Grpusr(); + cndGrpusr.setUsrid(usr.getUsrid()); + cndGrpusr.setStatus(Grpusr.STATUS_参加中); + List list = grpusrDao.get(cndGrpusr); + + /* 戻り値作成 */ + for(Grpusr gu: list) { + Integer grpid = gu.getGrpid(); + Grp g = grpDao.getByGrpid(gu.getGrpid()); + Result r = new Result(); + r.grpid = grpid; + r.grpname = g.getName(); + + listResult.add(r); + } + } + } + + /* JSONのレスポンスを設定 */ + setResponse(listResult); + } + /** + * 処理結果 + */ + public static class Result extends ApiResult{ + public Integer grpid; + public String grpname; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiPage.html new file mode 100644 index 0000000..4ed4eef --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiPage.html @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiPage.java new file mode 100644 index 0000000..4a8dcd2 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/api/ApiPage.java @@ -0,0 +1,135 @@ +package jp.co.y_net.amm.api; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.util.resource.StringResourceStream; +import org.apache.wicket.util.time.Time; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author k_inaba + */ +public abstract class ApiPage extends WebPage{ + + @Override + protected void configureResponse(WebResponse response){ +// response.setContentType("application/json; charset=utf-8"); + response.setContentType("application/json; utf-8"); + + /* ブラウザキャッシュ無効化 */ + java.util.Calendar objCal1=java.util.Calendar.getInstance(); + java.util.Calendar objCal2=java.util.Calendar.getInstance(); + objCal2.set(1970,0,1,0,0,0); + + response.setDateHeader("Last-Modified",Time.valueOf(objCal1.getTime())); + response.setDateHeader("Expires",Time.valueOf(objCal2.getTime())); + response.setHeader("progma","no-cache"); + response.setHeader("Cache-Control","no-cache"); + + + super.configureResponse(response); + } + + public void setResponse(Object result) { + ObjectMapper objectMapper = new ObjectMapper(); + String json; + try { + json = objectMapper.writeValueAsString(result); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + getRequestCycle().scheduleRequestHandlerAfterCurrent( + new ResourceStreamRequestHandler(new StringResourceStream(json)) + ); + } +// /* ---------------------------------------------- +// * パラメータ取得ユーティリティ +// */ +// protected String getParam(String key) { +// if (getPageParameters() == null) { +// return ""; +// } else { +// return getPageParameters().get(key).toString(""); +// } +// } + + /* ---------------------------------------------- + * 返却値の共通実装 + */ + public static class ApiResult{ + + public boolean r = true; + public String rmsg = null; + + public ApiResult() { + /* デフォルトコンストラクタ */ + } + public ApiResult(String rmsg) { + this.r = false; + this.rmsg = rmsg; + } + public ApiResult(Exception e) { + this.rmsg = e.getMessage(); + if (rmsg == null) { + this.rmsg = e.getClass().getSimpleName(); + } + } + public ApiResult err(String rmsg) { + this.r = false; + this.rmsg = rmsg; + return this; + } + public ApiResult err(Exception e) { + this.rmsg = e.getMessage(); + if (rmsg == null) { + this.rmsg = e.getClass().getSimpleName(); + } + return this; + } + } + +} +//// String text = "{\"a\":123,\"b\":true,\"c\":\"あいう\"}"; +//String text = readTextAsString(file.getAbsolutePath()); +//ObjectMapper mapper = new ObjectMapper(); +//T bean; +//try { +// // JsonNode root = mapper.readTree(text); +// // String c = root.get("c").asText(); +// bean = mapper.readValue(text, clz); +//} catch (JsonProcessingException e) { +// throw new RuntimeException(e); +//} catch (IOException e) { +// throw new RuntimeException(e); +//} + + +///** +//* 保存する +//* @param bean 保存するデータ +//* @return id 保存したときに付与されたid +//*/ +//public int insert(Object bean) { +// String tablename = bean.getClass().getName(); +// int maxId = -1; +// File[] existfiles = getDbFiles(tablename); +// for (File existfile : existfiles) { +// int id = toId(existfile.getName(), tablename); +// maxId = Math.max(maxId, id); +// } +// int insertId = maxId + 1; +// ObjectMapper objectMapper = new ObjectMapper(); +// try { +// String json = objectMapper.writeValueAsString(bean); +// File f = toFile(bean.getClass(), (insertId)); +// writeText(f.getAbsolutePath(), json); +// } catch (JsonProcessingException e) { +// throw new RuntimeException(e); +// } +// return insertId; +//} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/AppLabel.java.back b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppLabel.java.back new file mode 100644 index 0000000..a3089f4 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppLabel.java.back @@ -0,0 +1,66 @@ +package jp.co.y_net.amm.common; + +import jp.co.y_net.amm.dao.Localestring; +import jp.co.y_net.amm.dao.LocalestringDao; +import jp.co.y_net.amm.service.LocaleStringSearch; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.Model; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * 運用中に変わる可能性のあるメッセージの取得を行う。 + * + * + * + * + * 通常の利用 + *  引数 initialString に画面に表示した文字列を設定する。 + *  プログラムは自動的に、このメッセージをデータベースへ登録する。 + *  二回目以降の呼び出しでは、initialString とは関係なく、データベースに登録された値を取得する。 + * + * メッセージの変更 + *  1.データベース(localestring)に登録されている値を修正する。 + *  2.ダッシュボードからキャッシュクリアを実行する。 + * + * @author k_inaba + */ +public class AppLabel extends Label{ + + @SpringBean(name="localestringDao") + private LocalestringDao localestringDao; + + @SpringBean(name="localeStringSearch") + private LocaleStringSearch ls; + + + public AppLabel(String id) { + super(id); + } + public AppLabel(String screenId, String id, String initialString) { + super(id); + String controlid = id; + String message = ls.getDisplayString(screenId, controlid, 0, ""); + if(StringUtils.isEmpty(message)) { + /* まだ登録されていない文字列なので 登録する */ + Localestring newItem = new Localestring(); + newItem.setScreenid(screenId); + newItem.setControlid(controlid); + newItem.setPrintstring(initialString); + newItem.setLanguageid(0); + newItem.setNum(""); + localestringDao.add(newItem); + /* LocaleStringSearchのキャッシュをクリアして再取得する */ + ls.clearCash(); + message = ls.getDisplayString("", controlid, 0, ""); + } + this.setDefaultModel(Model.of(message)); + } + + public static AppLabel of(String screenId, String id, String def) { + return new AppLabel(screenId, id, def); + } + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/AppLogger.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppLogger.java new file mode 100644 index 0000000..59c6545 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppLogger.java @@ -0,0 +1,210 @@ +package jp.co.y_net.amm.common; + +import org.slf4j.LoggerFactory; + +/** + * 標準のロギングクラス + * + * エラーレベルは logback.xml の LEVEL_APP にて定義される。 + *  ・通常運用中は ERROR レベル + *  ・調査中は INFO レベル + *  とする。 + * + * ■ 各開発者による利用方法 + * debug, info, error のいずれかのメソッドを使用する。詳しくは、各メソッドのコメントを参照のこと。 + * + * ■ アプリケーションアーキテクチャからの利用 + * アプリケーションのエラーが発生したときは、WicketApplicationクラスから、RequestCycleListenerを経由して呼び出される。 + * + * ■ 利用のメリット + *  ・サーバーの catalina.out, catalina.err にアプリケーション固有のエラーが出力されなくなり、 + *   /var/log/app/tomcat/~/logs/AppLog に出力され、世代管理される。 + *  ・ログのレベルを指定できるため、開発時に記述したデバッグメッセージをわざわざ消さなくても良くなる。 + *  ・logbackを使用しているので、運用中にログ出力レベルの変更が可能。 + * + * K.inaba 2014/02/01 + */ +public class AppLogger { + private static boolean isLocal; + private static org.slf4j.Logger loggerSlf = LoggerFactory.getLogger(AppLogger.class.getName()); + + static { + /* + * 開発者担当者のOSのユーザ名を列挙する。 + * ここに記載がある場合に限り、ローカル開発環境とみなして、標準出力(Eclipseのコンソールなど)へ + * 出力を行う。 + */ + String debugKeys = ResourceReader.getStringQuick("debug.users"); + String[] arrayDebugKey; + if(debugKeys == null) { + arrayDebugKey = new String[]{}; + } else { + arrayDebugKey = debugKeys.split(","); + } + for(String key: arrayDebugKey) { + if (key.trim().equals(System.getenv("USERNAME"))) { + isLocal = true; + break; + } + } + } + + + public static void main(String[] args) throws InterruptedException { + sample(); + } + /** 利用方法のサンプル */ + private static void sample() { + String str = "sundata"; + AppLogger.debug("変数 str の値 = " + str); + + /* + * Infoレベルは運用中に必要となるかもしれないレベルの出力を担う。 + * 通常は表示されない。(開発者のコンソールには表示される。) + * 運用中に詳細なログが必要となった時に、「LEVEL_APP」property の設定を INFO にすること。 + */ + AppLogger.info("Infoレベルの出力。"); + AppLogger.info(new Exception("例外クラスにも対応")); + + /* + * Errorレベルは必ずログに出力される。 + * Try ~ Catch で活用する。 + */ + AppLogger.error("Errorレベルの出力。"); + AppLogger.error(new Exception("例外クラスにも対応")); + try { + int[] i = new int[]{1, 2, 3}; + if (i[3] == 4) { + return; + } + } catch (Exception e) { + AppLogger.error("配列の操作に失敗", e); + } + } + public static boolean isDebug() { + return isLocal; + } + /** + * 開発時のみ出力したいログを出力する。 + * → ローカル環境の標準出力(Eclipseのコンソールなど)にのみ出力される。 + * + * @param message 出力する文字列 + */ + public static void debug(String message) { + if (isLocal) System.out.println("[DEBUG] " + toPlace(getFromStack()) + "\n" + toString(message)); + } + /** + * 何らかのエラーが発生した時に、調査の参考となるログを出力する。 + * → logback.xml LEVEL_APP が INFO であれば、/var/log/app/tomcat/~/logs/AppLog に出力される。 + * → ローカル環境の標準出力(Eclipseのコンソールなど)にも出力される。 + * + * 【ログの出力先】 + * Eclipse : プロジェクト直下 sdc/logs/AppLog.yyyy-mm-dd + * Linux:%Tomcatインスタンス%/logs/AppLog.yyyy-mm-dd + * + * @param message 出力する文字列 + */ + public static void info(String message) { + if (isLocal) System.out.println("[INFO ] " + toPlace(getFromStack()) + "\n" + toString(message)); + loggerSlf.info(toPlace(getFromStack()) + "\n" + toString(message)); + } + /** + * @see AppLogger#info(String) + * @param exception 出力する例外クラス + */ + public static void info(Throwable exception) { + if (isLocal) System.out.println("[INFO ] " + toPlace(getFromStack()) + "\n" + toString(exception)); + loggerSlf.info(toPlace(getFromStack()) + "\n" + toString(exception)); + } + /** + * @see AppLogger#info(String) + * @param message 出力する文字列 + * @param exception 出力する例外クラス + */ + public static void info(String message, Throwable exception) { + if (isLocal) System.out.println("[INFO ] " + toPlace(getFromStack()) + "\n" + toString(message)); + if (isLocal) System.out.println("[INFO ] " + toPlace(getFromStack()) + "\n" + toString(exception)); + loggerSlf.info(toPlace(getFromStack()) + "\n" + toString(message)); + loggerSlf.info(toPlace(getFromStack()) + "\n" + toString(exception)); + } + /** + * Try ~ Catch などで使用する。System.err.println の代用。 + * @param message 出力する文字列 + */ + public static void error(String message) { + if (isLocal) System.out.println("[ERROR] " + toPlace(getFromStack()) + "\n" + toString(message)); + loggerSlf.error(toPlace(getFromStack()) + "\n" + toString(message)); + } + /** + * Try ~ Catch などで使用する。e.printStackTrace();の代用 + * @param exception 出力する例外クラス + */ + public static void error(Throwable exception) { + if (isLocal) System.out.println("[ERROR] " + toPlace(getFromStack()) + "\n" + toString(exception)); + loggerSlf.error(toPlace(getFromStack()) + "\n" + toString(exception)); + } + /** + * @param message + * @param exception + */ + public static void error(String message, Throwable exception) { + if (isLocal) System.out.println("[ERROR] " + toPlace(getFromStack()) + "\n" + toString(message)); + if (isLocal) System.out.println("[ERROR] " + toPlace(getFromStack()) + "\n" + toString(exception)); + loggerSlf.error(toPlace(getFromStack()) + "\n" + toString(message)); + loggerSlf.error(toPlace(getFromStack()) + "\n" + toString(exception)); + } + + + private static StackTraceElement getFromStack() { + return new Throwable().getStackTrace()[2]; // 必ず呼び出し元から2階層目でこのメソッドを呼ぶこと + } + private static String toPlace(StackTraceElement stack) { + return stack.getClassName() + "#" + stack.getMethodName() + "(" + + stack.getFileName() + ":" + stack.getLineNumber() + ")"; + } + private static String toString(Object message) { + String log; + if (message instanceof Throwable) { + log = " " + readStackTrace(new StringBuilder(), (Throwable) message, 1, null).toString(); + } else if (message == null) { + log = " " + null; + } else { + log = " " + message.toString(); + } + return log; + } + /** + * Exceptionの解析ツール + * @param sb + * @param throwable + * @param filter フィルター (スタックトレースの内、指定された文字列以外は無視する。全て有効とする場合はnullを指定。) + */ + private static StringBuilder readStackTrace(StringBuilder sb, Throwable throwable, int token, String filter) { + if(sb == null) sb = new StringBuilder(); + final String LINE_SEP = System.getProperty("line.separator"); + try { + String spacer = ""; + for (int i = 0; i < token; i++) { + spacer += " "; + } + sb.append(spacer + throwable.getClass().getName() + ":" + throwable.getMessage() + LINE_SEP); + StackTraceElement[] se = throwable.getStackTrace(); + for (int i = 0; i < se.length; i++) { + String trace = se[i].toString(); + if(filter == null + || (filter != null && trace.startsWith(filter))) { + + sb.append(spacer + " " + trace + LINE_SEP); + } + } + if (throwable.getCause() != null) { + /* 再帰呼び出し */ + readStackTrace(sb, throwable.getCause(), token + 1, filter); + } + } catch (Exception e) { + /* Exception解析でのエラーは無視することで、無限ループを回避 */ + e.printStackTrace(); + } + return sb; + } +} \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/AppSendMail.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppSendMail.java new file mode 100644 index 0000000..c96aaa3 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppSendMail.java @@ -0,0 +1,139 @@ +package jp.co.y_net.amm.common; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Properties; + +import javax.mail.Address; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AppSendMail { + private static Logger loggerSlfMail = LoggerFactory.getLogger("AmmMail"); + public static void loggingTest(String msg) { + loggerSlfMail.info(msg); + } + + public static class MailSetting{ + private String mailTo; + private String title; + private String body; + public void setMailTo(String mailTo) { + this.mailTo = mailTo; + } + public void setTemplate(String text) { + String tmp = text; + List lines = Arrays.asList(tmp.split("\n")); + for (String line: lines) { + if(title == null) { + title = line; // 1行目はタイトル + } else { + if(body == null) body = ""; + body += line + "\n"; + } + } + } + public void replace(String key, String value) { + body = body.replace("@"+ key +"@", value); + } + + @Override + public String toString() { + return "MailSetting [title=" + title + ", body=" + body + "]"; + } + } + + public static boolean send(MailSetting mainSetting) { + + Properties objPrp = new Properties(); + objPrp.put("mail.smtp.host", ResourceReader.getStringQuick("Smtp")); + objPrp.put("mail.host", ResourceReader.getStringQuick("Smtp")); + objPrp.put("mail.from", ResourceReader.getStringQuick("MailFrom")); + + /* メールセッションを確立 */ + Session mailSes = Session.getDefaultInstance(objPrp,null); + + /* 送信メッセージを生成 */ + MimeMessage objMsg = new MimeMessage(mailSes); + + try { + /* 設定:送信先 */ + List
lstAddress = new ArrayList
(); + Address to1 = new InternetAddress(mainSetting.mailTo); + lstAddress.add(to1); + Address[] to = (Address[]) lstAddress.toArray(new Address[0]); + objMsg.setRecipients(Message.RecipientType.TO, to); + + /* 設定:Fromヘッダ */ + InternetAddress objFrm = new InternetAddress(ResourceReader.getStringQuick("MailFrom")); + objMsg.setFrom(objFrm); + + /* 設定:件名 */ + objMsg.setSubject(mainSetting.title, "ISO-2022-JP"); + + /* 設定:本文 */ + String honbun = AppStringUtils.utf8ToSjis(mainSetting.body); + objMsg.setText(new String(honbun.getBytes("ISO-2022-JP")), "ISO-2022-JP"); + objMsg.setSentDate(new Date()); + + /* 送信メールのロギング */ + + loggerSlfMail.info("-----------------------------------------------------------"); + loggerSlfMail.info("Recipients:" + mainSetting.mailTo); + loggerSlfMail.info("Subject:" + mainSetting.title); + loggerSlfMail.info("Text:" + mainSetting.body); + + + /* メール送信実行 */ + Transport.send(objMsg); + + loggerSlfMail.info("Result:Success"); + return true; + + } catch (MessagingException e) { + loggerSlfMail.info("Result:Failure!!(see application log...)"); + AppLogger.error(e); + return false; + } catch (UnsupportedEncodingException e) { + loggerSlfMail.info("Result:Failure!!(see application log...)"); + AppLogger.error(e); + return false; + } + } + + /* + * メールサーバー構築 + * http://itpro.nikkeibp.co.jp/article/COLUMN/20060427/236452/ + * https://technet.microsoft.com/ja-jp/library/cc772058%28v=ws.10%29.aspx + * サーバーマネージャー>機能ビュー + */ + + public static void main(String[] args) { + // TODO インフラに ZASEKI サーバー 25ポート を開けてもらってテスト。 + + //sendMail(); + + /* + * 新着申請内容受信メール + */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.orgentry")); + setting.mailTo = ResourceReader.getStringQuick("mailto.olgentry"); + setting.replace("申請画面URL", "http://localhost:8080/AMM/orgentrydetail?orgid=" + 3); + send(setting); + + System.out.println(setting.toString()); + } + +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/AppStringUtils.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppStringUtils.java new file mode 100644 index 0000000..a921ed7 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppStringUtils.java @@ -0,0 +1,445 @@ +package jp.co.y_net.amm.common; + +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.wicket.model.Model; + + +public class AppStringUtils { + + public static String trim(String src) { + if(src == null) return ""; + return src.trim(); + } + public static String trim(Model ceModel) { + if(ceModel == null) return ""; + if(ceModel.getObject() == null) return ""; + return trim(ceModel.getObject().getId()); + } + public static String trimHalf(String str) { + return convZenkakuToHankaku(trim(str)); + } + + + + + + + + + /* ------------------------------------------------------------------------------------------------------------ */ + /* + * 既存より移植 + */ + + /** 半角カタカナ<-->全角カタカナ変換テーブル */ + private static final String kanaHanZenTbl[][] = { + /** 2文字構成の濁点付き半角カナ */ + /** 必ずテーブルに先頭に置いてサーチ順を優先すること */ + { "ガ", "ガ" }, { "ギ", "ギ" }, { "グ", "グ" }, { "ゲ", "ゲ" }, { "ゴ", "ゴ" }, + { "ザ", "ザ" }, { "ジ", "ジ" }, { "ズ", "ズ" }, { "ゼ", "ゼ" }, { "ゾ", "ゾ" }, + { "ダ", "ダ" }, { "ヂ", "ヂ" }, { "ヅ", "ヅ" }, { "デ", "デ" }, { "ド", "ド" }, + { "バ", "バ" }, { "ビ", "ビ" }, { "ブ", "ブ" }, { "ベ", "ベ" }, { "ボ", "ボ" }, + { "パ", "パ" }, { "ピ", "ピ" }, { "プ", "プ" }, { "ペ", "ペ" }, { "ポ", "ポ" }, + { "ヴ", "ヴ" }, + /** 1文字構成の半角カナ */ + { "ア", "ア" }, { "イ", "イ" }, { "ウ", "ウ" }, { "エ", "エ" }, { "オ", "オ" }, + { "カ", "カ" }, { "キ", "キ" }, { "ク", "ク" }, { "ケ", "ケ" }, { "コ", "コ" }, + { "サ", "サ" }, { "シ", "シ" }, { "ス", "ス" }, { "セ", "セ" }, { "ソ", "ソ" }, + { "タ", "タ" }, { "チ", "チ" }, { "ツ", "ツ" }, { "テ", "テ" }, { "ト", "ト" }, + { "ナ", "ナ" }, { "ニ", "ニ" }, { "ヌ", "ヌ" }, { "ネ", "ネ" }, { "ノ", "ノ" }, + { "ハ", "ハ" }, { "ヒ", "ヒ" }, { "フ", "フ" }, { "ヘ", "ヘ" }, { "ホ", "ホ" }, + { "マ", "マ" }, { "ミ", "ミ" }, { "ム", "ム" }, { "メ", "メ" }, { "モ", "モ" }, + { "ヤ", "ヤ" }, { "ユ", "ユ" }, { "ヨ", "ヨ" }, + { "ラ", "ラ" }, { "リ", "リ" }, { "ル", "ル" }, { "レ", "レ" }, { "ロ", "ロ" }, + { "ワ", "ワ" }, { "ヲ", "ヲ" }, { "ン", "ン" }, + { "ァ", "ァ" }, { "ィ", "ィ" }, { "ゥ", "ゥ" }, { "ェ", "ェ" }, { "ォ", "ォ" }, + { "ャ", "ャ" }, { "ュ", "ュ" }, { "ョ", "ョ" }, { "ッ", "ッ" }, + { "。", "。" }, { "「", "「" }, { "」", "」" }, { "、", "、" }, { "・", "・" }, + { "ー", "ー" }, { "", "" } + }; + /** + * 全角→半角に変換する(英字、数字、記号、カタカナ) + * + * @param 対象文字列 + * @return 変換後文字列 + */ + public static String convZenkakuToHankaku(String s){ + String convStr; + + /** 英字、数字、記号 */ + convStr = convZenkakuLatinCharToHankakuLatinChar(s); + + /** カタカナ */ + convStr = convZenkakuKatakanaToHankakuKatakana(convStr); + + return convStr; + } + /** + * 全角ラテン基本文字→半角ラテン基本文字に変換する
+ * + * ラテン基本文字(英字、数字、記号) + * + * @param 対象文字列 + * @return 変換後文字列 + */ + public static String convZenkakuLatinCharToHankakuLatinChar(String s){ + String str = ""; + + /** パラメータの文字列を先頭から1文字づつ調べる */ + for (int i = 0; i < s.length(); i++) { + /** 文字列から1文字取り出します */ + Character c = new Character(s.substring(i, i + 1).charAt(0)); + + /** Unicode全角ラテン文字のコード範囲(!から~)であるか調べる */ + if (c.compareTo(new Character((char)0xff01)) >= 0 && c.compareTo(new Character((char)0xff5e)) <= 0) { + /** 変換文字から0xfee0を減算して半角文字に変換 */ + Character x = new Character((char) (c.charValue() - (new Character((char)0xfee0)).charValue())); + + /** 文字列としてセット */ + str = str + x.toString(); + } else { + /** 全角ラテン文字以外はそのままセット */ + str = str + s.substring(i, i + 1); + } + } + + /** 変換後文字列を返す */ + return str; + } + /** + * 全角カタカナ→半角カタカナに変換する + * + * @param 対象文字列 + * @return 変換後文字列 + */ + public static String convZenkakuKatakanaToHankakuKatakana(String s) { + String str = ""; + + /** パラメータの文字列を先頭から1文字づつ調べる */ + for (int i = 0, j = 0; i < s.length(); i++) { + /** 文字列から1文字取り出す */ + Character c = new Character(s.substring(i, i + 1).charAt(0)); + + /** Unicode全角カタカナのコード範囲か調べる */ + if (c.compareTo(new Character((char)0x30a1)) >= 0 && c.compareTo(new Character((char)0x30fc)) <= 0) { + /** 半角全角変換テーブルから対応する半角カナを取得して戻り文字列へセット */ + for (j = 0; j < kanaHanZenTbl.length; j++) { + if (s.substring(i).startsWith(kanaHanZenTbl[j][1])) { + str = str + kanaHanZenTbl[j][0]; + break; + } + } + + /** 半角全角変換テーブルにマッチするエントリがなければそのままセット */ + if (j >= kanaHanZenTbl.length) { + str = str + s.substring(i, i + 1); + } + } else { + /** 全角カタカナ以外はそのままセット */ + str = str + s.substring(i, i + 1); + } + } + + /** 変換後文字列を返す */ + return str; + } + /** + * 引数の文字列(UTF-8)を、Shift_JISにエンコードする。 + * @param value 変換対象の文字列 + * @return エンコードされた文字列 + */ + public static String utf8ToSjis(String value) { + try { + /* Sjisにすると文字化けするUnicodeにも対応する。*/ + if(value != null) { + StringBuffer sb = new StringBuffer(); + for(char c: value.toCharArray()) { + sb.append(unicodeToSjis(Character.toString(c))); + } + value = sb.toString(); + } + boolean[] boolAry = new boolean[value.length()]; + byte[] srcStream = value.getBytes("UTF-8"); + value = convert(new String(srcStream, "UTF-8"), "UTF-8", "SJIS"); + boolAry = getQuePos(boolAry,value); + byte[] destStream = value.getBytes("SJIS"); + value = new String(destStream, "SJIS"); + value = convertGeta(value,boolAry); + return value; + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + /** + * 文字列中の「?」の位置を取得する。 + * + * @param value 変換対象の文字列 + * @return boolAry 文字列中の「?」の位置 + */ + private static boolean[] getQuePos(boolean[] boolAry, String value) { + for (int i = 0; i < value.length(); i++) { + if (value.substring(i, i + 1).equals("?")) { + boolAry[i] = true; + } else { + boolAry[i] = false; + } + } + return boolAry; + } + /** + * 文字化け「?」を代用文字「〓」に変換する。 + * + * @param value 変換対象の文字列 + * @param bAry 変換する文字位置 + * @return newVal 変換後の文字列 + */ + private static String convertGeta(String value, boolean[] bAry) { + String newVal = ""; + String c = ""; + for (int i = 0; i < value.length(); i++) { + c = value.substring(i, i + 1); + if (bAry[i] == false) { + if (c.equals("?")) { + c = "〓"; + } + } + newVal = newVal + c; + } + return newVal; + } + /** + * 引数の文字列を、エンコードする。 + * + * @param value 変換対象の文字列 + * @param src 変換前の文字コード + * @param dest 変換後の文字コード + * @return エンコードされた文字列 + */ + private static String convert(String value, String src, String dest) { + Map conversion = createConversionMap(src, dest); + char oldChar; + char newChar; + String key; + for (Iterator itr = conversion.keySet().iterator(); itr.hasNext();) { + key = itr.next(); + oldChar = toChar(key); + newChar = toChar(conversion.get(key)); + value = value.replace(oldChar, newChar); + } + return value; + } + /** + * エンコード情報を作成する + * + * @param src 変換前の文字コード + * @param dest 変換後の文字コード + * @return エンコードされた文字列 + */ + private static Map createConversionMap(String src, String dest) { + Map conversion = new HashMap(); + if ((src.equals("UTF-8")) && (dest.equals("SJIS"))) { + // -(全角マイナス) + conversion.put("U+FF0D", "U+2212"); + // ~(全角チルダ) + conversion.put("U+FF5E", "U+301C"); + // ¢(セント) + conversion.put("U+FFE0", "U+00A2"); + // £(ポンド) + conversion.put("U+FFE1", "U+00A3"); + // ¬(ノット) + conversion.put("U+FFE2", "U+00AC"); + // ―(全角マイナスより少し幅のある文字) + conversion.put("U+2015", "U+2014"); + // ∥(半角パイプが2つ並んだような文字) + conversion.put("U+2225", "U+2016"); + + } else if ((src.equals("SJIS")) && (dest.equals("UTF-8"))) { + // -(全角マイナス) + conversion.put("U+2212", "U+FF0D"); + // ~(全角チルダ) + conversion.put("U+301C", "U+FF5E"); + // ¢(セント) + conversion.put("U+00A2", "U+FFE0"); + // £(ポンド) + conversion.put("U+00A3", "U+FFE1"); + // ¬(ノット) + conversion.put("U+00AC", "U+FFE2"); + // ―(全角マイナスより少し幅のある文字) + conversion.put("U+2014", "U+2015"); + // ∥(半角パイプが2つ並んだような文字) + conversion.put("U+2016", "U+2225"); + + } else { + throw new RuntimeException("この文字コードはサポートしていません。\n・src=" + src + ",dest=" + dest); + } + return conversion; + } + + /** + * 16進表記の文字を取得する。 + * + * @param value 変換対象の文字列 + * @return 16進表記の文字 + */ + private static char toChar(String value) { + return (char) Integer.parseInt(value.trim().substring("U+".length()), 16); + } + + + /** Sjisにすると文字化けするUnicodeにも対応する。*/ + public static String unicodeToSjis(String value) { + if(value == null || value.length() != 1) { + return value; + } + char decodeStr; + + int code = (int)value.charAt(0); + String hex = Integer.toHexString(code); + hex = "u" + hex.toUpperCase(); + + if (hex.equals("u3299")==true) { decodeStr = Character.valueOf('\u79D8');} //㊙(?)→秘(秘) + else if (hex.equals("u4EFD")==true) { decodeStr = Character.valueOf('\u5F6C');} //份(?)→彬(彬) + else if (hex.equals("u4FE0")==true) { decodeStr = Character.valueOf('\u4FA0');} //俠(?)→侠(侠) + else if (hex.equals("u4FE0")==true) { decodeStr = Character.valueOf('\u4FA0');} //俠(?)→侠(侠) + else if (hex.equals("u501C")==true) { decodeStr = Character.valueOf('\u4FF6');} //倜(?)→俶(俶) + else if (hex.equals("u502E")==true) { decodeStr = Character.valueOf('\u88F8');} //倮(?)→裸(裸) + else if (hex.equals("u5040")==true) { decodeStr = Character.valueOf('\u82F1');} //偀(?)→英(英) + else if (hex.equals("u5042")==true) { decodeStr = Character.valueOf('\u524D');} //偂(?)→前(前) + else if (hex.equals("u5070")==true) { decodeStr = Character.valueOf('\u5951');} //偰(?)→契(契) + else if (hex.equals("u510B")==true) { decodeStr = Character.valueOf('\u62C5');} //儋(?)→担(担) + else if (hex.equals("u519D")==true) { decodeStr = Character.valueOf('\u5B9C');} //冝(?)→宜(宜) + else if (hex.equals("u51EE")==true) { decodeStr = Character.valueOf('\u98A8');} //凮(?)→風(風) + else if (hex.equals("u525D")==true) { decodeStr = Character.valueOf('\u5265');} //剝(?)→剥(剥) + else if (hex.equals("u525D")==true) { decodeStr = Character.valueOf('\u5265');} //剝(?)→剥(剥) + else if (hex.equals("u52C8")==true) { decodeStr = Character.valueOf('\u52C7');} //勈(?)→勇(勇) + else if (hex.equals("u5393")==true) { decodeStr = Character.valueOf('\u5D16');} //厓(?)→崖(崖) + else if (hex.equals("u5500")==true) { decodeStr = Character.valueOf('\u8A98');} //唀(?)→誘(誘) + else if (hex.equals("u5511")==true) { decodeStr = Character.valueOf('\u566C');} //唑(?)→噬(噬) + else if (hex.equals("u555E")==true) { decodeStr = Character.valueOf('\u5516');} //啞(?)→唖(唖) + else if (hex.equals("u555E")==true) { decodeStr = Character.valueOf('\u5516');} //啞(?)→唖(唖) + else if (hex.equals("u5649")==true) { decodeStr = Character.valueOf('\u5556');} //噉(?)→啖(啖) + else if (hex.equals("u5653")==true) { decodeStr = Character.valueOf('\u5618');} //噓(?)→嘘(嘘) + else if (hex.equals("u5653")==true) { decodeStr = Character.valueOf('\u5618');} //噓(?)→嘘(嘘) + else if (hex.equals("u5699")==true) { decodeStr = Character.valueOf('\u565B');} //嚙(?)→噛(噛) + else if (hex.equals("u5699")==true) { decodeStr = Character.valueOf('\u565B');} //嚙(?)→噛(噛) + else if (hex.equals("u569E")==true) { decodeStr = Character.valueOf('\u54F2');} //嚞(?)→哲(哲) + else if (hex.equals("u56CA")==true) { decodeStr = Character.valueOf('\u56A2');} //囊(?)→嚢(嚢) + else if (hex.equals("u56CA")==true) { decodeStr = Character.valueOf('\u56A2');} //囊(?)→嚢(嚢) + else if (hex.equals("u5723")==true) { decodeStr = Character.valueOf('\u8056');} //圣(?)→聖(聖) + else if (hex.equals("u57C8")==true) { decodeStr = Character.valueOf('\u5CFB');} //埈(?)→峻(峻) + else if (hex.equals("u5861")==true) { decodeStr = Character.valueOf('\u586B');} //塡(?)→填(填) + else if (hex.equals("u5861")==true) { decodeStr = Character.valueOf('\u586B');} //塡(?)→填(填) + else if (hex.equals("u5AF0")==true) { decodeStr = Character.valueOf('\u5AE9');} //嫰(?)→嫩(嫩) + else if (hex.equals("u5C1E")==true) { decodeStr = Character.valueOf('\u71CE');} //尞(?)→燎(燎) + else if (hex.equals("u5C5B")==true) { decodeStr = Character.valueOf('\u5C4F');} //屛(?)→屏(屏) + else if (hex.equals("u5C5B")==true) { decodeStr = Character.valueOf('\u5C4F');} //屛(?)→屏(屏) + else if (hex.equals("u5C62")==true) { decodeStr = Character.valueOf('\u5C61');} //屢(?)→屡(屡) + else if (hex.equals("u5C62")==true) { decodeStr = Character.valueOf('\u5C61');} //屢(?)→屡(屡) + else if (hex.equals("u5C88")==true) { decodeStr = Character.valueOf('\u8C3A');} //岈(?)→谺(谺) + else if (hex.equals("u5CBA")==true) { decodeStr = Character.valueOf('\u5DBA');} //岺(?)→嶺(嶺) + else if (hex.equals("u5FB0")==true) { decodeStr = Character.valueOf('\u5F81');} //徰(?)→征(征) + else if (hex.equals("u61BC")==true) { decodeStr = Character.valueOf('\u656C');} //憼(?)→敬(敬) + else if (hex.equals("u6414")==true) { decodeStr = Character.valueOf('\u63BB');} //搔(?)→掻(掻) + else if (hex.equals("u6414")==true) { decodeStr = Character.valueOf('\u63BB');} //搔(?)→掻(掻) + else if (hex.equals("u6451")==true) { decodeStr = Character.valueOf('\u63B4');} //摑(?)→掴(掴) + else if (hex.equals("u6451")==true) { decodeStr = Character.valueOf('\u63B4');} //摑(?)→掴(掴) + else if (hex.equals("u64E5")==true) { decodeStr = Character.valueOf('\u652C');} //擥(?)→攬(攬) + else if (hex.equals("u6522")==true) { decodeStr = Character.valueOf('\u6505');} //攢(?)→攅(攅) + else if (hex.equals("u6522")==true) { decodeStr = Character.valueOf('\u6505');} //攢(?)→攅(攅) + else if (hex.equals("u658A")==true) { decodeStr = Character.valueOf('\u6589');} //斊(?)→斉(斉) + else if (hex.equals("u6609")==true) { decodeStr = Character.valueOf('\u70B3');} //昉(?)→炳(炳) + else if (hex.equals("u6630")==true) { decodeStr = Character.valueOf('\u662F');} //昰(?)→是(是) + else if (hex.equals("u663B")==true) { decodeStr = Character.valueOf('\u6602');} //昻(?)→昂(昂) + else if (hex.equals("u663B")==true) { decodeStr = Character.valueOf('\u6602');} //昻(?)→昂(昂) + else if (hex.equals("u6665")==true) { decodeStr = Character.valueOf('\u7696');} //晥(?)→皖(皖) + else if (hex.equals("u66FA")==true) { decodeStr = Character.valueOf('\u66F9');} //曺(?)→曹(曹) + else if (hex.equals("u6702")==true) { decodeStr = Character.valueOf('\u52D7');} //朂(?)→勗(勗) + else if (hex.equals("u67FA")==true) { decodeStr = Character.valueOf('\u67B4');} //柺(?)→枴(枴) + else if (hex.equals("u67FA")==true) { decodeStr = Character.valueOf('\u67B4');} //柺(?)→枴(枴) + else if (hex.equals("u6805")==true) { decodeStr = Character.valueOf('\u67F5');} //栅(?)→柵(柵) + else if (hex.equals("u6805")==true) { decodeStr = Character.valueOf('\u67F5');} //栅(?)→柵(柵) + else if (hex.equals("u68A5")==true) { decodeStr = Character.valueOf('\u677E');} //梥(?)→松(松) + else if (hex.equals("u6A03")==true) { decodeStr = Character.valueOf('\u6994');} //樃(?)→榔(榔) + else if (hex.equals("u6A03")==true) { decodeStr = Character.valueOf('\u6994');} //樃(?)→榔(榔) + else if (hex.equals("u6A45")==true) { decodeStr = Character.valueOf('\u6A21');} //橅(?)→模(模) + else if (hex.equals("u6B56")==true) { decodeStr = Character.valueOf('\u559C');} //歖(?)→喜(喜) + else if (hex.equals("u6BF1")==true) { decodeStr = Character.valueOf('\u97A0');} //毱(?)→鞠(鞠) + else if (hex.equals("u6D82")==true) { decodeStr = Character.valueOf('\u5857');} //涂(?)→塗(塗) + else if (hex.equals("u6F51")==true) { decodeStr = Character.valueOf('\u6E8C');} //潑(?)→溌(溌) + else if (hex.equals("u6F51")==true) { decodeStr = Character.valueOf('\u6E8C');} //潑(?)→溌(溌) + else if (hex.equals("u7006")==true) { decodeStr = Character.valueOf('\u6D9C');} //瀆(?)→涜(涜) + else if (hex.equals("u7006")==true) { decodeStr = Character.valueOf('\u6D9C');} //瀆(?)→涜(涜) + else if (hex.equals("u705E")==true) { decodeStr = Character.valueOf('\u8987');} //灞(?)→覇(覇) + else if (hex.equals("u7130")==true) { decodeStr = Character.valueOf('\u7114');} //焰(?)→焔(焔) + else if (hex.equals("u7130")==true) { decodeStr = Character.valueOf('\u7114');} //焰(?)→焔(焔) + else if (hex.equals("u7147")==true) { decodeStr = Character.valueOf('\u6689');} //煇(?)→暉(暉) + else if (hex.equals("u7411")==true) { decodeStr = Character.valueOf('\u7463');} //琑(?)→瑣(瑣) + else if (hex.equals("u7431")==true) { decodeStr = Character.valueOf('\u5F6B');} //琱(?)→彫(彫) + else if (hex.equals("u7626")==true) { decodeStr = Character.valueOf('\u75E9');} //瘦(?)→痩(痩) + else if (hex.equals("u7626")==true) { decodeStr = Character.valueOf('\u75E9');} //瘦(?)→痩(痩) + else if (hex.equals("u76A6")==true) { decodeStr = Character.valueOf('\u768E');} //皦(?)→皎(皎) + else if (hex.equals("u7900")==true) { decodeStr = Character.valueOf('\u6F97');} //礀(?)→澗(澗) + else if (hex.equals("u79B1")==true) { decodeStr = Character.valueOf('\u7977');} //禱(?)→祷(祷) + else if (hex.equals("u79B1")==true) { decodeStr = Character.valueOf('\u7977');} //禱(?)→祷(祷) + else if (hex.equals("u7C1E")==true) { decodeStr = Character.valueOf('\u7BAA');} //簞(?)→箪(箪) + else if (hex.equals("u7C1E")==true) { decodeStr = Character.valueOf('\u7BAA');} //簞(?)→箪(箪) + else if (hex.equals("u7CB7")==true) { decodeStr = Character.valueOf('\u9EB9');} //粷(?)→麹(麹) + else if (hex.equals("u7E61")==true) { decodeStr = Character.valueOf('\u7E4D');} //繡(?)→繍(繍) + else if (hex.equals("u7E61")==true) { decodeStr = Character.valueOf('\u7E4D');} //繡(?)→繍(繍) + else if (hex.equals("u7E6B")==true) { decodeStr = Character.valueOf('\u7E4B');} //繫(?)→繋(繋) + else if (hex.equals("u7E6B")==true) { decodeStr = Character.valueOf('\u7E4B');} //繫(?)→繋(繋) + else if (hex.equals("u80DC")==true) { decodeStr = Character.valueOf('\u52DD');} //胜(?)→勝(勝) + else if (hex.equals("u8330")==true) { decodeStr = Character.valueOf('\u8438');} //茰(?)→萸(萸) + else if (hex.equals("u8346")==true) { decodeStr = Character.valueOf('\u834A');} //荆(?)→荊(荊) + else if (hex.equals("u8346")==true) { decodeStr = Character.valueOf('\u834A');} //荆(?)→荊(荊) + else if (hex.equals("u840A")==true) { decodeStr = Character.valueOf('\u83B1');} //萊(?)→莱(莱) + else if (hex.equals("u840A")==true) { decodeStr = Character.valueOf('\u83B1');} //萊(?)→莱(莱) + else if (hex.equals("u8493")==true) { decodeStr = Character.valueOf('\u84F4');} //蒓(?)→蓴(蓴) + else if (hex.equals("u8523")==true) { decodeStr = Character.valueOf('\u848B');} //蔣(?)→蒋(蒋) + else if (hex.equals("u8523")==true) { decodeStr = Character.valueOf('\u848B');} //蔣(?)→蒋(蒋) + else if (hex.equals("u8610")==true) { decodeStr = Character.valueOf('\u8431');} //蘐(?)→萱(萱) + else if (hex.equals("u8612")==true) { decodeStr = Character.valueOf('\u8429');} //蘒(?)→萩(萩) + else if (hex.equals("u87EC")==true) { decodeStr = Character.valueOf('\u8749');} //蟬(?)→蝉(蝉) + else if (hex.equals("u87EC")==true) { decodeStr = Character.valueOf('\u8749');} //蟬(?)→蝉(蝉) + else if (hex.equals("u881F")==true) { decodeStr = Character.valueOf('\u874B');} //蠟(?)→蝋(蝋) + else if (hex.equals("u881F")==true) { decodeStr = Character.valueOf('\u874B');} //蠟(?)→蝋(蝋) + else if (hex.equals("u88F5")==true) { decodeStr = Character.valueOf('\u88F4');} //裵(?)→裴(裴) + else if (hex.equals("u8989")==true) { decodeStr = Character.valueOf('\u7F88');} //覉(?)→羈(羈) + else if (hex.equals("u8990")==true) { decodeStr = Character.valueOf('\u899A');} //覐(?)→覚(覚) + else if (hex.equals("u8A37")==true) { decodeStr = Character.valueOf('\u4F38');} //訷(?)→伸(伸) + else if (hex.equals("u8EC0")==true) { decodeStr = Character.valueOf('\u8EAF');} //軀(?)→躯(躯) + else if (hex.equals("u8EC0")==true) { decodeStr = Character.valueOf('\u8EAF');} //軀(?)→躯(躯) + else if (hex.equals("u91AC")==true) { decodeStr = Character.valueOf('\u91A4');} //醬(?)→醤(醤) + else if (hex.equals("u91AC")==true) { decodeStr = Character.valueOf('\u91A4');} //醬(?)→醤(醤) + else if (hex.equals("u91B1")==true) { decodeStr = Character.valueOf('\u9197');} //醱(?)→醗(醗) + else if (hex.equals("u91B1")==true) { decodeStr = Character.valueOf('\u9197');} //醱(?)→醗(醗) + else if (hex.equals("u969D")==true) { decodeStr = Character.valueOf('\u5CF6');} //隝(?)→島(島) + else if (hex.equals("u974D")==true) { decodeStr = Character.valueOf('\u9DB4');} //靍(?)→鶴(鶴) + else if (hex.equals("u974E")==true) { decodeStr = Character.valueOf('\u9DB4');} //靎(?)→鶴(鶴) + else if (hex.equals("u974F")==true) { decodeStr = Character.valueOf('\u9DB4');} //靏(?)→鶴(鶴) + else if (hex.equals("u982B")==true) { decodeStr = Character.valueOf('\u4FEF');} //頫(?)→俯(俯) + else if (hex.equals("u9830")==true) { decodeStr = Character.valueOf('\u982C');} //頰(?)→頬(頬) + else if (hex.equals("u9830")==true) { decodeStr = Character.valueOf('\u982C');} //頰(?)→頬(頬) + else if (hex.equals("u985A")==true) { decodeStr = Character.valueOf('\u985B');} //顚(?)→顛(顛) + else if (hex.equals("u985A")==true) { decodeStr = Character.valueOf('\u985B');} //顚(?)→顛(顛) + else if (hex.equals("u9A52")==true) { decodeStr = Character.valueOf('\u9A28');} //驒(?)→騨(騨) + else if (hex.equals("u9A52")==true) { decodeStr = Character.valueOf('\u9A28');} //驒(?)→騨(騨) + else if (hex.equals("u9DD7")==true) { decodeStr = Character.valueOf('\u9D0E');} //鷗(?)→鴎(鴎) + else if (hex.equals("u9DD7")==true) { decodeStr = Character.valueOf('\u9D0E');} //鷗(?)→鴎(鴎) + else if (hex.equals("u9E7C")==true) { decodeStr = Character.valueOf('\u9E78');} //鹼(?)→鹸(鹸) + else if (hex.equals("u9E7C")==true) { decodeStr = Character.valueOf('\u9E78');} //鹼(?)→鹸(鹸) + else if (hex.equals("u9EB4")==true) { decodeStr = Character.valueOf('\u9EB9');} //麴(?)→麹(麹) + else if (hex.equals("u9EB4")==true) { decodeStr = Character.valueOf('\u9EB9');} //麴(?)→麹(麹) + else if (hex.equals("u9EB5")==true) { decodeStr = Character.valueOf('\u9EBA');} //麵(?)→麺(麺) + else if (hex.equals("u9EB5")==true) { decodeStr = Character.valueOf('\u9EBA');} //麵(?)→麺(麺) + else if (hex.equals("u9FA2")==true) { decodeStr = Character.valueOf('\u548C');} //龢(?)→和(和) + else { + decodeStr = value.charAt(0); + } + return Character.toString(decodeStr); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/AppUtils.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppUtils.java new file mode 100644 index 0000000..ce30f66 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/AppUtils.java @@ -0,0 +1,296 @@ +package jp.co.y_net.amm.common; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ProtocolException; +import java.net.URL; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringUtils; + +// TODO メッセージ取得部品の作成と利用 + +public class AppUtils { + + public static String urlDecode(String str) { + try { + str = URLDecoder.decode(str, "UTF-8"); // URLデコード + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + return str; + } + + + private static final DateFormat DF_LONG = new SimpleDateFormat("yyyyMMddHHmmss"); + private static final DateFormat DF_SHORT = new SimpleDateFormat("yyyyMMdd"); + + + /** + * @return 現在日付 + */ + public static Integer createNowShort() { + Date d = new Date(); + String s = DF_SHORT.format(d); + Integer n = Integer.parseInt(s); + return n; + } + /** + * @return 現在日時 + */ + public static Long createNowLong() { + Date d = new Date(); + String s = DF_LONG.format(d); + Long n = Long.parseLong(s); + return n; + } + /** + * @param offset 加算する[秒] + * @return 現在日時に offset を加算した時間 + */ + public static Long createNowLong(int offset) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.SECOND, offset); + Date d = c.getTime(); + String s = DF_LONG.format(d); + Long n = Long.parseLong(s); + return n; + } + + public static Date toDate(Long longDate) { + try { + String s = String.valueOf(longDate); + Date d = DF_LONG.parse(s); + return d; + } catch (Exception e) { + return null; + } + } + + public static Integer toInteger(String str) { + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + return -1; + } + } + public static boolean toBoolean(Integer integer) { + return AppDef.TRUE.equals(integer); + } + public static String toStr(Number num) { + if(num == null) { + return ""; + } + return String.valueOf(num); + } + public static String toStrYyyyMMdd(Integer integer) { + String str = toStr(integer); + if(str.length() == 8) { + str = str.substring(0, 4) + "/" + str.substring(4, 6) + "/" + str.substring(6, 8); + } + return str; + } + public static String toStrYyyyMMdd(Long integer) { + String str = toStr(integer); + if(str.length() >= 8) { + str = str.substring(0, 4) + "/" + str.substring(4, 6) + "/" + str.substring(6, 8); + } + return str; + } + public static String toStrYyyyMMdd_HHmmss(Long integer) { + String str = toStr(integer); + if(str.length() >= 14) { + str = str.substring(0, 4) + "/" + str.substring(4, 6) + "/" + str.substring(6, 8) + + " " + str.substring(8, 10) + ":" + str.substring(10, 12) + ":" + str.substring(12, 14); + } + return str; + } + private static final DateFormat DF_YYYYMMDD = new SimpleDateFormat("yyyy/MM/dd"); + public static String toStrYyyyMMdd(Date date) { + if(date == null) return ""; + return DF_YYYYMMDD.format(date); + } + + /** ID-04900,ID-05242 二つのBooleanを比較する */ + public static boolean equals(Boolean a, Boolean b) { + if(a == null && b == null) return true; + if(a == null && b != null) return false; + if(a != null && b == null) return false; + return a.equals(b); + } + /** ID-04900,ID-05242 二つのIntegerを比較する */ + public static boolean equals(Integer a, Integer b) { + if(a == null && b == null) return true; + if(a == null && b != null) return false; + if(a != null && b == null) return false; + return a.equals(b); + } + /** ID-04900,ID-05242 二つのStringを比較する */ + public static boolean equals(String a, String b) { + if(a == null && b == null) return true; + if(a == null && b != null) return false; + if(a != null && b == null) return false; + return a.equals(b); + } + + public static void main(String[] args) { + Map param = new HashMap(); + param.put("loginid", "test@example.com"); + param.put("parame2", "()=~"); + int result = httpRequest("http://www.y-net.co.jp/abc", param); + + if(result == 200) { + AppLogger.debug("送信成功"); + } else { + AppLogger.error("送信失敗 " + result); + } + } + + /** + * 外部APIに退会者のログインIDを通知 + * @param usr + */ + public static void callDeleteNotice(Usr usr) { + List list = new ArrayList(); + list.add(usr); + callDeleteNotice(list); + } + /** + * 外部APIに退会者のログインIDを通知 + * @param users + */ + public static void callDeleteNotice(List users) { + Map param = new HashMap(); + param.put("size", String.valueOf(users.size())); + for (int i = 0; i < users.size(); i++) { + param.put("loginid" + i, users.get(i).getLoginid()); + } + String urlApiDeletecall = ResourceReader.getStringQuick("api.deletenotice"); + int r = AppUtils.httpRequest(urlApiDeletecall, param); + if(r >= 400) { + AppLogger.error( + "外部APIに退会者のログインIDを通知する処理が失敗しました。" + + " URL=" + urlApiDeletecall + + " HTTPステータスコード=" + r); + } + } + public static int httpRequest(String url, Map params) { + + if(params != null && params.isEmpty() == false) { + String queryString = ""; + for(Map.Entry param: params.entrySet()) { + if(StringUtils.isEmpty(queryString) == false) { + queryString += "&"; + } + String value; + try { + value = URLEncoder.encode(param.getValue(), "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + queryString += param.getKey() + "=" + value; + } + url += "?" + queryString; + } + AppLogger.debug("http request:" + url); + try { + URL urlObj = new URL(url); + HttpURLConnection urlCon = (HttpURLConnection) urlObj.openConnection(); + urlCon.setRequestMethod("GET"); + urlCon.connect(); + int status = urlCon.getResponseCode(); + +// InputStream is = urlCon.getInputStream(); +// BufferedReader reader = new BufferedReader(new InputStreamReader(is)); +// String s; +// while ((s = reader.readLine()) != null) { +// System.out.println(s); +// } +// reader.close(); + + return status; + + } catch (MalformedURLException e) { + AppLogger.error(e); + return -1; + } catch (ProtocolException e) { + AppLogger.error(e); + return -1; + } catch (IOException e) { + AppLogger.error(e); + return -1; + } + + } +// /** +// * 入力されたURLが実在するかチェックする処理 +// * 実在するとき、エラーコードブランクでリターン 実在しないときエラーコードにエラーの理由をセットしてリターン +// * @param url url +// * @return errorCode エラーの理由 +// * */ +// public static String urlChecker(String url) { +// String errorCode = ""; +// +// try { +// /* httpsのページは表示できないため、httpで目的のページを閲覧する */ +// if(url.startsWith("https") == true) { +// url.replace("https", "http"); +// } +// URL u = new URL(url); +// HttpURLConnection urlCon = null; +// try { +// urlCon = (HttpURLConnection) u.openConnection(); +// try { +// urlCon.setRequestMethod("GET"); +// try { +// urlCon.connect(); +// int status = urlCon.getResponseCode(); +// if(status == 200) { +// errorCode = ""; +// } else { +// errorCode = "リンクが切れています。"; +// } +// } catch (UnknownHostException e) { +// /* ホスト名に誤り */ +// errorCode = "入力したURLに誤りがあります。"; +// } catch (NullPointerException e) { +// /* コネクションなどでエラー */ +// errorCode = "入力したURLに誤りがあります。"; +// e.printStackTrace(); +// } +// } catch (ProtocolException e) { +// /* プロトコルでエラー */ +// errorCode = "ネットワークに問題があります。"; +// } finally { +// /* コネクションの切断 */ +// urlCon.disconnect(); +// } +// } catch (IOException e) { +// /* コネクションなどでエラー */ +// errorCode = "入力したURLに誤りがあります。"; +// e.printStackTrace(); +// } +// } catch (MalformedURLException e) { +// /* URLの構文が不正 */ +// errorCode = "入力したURLに誤りがあります。"; +// } +// return errorCode; +// } + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/CalcHash.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/CalcHash.java new file mode 100644 index 0000000..d149bdb --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/CalcHash.java @@ -0,0 +1,55 @@ +package jp.co.y_net.amm.common; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class CalcHash { +// private static int STRETCH_COUNT = 500; + public static String passowrdHash(String password, String account) { +// String salt = getSha256(loginId); +// String hash = ""; +// +// for (int i = 0; i < STRETCH_COUNT; i++) { +// hash = getSha256(hash + salt + password); +// } +// return hash; + + return getSha256(account+":"+password); + } + public static String challengeResponse(String phash, String chvalue) { + //return getSha256(passwordHash + challenge); + return getSha256(phash+":"+chvalue); + } + /* + * 文字列から SHA256 のハッシュ値を取得 + */ + private static String getSha256(String target) { + MessageDigest md = null; + StringBuilder buf = new StringBuilder(); + try { + md = MessageDigest.getInstance("SHA-256"); + md.update(target.getBytes()); + byte[] digest = md.digest(); + + for (int i = 0; i < digest.length; i++) { + buf.append(String.format("%02x", digest[i])); + } + + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + + return buf.toString(); + } + + /*---------------------------------------------------------------------------------------------------------------*/ + /* 単体テスト*/ + + public static void main(String[] args) { + System.out.println(passowrdHash("p@ssw0rd", "ryoma.sakamoto@example.com")); + System.out.println(passowrdHash("test", "kondou@example.com")); + System.out.println(passowrdHash("testtest", "okita@example.com")); + System.out.println(passowrdHash("testtest", "admin")); + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/ChoiceDateElement.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/ChoiceDateElement.java new file mode 100644 index 0000000..e7eff0d --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/ChoiceDateElement.java @@ -0,0 +1,208 @@ +package jp.co.y_net.amm.common; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.markup.html.form.ChoiceRenderer; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.model.Model; + +/** + * 日付選択用ドロップダウンリストの要素、ユーティリティ + * @author k.inaba + */ +public class ChoiceDateElement implements Serializable { + private static final long serialVersionUID = 1L; + + private String id; + private String name; + + public ChoiceDateElement(String id, String name) { + this.id = id; + this.name = name; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + /** + * 日付選択用ドロップダウンリスト + */ + public static class DropDownChoiceDate extends DropDownChoice { + public DropDownChoiceDate(String id, Model model, List choice) { + super(id, model, choice, new MyRenderer()); + } + } + /** + * 日付選択用ドロップダウンリストに使用するレンダラ + */ + private static class MyRenderer extends ChoiceRenderer{ + public MyRenderer() { + super("name","id"); + } + } + + public static String 日付取得(Model y, Model m, Model d) { + return y.getObject().getId() + m.getObject().getId() + d.getObject().getId(); + } + + + /** + * 年の選択肢を作成する。 + * 原則として、現在の年を含む未来6年分の選択肢を作成するが、 + * 引数の fromdateValue、todateValue が含まれない場合は追加する。 + * @param fromdateValue + * @param todateValue + * @return + */ + public static List createChoiceY(String fromdateValue, String todateValue) { + + List choice = new ArrayList(); + choice.add(new ChoiceDateElement("0000", "未指定")); + + Integer iNowYYYY = Calendar.getInstance().get(Calendar.YEAR); + List list = new ArrayList(); + for (int i = 0; i < 6; i++) { // 現在から6年先までの選択肢を作成 + Integer yyyy = iNowYYYY + i; + list.add(yyyy); + } + + /* すでに登録されている値 */ + Integer iFromYYYY = Integer.parseInt(getYYYY(fromdateValue)); + Integer iToYYYY = Integer.parseInt(getYYYY(todateValue)); + if (iFromYYYY != 0 && list.contains(iFromYYYY) == false) { + list.add(iFromYYYY); + } + if (iToYYYY != 0 && list.contains(iToYYYY) == false) { + list.add(iToYYYY); + } + Collections.sort(list); + + for (Integer yyyy : list) { + choice.add(new ChoiceDateElement(String.valueOf(yyyy), yyyy + "年")); + } + + return choice; + } + /** + * 月の選択肢を作成する + * @return + */ + public static List createChoiceM() { + List choice = new ArrayList(); + choice.add(new ChoiceDateElement("00", "--")); + for (int i = 1; i <= 12; i++) { + String str = StringUtils.leftPad(String.valueOf(i), 2, '0'); + choice.add(new ChoiceDateElement(str, i + "月")); + } + return choice; + } + /** + * 日の選択肢を作成する + * @return + */ + public static List createChoiceD() { + List choice = new ArrayList(); + choice.add(new ChoiceDateElement("00", "--")); + for (int i = 1; i <= 31; i++) { + String str = StringUtils.leftPad(String.valueOf(i), 2, '0'); + choice.add(new ChoiceDateElement(str, i + "日")); + } + return choice; + } + + /** + * 年のモデルを作成する + * 引数 choiceY のうち、targetDate と一致するものを初期値とする。 + * targetDateは yyyyMMdd で記述されているものとし、このメソッドでは、yyyy部分を参照する。 + * @param choiceY + * @param targetDate + * @return + */ + public static Model createModelY(List choiceY, String targetDate) { + Model model = new Model(); + select(choiceY, getYYYY(targetDate), model); + return model; + } + /** + * 月のモデルを作成する + * 引数 choiceY のうち、targetDate と一致するものを初期値とする。 + * targetDateは yyyyMMdd で記述されているものとし、このメソッドでは、MM部分を参照する。 + * @param choiceY + * @param targetDate + * @return + */ + public static Model createModelM(List choice, String targetDate) { + Model model = new Model(); + select(choice, getMM(targetDate), model); + return model; + } + /** + * 月のモデルを作成する + * 引数 choiceY のうち、targetDate と一致するものを初期値とする。 + * targetDateは yyyyMMdd で記述されているものとし、このメソッドでは、dd部分を参照する。 + * @param choiceY + * @param targetDate + * @return + */ + public static Model createModelD(List choice, String targetDate) { + Model model = new Model(); + select(choice, getDD(targetDate), model); + return model; + } + + + private static void select(List choice, String target, Model model) { + for (ChoiceDateElement c : choice) { + if (c.getId().equals(target)==true) { + model.setObject(c); + } + } + } + + + + + private static String getYYYY(String yyyyMMdd) { + String str; + if(yyyyMMdd == null || yyyyMMdd.length() != 8) { + str = "0000"; + } else { + str = yyyyMMdd.substring(0, 4); + } + return str; + } + private static String getMM(String yyyyMMdd) { + String str; + if(yyyyMMdd == null || yyyyMMdd.length() != 8) { + str = "00"; + } else { + str = yyyyMMdd.substring(4, 6); + } + return str; + } + private static String getDD(String yyyyMMdd) { + String str; + if(yyyyMMdd == null || yyyyMMdd.length() != 8) { + str = "00"; + } else { + str = yyyyMMdd.substring(6, 8); + } + return str; + } +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/ChoiceElement.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/ChoiceElement.java new file mode 100644 index 0000000..6b1251f --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/ChoiceElement.java @@ -0,0 +1,58 @@ +package jp.co.y_net.amm.common; + +import java.io.Serializable; +import java.util.List; + +import org.apache.wicket.markup.html.form.ChoiceRenderer; +import org.apache.wicket.model.Model; + +/** + * ChoiceElement : ドロップダウンリストの要素 + * + * @version 1.0.0 + * @author y.soga + */ +public class ChoiceElement implements Serializable { + + private static final long serialVersionUID = 6210226619432905234L; + + private String id; + private String name; + + public ChoiceElement(String id,String name) { + this.id = id; + this.name = name; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + /** + * ドロップダウンリストに特定の値を選択させる + * @param settingModel 指定するドロップダウンリストのModel + * @param choices 選択リストコレクション + * @param target 選択させる値 + */ + public static void setDropDownList(Model settingModel,List choices ,String target) { + for (ChoiceElement che : choices) { + if (che.getId().equals(target)==true) { + settingModel.setObject(che); + } + } + } + + public static class Renderer extends ChoiceRenderer{ + public Renderer() { + super("name","id"); + } + } +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/CookieUtils.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/CookieUtils.java new file mode 100644 index 0000000..0ef0ad0 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/CookieUtils.java @@ -0,0 +1,5 @@ +package jp.co.y_net.amm.common; + +public class CookieUtils { + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/InfoRenderer.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/InfoRenderer.java new file mode 100644 index 0000000..02deb99 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/InfoRenderer.java @@ -0,0 +1,39 @@ +package jp.co.y_net.amm.common; + +import java.util.Date; + +import jp.co.y_net.amm.dao.Inf; + +public class InfoRenderer { +// public static String execute(String title, String body) { +// return execute(title, "XXXX/XX/XX", body); +// } + public static String execute(Inf inf) { + if(inf == null) { + return ""; + } + Date dPubdate = AppUtils.toDate(inf.getPubdate()); + String strPubdate; + if(dPubdate != null) { + strPubdate = Inf.DF_PUBDATE.format(dPubdate); + } else { + strPubdate = Inf.DF_PUBDATE.format(new Date()); + } + + return execute(inf.getTitle(), strPubdate, inf.getBody()); + } + private static String execute(String title, String pubdate, String body) { + + body = body.replaceAll("\n", "
"); + + StringBuilder sb = new StringBuilder(); + sb.append("

" + title + "

\n"); + sb.append(pubdate + "
\n"); +// sb.append("
\n"); + sb.append(body); + return sb.toString(); + } + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/ResourceReader.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/ResourceReader.java new file mode 100644 index 0000000..178e32c --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/ResourceReader.java @@ -0,0 +1,161 @@ +package jp.co.y_net.amm.common; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; + +public class ResourceReader { + + private static final String DEFAULT_PROP = "App"; + + public static Integer getIntegerQuick(String key) { + String str = getStringQuick(key); + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + return -1; + } + } + public static boolean getBooleanQuick(String key) { + String str = getStringQuick(key).toLowerCase(); + return str.equals("yes") + || str.equals("y") + || str.equals("true") + || str.equals("t") + || str.equals("1"); + } + + /** + * @see #getString(String, String) + * @param def 値が取得できなかった場合のデフォルト値 + */ + public static final String getStringQuick(String key, String def) { + String value = getStringQuick(key); + if(value == null) { + return def; + } else { + return value; + } + } + /** + * 値の変更でサーバーの再起動を必要としない、プロパティファイルの読み取り機能 + * ・読み取り対象は jp.co.y_net.amm.WicketApplication.properties.properties とする。 + * ・キャッシュの持続時間は 60 秒とする。 + * @param key + * @return + */ + public static final String getStringQuick(String key) { + String value = null; + try { + ResourceBundle bundle = ResourceBundle.getBundle(DEFAULT_PROP, RESOURCE_BUNDLE_CONTROL); + value = bundle.getString(key); + + } catch (Exception e) { + AppLogger.info(DEFAULT_PROP + ".properties から[" + key + "]が取得できませんでした。"); + } + return value; + } + private static final ResourceBundle.Control RESOURCE_BUNDLE_CONTROL = new ResourceBundle.Control() { + public long getTimeToLive(String baseName, Locale locale) { + return 60000L; + } + }; + + + /** + * プロパティファイルの全行をリストで取得 + * @param resourceName + * @return + */ + public static List getLines(String resourceName) { + Enumeration keys; + try { + ResourceBundle bundle = ResourceBundle.getBundle(resourceName, RESOURCE_BUNDLE_CONTROL); + keys = bundle.getKeys(); + + } catch (Exception e) { + AppLogger.info(DEFAULT_PROP + ".properties が参照できませんでした。"); + return new ArrayList(); + } + List lines = new ArrayList(); + while(keys.hasMoreElements()) { + lines.add(keys.nextElement()); + } + return lines; + } + +// /** +// * getString はアプリケーションが稼働しているスレッドからでないと使用できない。 +// * 単体テストやアプリケーションの配下でないところからプロパティファイルを参照する際に使用する。 +// * @param key +// * @return +// */ +// public static final String getStringWithoutApp(String key) { +// String value = null; +// try { +// ResourceBundle bundle = ResourceBundle.getBundle(DEFAULT_PROP); +// value = bundle.getString(key); +// } catch (Exception e) { +// AppLogger.info(DEFAULT_PROP + "から[" + key + "]が取得できませんでした。"); +// } +// return value; +// } + + + /** + * クラスパス上のリソースからテキストファイルとして読み込む + * @param name 相対パス指定は不可 + * @return + */ + public static String getText(String name) { + StringBuilder sb = new StringBuilder(); + InputStream is = null; + InputStreamReader isr = null; + try { + /* mainメソッドからの呼び出しを想定 */ + is = ClassLoader.getSystemResourceAsStream(name); + if(is==null) { + /* webアプリケーションからの呼び出しを想定 */ + is = ResourceReader.class.getResourceAsStream("/" + name); + } + if(is==null) { + AppLogger.info(name + "が取得できませんでした。"); + } + isr = new InputStreamReader(is, Charset.forName("UTF-8")); + int contents; + while ((contents = isr.read()) != -1) { + sb.append((char)contents); +// text += (char)contents; + } + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if (isr != null) isr.close(); + if (is != null) is.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + String text = sb.toString(); + return text; + } + + + /** + * @deprecated プロパティファイルの参照は ResourceReader へ移行しました。 + */ + public static class QuickeProperty extends ResourceReader { + + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/SessionUsageListener.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/SessionUsageListener.java new file mode 100644 index 0000000..2a7b154 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/SessionUsageListener.java @@ -0,0 +1,42 @@ +package jp.co.y_net.amm.common; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; + + +/** + * セッションの利用状況を検知するためのリスナー + * + * 前提: web.xml での宣言 + * @author k_inaba + * + */ +public class SessionUsageListener implements HttpSessionListener { + + /* + * 利用状況 + *  意図的にスレッドセーフでは無い + */ + public static Map map = new HashMap(); + + @Override + public void sessionCreated(HttpSessionEvent event) { + //System.out.println("sessionCreated:" + event.getSession()); + if(event != null && event.getSession() != null) { + map.put(event.getSession().getId(), new Date()); + } + } + + @Override + public void sessionDestroyed(HttpSessionEvent event) { + //System.out.println("sessionDestroyed" + event.getSession()); + if(event != null && event.getSession() != null) { + map.remove(event.getSession().getId()); + } + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/common/package-info.java b/AMM_web/src/main/java/jp/co/y_net/amm/common/package-info.java new file mode 100644 index 0000000..af772c3 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/common/package-info.java @@ -0,0 +1,5 @@ +/** + * 各所で実装する可能性があるものを集約するためのパッケージ + * 2015/04/22 k.inaba + */ +package jp.co.y_net.amm.common; \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/AbstractDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/AbstractDao.java new file mode 100644 index 0000000..60dad69 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/AbstractDao.java @@ -0,0 +1,128 @@ +package jp.co.y_net.amm.dao; + +import java.util.List; + +import jp.co.y_net.amm.common.AppUtils; + +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.hibernate.classic.Session; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import org.springframework.stereotype.Component; + +/** + * WebopacDao + * @version 1.0.0 + * @author k_ohara + */ +@Component("abstractDao") +abstract class AbstractDao extends HibernateDaoSupport { + + + + /** + * sessionFactoryのインジェクションを行う + * @param sessionFactory + */ + @Autowired(required = true) + @Qualifier("sessionFactory_Amm") // ← hibernateContextBase.xmlにて宣言されている + public void init(SessionFactory sessionFactory){ + super.setSessionFactory(sessionFactory); + } + /** + * 追加対象オブジェクト + * @param item 対象オブジェクト + * @param updateusrid 更新者ID + */ + protected void add(AppDto item, Integer updateusrid) { + if(item.getId() != null) { + throw new RuntimeException("追加対象のオブジェクトに主キーが設定されています。"); + } + + /* 共通項目の登録 */ + if(item != null) { + item.setUpdatedate(AppUtils.createNowLong()); // 更新日付を設定 + item.setUpdateusrid(updateusrid); // 更新者IDを設定 + item.setDeleted(AppDef.FLASE); // 削除フラグをFalse + } + + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.save(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + /** + * 更新処理 + * @param item 対象オブジェクト + * @param updateusrid 更新者ID + */ + protected void update(AppDto item, Integer updateusrid) { + if(item.getId() == null) { + throw new RuntimeException("追加対象のオブジェクトに主キーが設定されていません。"); + } + + /* 共通項目 「更新日付」の登録 */ + if(item != null) { + item.setUpdatedate(AppUtils.createNowLong()); // 更新日付を設定 + item.setUpdateusrid(updateusrid); // 更新者IDを設定 + } + + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + + hibernateTemplate.update(item); + hibernateTemplate.flush(); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + /** + * 論理削除処理 + * @param item 対象オブジェクト + * @param updateusrid 更新者ID + */ + protected void removeLogical(AppDto item, Integer updateusrid) { + item.setDeleted(AppDef.TRUE); + this.update(item, updateusrid); + } + /** + * 物理削除処理 + */ + protected void remove(AppDto item) { + throw new RuntimeException("本アプリケーションでは物理削除を行わない。"); + } + + /** + * 集合関数 MAX を使用して次に採番すべき値を取得する + * @param entityname + * @param colname + * @return + */ + public Integer getNextId(String entityname, String colname) { + return getNextId(entityname, colname, 1); + } + public Integer getNextId(String entityname, String colname, int init) { + Session session = getSessionFactory().openSession(); + Query query = session.createQuery("SELECT max(" + colname + ") from " + entityname + ""); + @SuppressWarnings("rawtypes") + List list = query.list(); + Integer currentId = 0; + Integer nextId; + if(list != null && list.isEmpty() == false && (Integer)list.get(0) != null) { + currentId = (Integer)list.get(0); + nextId = currentId + 1; + } else { + nextId = init; + } + session.close(); + return nextId; + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/AppDef.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/AppDef.java new file mode 100644 index 0000000..12559c0 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/AppDef.java @@ -0,0 +1,23 @@ +package jp.co.y_net.amm.dao; + +/** + * マジックナンバーなどのリテラルを集約する + * @author k_inaba + */ +public class AppDef { + + public static final Integer TRUE = 1; + public static final Integer FLASE = 0; + + /** + * ログインを必要としないページにおける登録処理で + * 更新者IDに設定する値 + */ + public static final Integer USERID_NONE = -1; + + /** 新規パスワード発行の登録有効期間(時間) */ + public static final int 新規パスワード発行の登録有効期間 = 24 * 7; + + /** パスワードリセット後のパスワード登録有効期間(時間) */ + public static final int パスワードリセット後のパスワード登録有効期間 = 24; +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/AppDto.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/AppDto.java new file mode 100644 index 0000000..e584625 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/AppDto.java @@ -0,0 +1,48 @@ +package jp.co.y_net.amm.dao; + +import java.io.Serializable; + +public class AppDto implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer id; + private Long updatedate; + private Integer updateusrid; + private Integer deleted; + + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public Integer getId() { + return id; + } + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public void setId(Integer id) { + this.id = id; + } + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public Long getUpdatedate() { + return updatedate; + } + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public void setUpdatedate(Long updatedate) { + this.updatedate = updatedate; + } + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public Integer getDeleted() { + return deleted; + } + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public void setDeleted(Integer deleted) { + this.deleted = deleted; + } + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public Integer getUpdateusrid() { + return updateusrid; + } + /** @deprecated 共通項目のアクセサです。AppDao(およびその子クラス)でのみ使用することを想定しています。*/ + public void setUpdateusrid(Integer updateusrid) { + this.updateusrid = updateusrid; + } + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/FreeDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/FreeDao.java new file mode 100644 index 0000000..f8ac453 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/FreeDao.java @@ -0,0 +1,24 @@ +package jp.co.y_net.amm.dao; +import org.hibernate.HibernateException; +import org.hibernate.Query; +import org.hibernate.Session; +import org.springframework.orm.hibernate3.HibernateCallback; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + + +@Component("freeDao") +public class FreeDao extends AbstractDao { + + public void copy(final String sql) { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.execute(new HibernateCallback() { + public Object doInHibernate(Session session) throws HibernateException { + Query query = session.createSQLQuery(sql); + Object result = query.list(); + return result; + } + }); + hibernateTemplate.clear(); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grp.hbm.xml b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grp.hbm.xml new file mode 100644 index 0000000..4ecc9a9 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grp.hbm.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grp.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grp.java new file mode 100644 index 0000000..b2b35a6 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grp.java @@ -0,0 +1,80 @@ +package jp.co.y_net.amm.dao; + +import java.io.Serializable; +import java.util.Comparator; + + +public class Grp extends AppDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /* DBMSと連携するメンバ */ + private Integer grpid; + private String name; + private Integer adminusrid; + private Long createdate; + + + /* アプリケーションで設定するメンバ */ + // なし + + /* 自動生成のアクセサ */ + public Integer getGrpid() { + return grpid; + } + public void setGrpid(Integer grpid) { + this.grpid = grpid; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public Integer getAdminusrid() { + return adminusrid; + } + public void setAdminusrid(Integer adminusrid) { + this.adminusrid = adminusrid; + } + public Long getCreatedate() { + return createdate; + } + public void setCreatedate(Long createdate) { + this.createdate = createdate; + } + /* 自動生成のアクセサ -end */ + + /* 型変換のアクセサ */ + /* 型変換のアクセサ - end */ + + + + /** + * 作成日時のソートに用いるComparator + */ + public static class CreatedateComparator implements Comparator { + /** trueに変更すると 申請日時の新しい順 */ + private boolean desc = false; + + public CreatedateComparator(boolean desc) { + this.desc = desc; + } + + @Override + public int compare(Grp o1, Grp o2) { + int reverse = 1; + if(desc) { + reverse = -1; + } + + Long n1 = 0L; + Long n2 = 0L; + if(o1 != null && o1.getCreatedate() != null) n1 = o1.getCreatedate(); + if(o2 != null && o2.getCreatedate() != null) n2 = o2.getCreatedate(); + + return Long.compare(n1, n2) * reverse; + } + } +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/GrpDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/GrpDao.java new file mode 100644 index 0000000..8bfe2a3 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/GrpDao.java @@ -0,0 +1,68 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + + +@Component("grpDao") +public class GrpDao extends AbstractDao { + + /* 参照形処理 ------------------------------------------------------------------------------------------------ */ + /** ユニークキーを使用した取得 */ + public Grp getByGrpid(Integer grpid) { + Grp cnd = new Grp(); + cnd.setGrpid(grpid); + List list = get(cnd); + if(list.size() == 1) { + return list.get(0); + } + return null; + } + /** 全件取得(論理削除除外) */ + public List get() { + Grp cnd = new Grp(); + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + return get(cnd); + } + /** 条件付き取得(論理削除除外) */ + public List get(Grp cnd) { + if(cnd != null) { + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + } + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Grp.class); + dc.add(Example.create(cnd)); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + } + + /* 更新系処理 ------------------------------------------------------------------------------------------------ */ + private static final String ENTITYNAME = "Grp"; + private static final String PKEYNAME = "grpid"; + /** + * 登録処理 + * ・必要なカラムを自動採番する + * ・共通処理を実施する。 + * @see AbstractDao#add(AppDto, Integer) + * @param item 追加対象オブジェクト + * @param updateusrid 更新者ID + */ + public void add(Grp item, Integer updateusrid) { + /* 自動採番 */ + item.setGrpid(getNextId(ENTITYNAME, PKEYNAME, 1000000001)); // グループIDとユーザIDの重複を避けるため、開始する値を変更する。 + /* Insert実施 */ + super.add(item, updateusrid); + } + + public void update(Grp item, Integer updateusrid) { + super.update(item, updateusrid); + } + public void removeLogical(Grp item, Integer updateusrid) { + super.removeLogical(item, updateusrid); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grpusr.hbm.xml b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grpusr.hbm.xml new file mode 100644 index 0000000..6d28282 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grpusr.hbm.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grpusr.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grpusr.java new file mode 100644 index 0000000..09dcb6f --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Grpusr.java @@ -0,0 +1,169 @@ +package jp.co.y_net.amm.dao; + +import java.io.Serializable; +import java.util.Comparator; + +import jp.co.y_net.amm.common.AppUtils; + + +public class Grpusr extends AppDto implements Serializable { + private static final long serialVersionUID = 1L; + + public static final Integer STATUS_未設定 = -1; + public static final Integer STATUS_招待中 = 0; + public static final Integer STATUS_参加中 = 1; + public static final Integer STATUS_脱退 = 2; + + public static final Integer STATUS_ADMIN_未設定 = -1; + public static final Integer STATUS_ADMIN_移管依頼中 = 0; + public static final Integer STATUS_ADMIN_移管完了 = 1; + + + /* DBMSと連携するメンバ */ + private Integer grpusrid; + private Integer grpid; + private Integer usrid; + + private Long invitationdate; + private Long joindate; + private Long leavedate; + private Long admindate; + + private Integer statusadmin; + private Integer status; + + + + /* アプリケーションで設定するメンバ */ + // なし + + /* 自動生成のアクセサ */ + public Integer getGrpusrid() { + return grpusrid; + } + public void setGrpusrid(Integer grpusrid) { + this.grpusrid = grpusrid; + } + public Integer getGrpid() { + return grpid; + } + public void setGrpid(Integer grpid) { + this.grpid = grpid; + } + public Integer getUsrid() { + return usrid; + } + public void setUsrid(Integer usrid) { + this.usrid = usrid; + } + public Long getInvitationdate() { + return invitationdate; + } + public void setInvitationdate(Long invitationdate) { + this.invitationdate = invitationdate; + } + public Long getJoindate() { + return joindate; + } + public void setJoindate(Long joindate) { + this.joindate = joindate; + } + public Long getLeavedate() { + return leavedate; + } + public void setLeavedate(Long leavedate) { + this.leavedate = leavedate; + } + public Long getAdmindate() { + return admindate; + } + public void setAdmindate(Long admindate) { + this.admindate = admindate; + } + public Integer getStatusadmin() { + return statusadmin; + } + public void setStatusadmin(Integer statusadmin) { + this.statusadmin = statusadmin; + } + public Integer getStatus() { + return status; + } + public void setStatus(Integer status) { + this.status = status; + } + /* 自動生成のアクセサ -end */ + + /* 型変換のアクセサ */ + + + /* 型変換のアクセサ - end */ + + + /** + * 参加日時のソートに用いるComparator + */ + public static class JoindateComparator implements Comparator { + /** trueに変更すると新しい順 */ + private boolean desc = false; + + public JoindateComparator(boolean desc) { + this.desc = desc; + } + + @Override + public int compare(Grpusr o1, Grpusr o2) { + int reverse = 1; + if(desc) { + reverse = -1; + } + + Long n1 = 0L; + Long n2 = 0L; + if(o1 != null && o1.getJoindate() != null) n1 = o1.getJoindate(); + if(o2 != null && o2.getJoindate() != null) n2 = o2.getJoindate(); + + /* 参加日が未設定の時は、招待日に置き換える */ + if(n1 == 0L) { + if(o1 != null && o1.getInvitationdate() != null) n1 = o1.getInvitationdate(); + } + if(n2 == 0L) { + if(o2 != null && o2.getInvitationdate() != null) n2 = o2.getInvitationdate(); + } + + return Long.compare(n1, n2) * reverse; + } + } + + /** + * statusadmin と status を合算した結果を表示文字列で返す。 + * + * 参加状態(status)=「招待中」 ⇒ 招待中 + * 参加状態(status)=「参加済み」 かつ 移管状態=未設定 ⇒ 参加中 + * 参加状態(status)=「参加済み」 かつ 移管状態=「移管依頼中」 ⇒ 移管依頼中 + * 参加状態(status)=「参加済み」 かつ 移管状態=「移管完了」 ⇒ 参加中 + */ + public String getStatus合算() { + if(this.status == null || STATUS_未設定.equals(this.status) ) { + return ""; + } + if(STATUS_招待中.equals(this.status)) { + return "招待中"; + } + if(STATUS_参加中.equals(this.status)) { + + if(STATUS_ADMIN_移管依頼中.equals(this.status)) { + return "移管依頼中"; + } + return "参加中"; + } + return ""; + } + public void set脱退設定() { + this.setLeavedate(AppUtils.createNowLong()); // 脱退日時 + this.setStatus(Grpusr.STATUS_脱退); + } + + +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/GrpusrDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/GrpusrDao.java new file mode 100644 index 0000000..ad07168 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/GrpusrDao.java @@ -0,0 +1,93 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + + +@Component("grpusrDao") +public class GrpusrDao extends AbstractDao { + + /* 参照形処理 ------------------------------------------------------------------------------------------------ */ + /** ユニークキーを使用した取得 */ + public Grpusr getByGrpusrid(Integer grpusrid) { + Grpusr cnd = new Grpusr(); + cnd.setGrpusrid(grpusrid); + List list = get(cnd); + if(list.size() == 1) { + return list.get(0); + } + return null; + } + /** 全件取得(論理削除除外) */ + public List get() { + Grpusr cnd = new Grpusr(); + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + return get(cnd); + } + /** 条件付き取得(論理削除除外) */ + public List get(Grpusr cnd) { + if(cnd != null) { + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + } + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Grpusr.class); + dc.add(Example.create(cnd)); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + } + + /* 更新系処理 ------------------------------------------------------------------------------------------------ */ + private static final String ENTITYNAME = "Grpusr"; + private static final String PKEYNAME = "grpusrid"; + /** + * 登録処理 + * ・必要なカラムを自動採番する + * ・共通処理を実施する。 + * @see AbstractDao#add(AppDto, Integer) + * @param item 追加対象オブジェクト + * @param updateusrid 更新者ID + */ + public void add(Grpusr item, Integer updateusrid) { + /* 自動採番 */ + item.setGrpusrid(getNextId(ENTITYNAME, PKEYNAME)); + /* Insert実施 */ + super.add(item, updateusrid); + } + public void update(Grpusr item, Integer updateusrid) { + super.update(item, updateusrid); + } + public void removeLogical(Grpusr item, Integer updateusrid) { + super.removeLogical(item, updateusrid); + } + + /* entity固有のユーティリティ ----------------------------------------------------------------------------------- */ + /** + * 所属メンバー数 + * @param grpid + * @return + */ + public String getMembercount参加中AsString(Integer grpid) { + return String.valueOf(getMembercount参加中(grpid)); + } + /** + * 所属メンバー数 + * @param grpid + * @return + */ + public Integer getMembercount参加中(Integer grpid) { + Grpusr cndGu = new Grpusr(); + cndGu.setGrpid(grpid); + cndGu.setStatus(Grpusr.STATUS_参加中); + List member = this.get(cndGu); + return member.size(); + } + + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Inf.hbm.xml b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Inf.hbm.xml new file mode 100644 index 0000000..11387c5 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Inf.hbm.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Inf.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Inf.java new file mode 100644 index 0000000..2eeae8c --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Inf.java @@ -0,0 +1,71 @@ +package jp.co.y_net.amm.dao; + +import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import jp.co.y_net.amm.common.AppUtils; + +import org.apache.commons.lang.StringUtils; + + +public class Inf extends AppDto implements Serializable { + private static final long serialVersionUID = 1L; + + public static final DateFormat DF_PUBDATE = new SimpleDateFormat("yyyy/MM/dd"); // 掲載日 フォーマット + public static final Integer DEFお知らせ本文の文字数 = 5000; + + /** 状態 */ + public static final Integer STATUS_掲載中 = 2; + public static final Integer STATUS_その他 = 1; + public static final Integer STATUS_掲載終了 = 9; + + private Integer infid; + private String title; + private String body; + private Long pubdate; + private Integer status; + + + public String getTitleFormat() { + return StringUtils.abbreviate(title, 50); // 50文字に省略 + } + public String getPubdate_Disp() { + Date d = AppUtils.toDate(this.pubdate); + return DF_PUBDATE.format(d); + } + + + public Integer getInfid() { + return infid; + } + public void setInfid(Integer infid) { + this.infid = infid; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getBody() { + return body; + } + public void setBody(String body) { + this.body = body; + } + public Long getPubdate() { + return pubdate; + } + public void setPubdate(Long pubdate) { + this.pubdate = pubdate; + } + public Integer getStatus() { + return status; + } + public void setStatus(Integer status) { + this.status = status; + } +} + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/InfDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/InfDao.java new file mode 100644 index 0000000..4d80ecc --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/InfDao.java @@ -0,0 +1,67 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + + +@Component("infDao") +public class InfDao extends AbstractDao { + + /* 参照形処理 ------------------------------------------------------------------------------------------------ */ + /** ユニークキーを使用した取得 */ + public Inf getByInfid(Integer infid) { + Inf cnd = new Inf(); + cnd.setInfid(infid); + List list = get(cnd); + if(list.size() == 1) { + return list.get(0); + } + return null; + } + /** 全件取得(論理削除除外) */ + public List get() { + Inf cnd = new Inf(); + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + return get(cnd); + } + /** 条件付き取得(論理削除除外) */ + public List get(Inf cnd) { + if(cnd != null) { + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + } + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Inf.class); + dc.add(Example.create(cnd)); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + } + + /* 更新系処理 ------------------------------------------------------------------------------------------------ */ + private static final String ENTITYNAME = "Inf"; + private static final String PKEYNAME = "infid"; + /** + * 登録処理 + * ・必要なカラムを自動採番する + * ・共通処理を実施する。 + * @param item + */ + public void add(Inf item, Integer updateusrid) { + /* 自動採番 */ + item.setInfid(getNextId(ENTITYNAME, PKEYNAME)); + /* Insert実施 */ + super.add(item, updateusrid); + } + public void update(Inf item, Integer updateusrid) { + super.update(item, updateusrid); + } + public void removeLogical(Inf item, Integer updateusrid) { + super.removeLogical(item, updateusrid); + } + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Localestring.hbm.xml.back b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Localestring.hbm.xml.back new file mode 100644 index 0000000..c51fbb8 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Localestring.hbm.xml.back @@ -0,0 +1,33 @@ + + + + + + + + localestring_id_seq + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Localestring.java.back b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Localestring.java.back new file mode 100644 index 0000000..e9d8296 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Localestring.java.back @@ -0,0 +1,187 @@ +package jp.co.y_net.amm.dao; + + +/** + * Localestring + * + * @version 1.0.0 + * @author k_ohara + */ +public class Localestring implements java.io.Serializable { + + /** + * 表示文字クラス + */ + private static final long serialVersionUID = 1L; + + /** ID */ + private Integer id; + /** screenid */ + private String screenid; + /** languageid */ + private Integer languageid; + /** controlid */ + private String controlid; + /** num */ + private String num; + /** printstring */ + private String printstring; + + /** + * コンストラクタ + * + */ + public Localestring() { + } + + /** + * コンストラクタ + * + */ + public Localestring(String screenid, Integer languageid, String controlid, + String num, String printstring) { + + this.screenid = screenid; + this.languageid = languageid; + this.controlid = controlid; + this.num = num; + this.printstring = printstring; + } + + /** + * コピーコンストラクタ + * + */ + public Localestring(Localestring item) { + this.id = item.id; + this.screenid = item.screenid; + this.languageid = item.languageid; + this.controlid = item.controlid; + this.num = item.num; + this.printstring = item.printstring; + } + + /** + * IDを取得 + * + * @return ID + */ + public Integer getId() { + return this.id; + } + + /** + * IDを設定 + * + * @param id ID + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * screenidを取得 + * @return screenid + */ + public String getScreenid() { + return screenid; + } + + /** + * screenidを設定 + * @param screenid screenid + */ + public void setScreenid(String screenid) { + this.screenid = screenid; + } + + /** + * languageidを取得 + * @return languageid + */ + public Integer getLanguageid() { + return languageid; + } + + /** + * languageidを設定 + * @param languageid languageid + */ + public void setLanguageid(Integer languageid) { + this.languageid = languageid; + } + + /** + * controlidを取得 + * @return controlid + */ + public String getControlid() { + return controlid; + } + + /** + * controlidを設定 + * @param controlid controlid + */ + public void setControlid(String controlid) { + this.controlid = controlid; + } + + /** + * numを取得 + * @return num + */ + public String getNum() { + return num; + } + + /** + * numを設定 + * @param num num + */ + public void setNum(String num) { + this.num = num; + } + + /** + * printstringを取得 + * @return printstring + */ + public String getPrintstring() { + return printstring; + } + + /** + * printstringを設定 + * @param printstring printstring + */ + public void setPrintstring(String printstring) { + this.printstring = printstring; + } + +} +/* +CREATE TABLE ammdb.localestring +( + id serial NOT NULL, -- ID + screenid character varying(64), -- 画面ID + languageid integer, -- 言語 0=日本語/1=英語 + controlid character varying(64), -- 項目ID + num character varying(20), -- 枝番 + printstring character varying(1024), -- 表示文字列 + CONSTRAINT localestring_pkey PRIMARY KEY (id ) +) +WITH ( + OIDS=FALSE +); +ALTER TABLE ammdb.localestring + OWNER TO libgdc; +COMMENT ON TABLE ammdb.localestring + IS '表示文字列'; +COMMENT ON COLUMN ammdb.localestring.id IS 'ID'; +COMMENT ON COLUMN ammdb.localestring.screenid IS '画面ID'; +COMMENT ON COLUMN ammdb.localestring.languageid IS '言語 0=日本語/1=英語'; +COMMENT ON COLUMN ammdb.localestring.controlid IS '項目ID'; +COMMENT ON COLUMN ammdb.localestring.num IS '枝番'; +COMMENT ON COLUMN ammdb.localestring.printstring IS '表示文字列'; +*/ diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/LocalestringDao.java.back b/AMM_web/src/main/java/jp/co/y_net/amm/dao/LocalestringDao.java.back new file mode 100644 index 0000000..ceb9c7e --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/LocalestringDao.java.back @@ -0,0 +1,41 @@ +package jp.co.y_net.amm.dao; + +import java.util.List; + +/** + * LocalestringDao + * + * @version 1.0.0 + */ +public interface LocalestringDao { + + /** + * Localestringを取得
+ * + * @param item Localestring + * @return List + */ + List get(Localestring item); + + /** + * Localestringを追加 + * + * @param item Localestring + */ + void add(Localestring item); + + /** + * Localestringを更新 + * + * @param item Localestring + */ + void update(Localestring item); + + /** + * Localestringを削除 + * + * @param item Localestring + */ + void remove(Localestring item); + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back b/AMM_web/src/main/java/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back new file mode 100644 index 0000000..93ee127 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back @@ -0,0 +1,61 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.hibernate.criterion.Order; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + +/** + * LocalestringDaoImpl + * + * @version 1.0.0 + */ +@Component("localestringDao") +public class LocalestringDaoImpl extends AbstractDao implements LocalestringDao { + + @Override + public List get(Localestring item) { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Localestring.class); + dc.add(Example.create(item)); + dc.addOrder(Order.asc("num")); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + + } + @Override + public void add(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.save(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override + public void update(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + + hibernateTemplate.update(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override + public void remove(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.delete(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Org.hbm.xml b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Org.hbm.xml new file mode 100644 index 0000000..0d05ac2 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Org.hbm.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Org.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Org.java new file mode 100644 index 0000000..9542cae --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Org.java @@ -0,0 +1,484 @@ +package jp.co.y_net.amm.dao; + +import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.ChoiceElement; +import jp.co.y_net.amm.common.ResourceReader; + +import org.apache.commons.lang.StringUtils; + + +public class Org extends AppDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** 申請日に使用するDateFormat */ + final DateFormat DF_YYYYMMDDHHMM = new SimpleDateFormat("yyyy/MM/dd HH:mm"); + + public static final int KIND_PERSONAL = 9; // 個人会員 + public static final String KIND_PERSONAL_STR = "9"; // 個人会員 + + public static final int KIND_運営管理 = 999; + + public static final int LIMITNUM_未指定 = -1; + + private Integer orgid; + private Integer kind; + private String name; + private String adminname; + private String adminnamekana; + private String postnum; + private String address; + private String telnum; + private String mail; + private Integer fromdate; + private Integer todate; + private Integer limitnum; + private Long entrydate; + private Long approvaldate; + private Long rejectdate; + private String note; + private Long joindate; + private Integer status; + + /** 状態 */ + public static final int STATUS_未処理 = 0; + public static final int STATUS_承認済み = 1; + public static final int STATUS_拒否済み = 2; + public static final int STATUS_本登録済み = 3; + + public static Map getStatusMap() { + Map map = new TreeMap(); + map.put("0", "未処理"); + map.put("1", "承認済み"); + map.put("2", "拒否済み"); + map.put("3", "本登録済み"); + return map; + } + + /** + * @return 状態の名称 + */ + public String getStatus_Disp() { + if(status == null) { + return null; + } + switch (status) { + case STATUS_未処理: + return "未処理"; + case STATUS_承認済み: + return "承認済み"; + case STATUS_拒否済み: + return "拒否済み"; + case STATUS_本登録済み: + return "本登録済み"; + default: + return String.valueOf(status); + } + } + + /** @return 機関会員の種類の名称 */ + public String getKind_Disp() { + String key = getKind().toString(); + return getOrgkindMap().get(key); + } + /** + * @return 個人会員であれば true + */ + public boolean isPersonalOrg() { + if(this.kind != null && this.kind == KIND_PERSONAL) { + return true; + } else { + return false; + } + } + + /** + * @return 郵便番号のハイフン付き表記 + */ + public String getPostnum_Disp() { + String tmp = getPostnum(); + if(tmp != null && tmp.length() > 4) { + StringBuilder sb = new StringBuilder(tmp); + sb.insert(3, "-"); + tmp = sb.toString(); + } + return tmp; + } + + /** + * @return 機関・団体であればその名称。個人会員であれば代表者名。 + */ + public String getNameOrAdminname() { + String name; + if(this.isPersonalOrg()) { + name = this.getAdminname(); + } else { + name = this.getName(); + } +// if(StringUtils.isEmpty(this.getName()) == false) { +// name = this.getName(); +// } else if(StringUtils.isEmpty(this.getAdminname()) == false) { +// name = this.getAdminname(); +// } else { +// name = ""; +// } + + + String str = StringUtils.abbreviate(name, 100); + return str; + } + + + +// public static void main(String[] args) { +//// Map map = getKindMap(); +//// for(Entry e: map.entrySet()) { +//// System.out.println(e.getKey() + "=" + e.getValue()); +//// } +//// System.out.println(ResourceReader.getText("message/termsofuse")); +// Org org = new Org(); +// org.setPostnum("123"); +// System.out.println(org.getPostnum_Disp()); +// org.setPostnum("1234"); +// System.out.println(org.getPostnum_Disp()); +// org.setPostnum("12345"); +// System.out.println(org.getPostnum_Disp()); +// org.setPostnum("123456"); +// System.out.println(org.getPostnum_Disp()); +// org.setPostnum("1234567"); +// System.out.println(org.getPostnum_Disp()); +// org.setPostnum(null); +// System.out.println(org.getPostnum_Disp()); +// } + + public static TreeMap getOrgkindMap() { + String orgkinds = ResourceReader.getStringQuick("orgkinds"); + String[] orgkindArray = orgkinds.split(","); + TreeMap map = new TreeMap(); + for(String kind: orgkindArray) { + kind = kind.trim(); + String key; + String value; + int index = kind.indexOf("."); + if(index != -1) { + key = kind.split("\\.")[0]; + value = kind.split("\\.")[1]; + } else { + key = kind; + value = ""; + } + map.put(key, value); + } + return map; + } + + /** + * @return 申請日時(書式:yyyy/MM/dd HH:mm) + */ + public String getEntrydate_Disp() { + String entrydate; + try { + Date d = AppUtils.toDate(this.getEntrydate()); + if(d != null) { + entrydate = DF_YYYYMMDDHHMM.format(d); + } else { + entrydate = ""; + } + } catch (Exception e) { + AppLogger.error(e); + if (this.getEntrydate() != null) { + entrydate = String.valueOf(this.getEntrydate()); + } else { + entrydate = ""; + }; + } + return entrydate; + } + + /** + * 申請日付のソートに用いるComparator + */ + public static class EntryDateComparator implements Comparator{ + /** trueに変更すると 申請日時の新しい順 */ + private boolean desc = false; + + public EntryDateComparator(boolean desc) { + this.desc = desc; + } + + @Override + public int compare(Org o1, Org o2) { + int reverse = 1; + //if(sortModel.getObject().getId().equals("1")) { + if(desc) { + reverse = -1; + } + + Long n1 = 0L; + Long n2 = 0L; + if(o1 != null && o1.getEntrydate() != null) n1 = o1.getEntrydate(); + if(o2 != null && o2.getEntrydate() != null) n2 = o2.getEntrydate(); + + return Long.compare(n1, n2) * reverse; + } + } + + /** 登録可能会員数の選択肢 */ + public static List createLimitChices(String limitnumValue) { + List limitnumList = new ArrayList(); + limitnumList.add(LIMITNUM_未指定); // 未指定 + /* 設定ファイルより選択肢を取得 */ + String str = ResourceReader.getStringQuick("limitnums"); + String[] array = str.split(","); + for (int i = 0; i < array.length; i++) { + int num; + try { + num = Integer.parseInt(array[i].trim()); + limitnumList.add(num); + } catch (NumberFormatException e) { + AppLogger.info("設定値 limitnums に数値に変換できない値があります。", e); + } + } + String existValue = String.valueOf(limitnumValue); + if(StringUtils.isEmpty(existValue) == false) { + int iExistValue; + try { + iExistValue = Integer.parseInt(existValue); + if(limitnumList.contains(iExistValue) == false) { + limitnumList.add(iExistValue); // 現在の値が選択肢になければ追加する + } + } catch (NumberFormatException e1) { + // 処理なし + } + } + Collections.sort(limitnumList); + List choiceLimitnum = new ArrayList(); + for (Integer num: limitnumList) { + String label; + if(num == LIMITNUM_未指定) { + label = "指定なし"; + } else { + label = num + "人"; + } + choiceLimitnum.add(new ChoiceElement(String.valueOf(num), label)); + } + return choiceLimitnum; + } + + public boolean is利用可能期間内() { + return betweenNow(this.fromdate, this.todate); + } + + private static boolean betweenNow(Integer from, Integer to) { + if(from == null || from == -1) from = Integer.MIN_VALUE; + if(to == null || to == -1) to = Integer.MAX_VALUE; + Integer now = AppUtils.createNowShort(); + return from <= now && now <= to; + } +// public static void main(String[] args) { +// System.out.println(betweenNow(-1, -1)); +// System.out.println(betweenNow(null, null)); +// System.out.println(betweenNow(20150803, 20150831)); +// System.out.println(betweenNow(20150804, 20150831)); +// System.out.println(betweenNow(20150801, 20150802)); +// System.out.println(betweenNow(20150801, 20150803)); +// } + + /** + * @return 利用期間(表示用) + */ + public String getFromTodate_Disp() { + String fromdate = AppUtils.toStrYyyyMMdd(this.getFromdate()); + if(is利用期間未指定(this.getFromdate())) { + fromdate = ""; + } + String todate = AppUtils.toStrYyyyMMdd(this.getTodate()); + if(is利用期間未指定(this.getTodate())) { + todate = ""; + } + String fromtodateStr; + if(StringUtils.isEmpty(fromdate) && StringUtils.isEmpty(todate)) { + fromtodateStr = ""; + } else if (StringUtils.isEmpty(fromdate) == false && StringUtils.isEmpty(todate) == true) { + fromtodateStr = fromdate + "~"; + } else if (StringUtils.isEmpty(fromdate) == true && StringUtils.isEmpty(todate) == false) { + fromtodateStr = "~" + todate; + } else { + fromtodateStr = fromdate + "~" + todate; + } + if("~".equals(fromtodateStr)) { + return ""; + } + return fromtodateStr; + } + + private boolean is利用期間未指定(Integer fromOrTo) { + if(fromOrTo == null) { + return true; + } + if(LIMITNUM_未指定 == fromOrTo) { + return true; + } + return false; + } + public boolean isLimitnum指定なし() { + return limitnum == null || LIMITNUM_未指定 == limitnum; + } + + public static void main(String[] args) { + Org org = new Org(); + System.out.println(org.getFromTodate_Disp()); + org.setFromdate(-1); + System.out.println(org.getFromTodate_Disp()); + org.setTodate(-1); + System.out.println(org.getFromTodate_Disp()); + org.setFromdate(20150101); + System.out.println(org.getFromTodate_Disp()); + org.setTodate(20151212); + System.out.println(org.getFromTodate_Disp()); + + } + + /* -- 以下、自動生成 --*/ + +// public Integer getId() { +// return id; +// } +// public void setId(Integer id) { +// this.id = id; +// } +// public Integer getUpdatedate() { +// return updatedate; +// } +// public void setUpdatedate(Integer updatedate) { +// this.updatedate = updatedate; +// } +// public Integer getDeleted() { +// return deleted; +// } +// public void setDeleted(Integer deleted) { +// this.deleted = deleted; +// } + public Integer getOrgid() { + return orgid; + } + public void setOrgid(Integer orgid) { + this.orgid = orgid; + } + public Integer getKind() { + return kind; + } + public void setKind(Integer kind) { + this.kind = kind; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getAdminname() { + return adminname; + } + public void setAdminname(String adminname) { + this.adminname = adminname; + } + public String getAdminnamekana() { + return adminnamekana; + } + public void setAdminnamekana(String adminnamekana) { + this.adminnamekana = adminnamekana; + } + public String getPostnum() { + return postnum; + } + public void setPostnum(String postnum) { + this.postnum = postnum; + } + public String getAddress() { + return address; + } + public void setAddress(String address) { + this.address = address; + } + public String getTelnum() { + return telnum; + } + public void setTelnum(String telnum) { + this.telnum = telnum; + } + public String getMail() { + return mail; + } + public void setMail(String mail) { + this.mail = mail; + } + public Integer getFromdate() { + return fromdate; + } + public void setFromdate(Integer fromdate) { + this.fromdate = fromdate; + } + public Integer getTodate() { + return todate; + } + public void setTodate(Integer todate) { + this.todate = todate; + } + + public Long getEntrydate() { + return entrydate; + } + public void setEntrydate(Long entrydate) { + this.entrydate = entrydate; + } + public Long getApprovaldate() { + return approvaldate; + } + public void setApprovaldate(Long approvaldate) { + this.approvaldate = approvaldate; + } + public Long getRejectdate() { + return rejectdate; + } + public void setRejectdate(Long rejectdate) { + this.rejectdate = rejectdate; + } + public String getNote() { + return note; + } + public void setNote(String note) { + this.note = note; + } + public Long getJoindate() { + return joindate; + } + public void setJoindate(Long joindate) { + this.joindate = joindate; + } + public Integer getLimitnum() { + return limitnum; + } + public void setLimitnum(Integer limitnum) { + this.limitnum = limitnum; + } + public Integer getStatus() { + return status; + } + public void setStatus(Integer status) { + this.status = status; + } + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/OrgDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/OrgDao.java new file mode 100644 index 0000000..df6c4fe --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/OrgDao.java @@ -0,0 +1,77 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + + +@Component("orgDao") +public class OrgDao extends AbstractDao { + + /* 参照形処理 ------------------------------------------------------------------------------------------------ */ + /** ユニークキーを使用した取得 */ + public Org getByOrgid(Integer orgid) { + return getByOrgid(orgid, false); + } + + public Org getByOrgid(Integer orgid, boolean withDeleted) { + Org cnd = new Org(); + cnd.setOrgid(orgid); + List orgs = get(cnd, withDeleted); + if(orgs.size() == 1) { + return orgs.get(0); + } + return null; + } + + /** 全件取得(論理削除除外) */ + public List get() { + Org cnd = new Org(); + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + return get(cnd); + } + /** 条件付き取得(論理削除除外) */ + public List get(Org cnd) { + return get(cnd, false); + } + public List get(Org cnd, boolean withDeleted) { + if (withDeleted == false) { + if(cnd != null) { + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + } + } + + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Org.class); + dc.add(Example.create(cnd)); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + } + /* 更新系処理 ------------------------------------------------------------------------------------------------ */ + private static final String ENTITYNAME = "Org"; + private static final String PKEYNAME = "orgid"; + /** + * 登録処理 + * ・必要なカラムを自動採番する + * ・共通処理を実施する。 + * @param item + */ + public void add(Org item, Integer updateusrid) { + /* 自動採番 */ + item.setOrgid(getNextId(ENTITYNAME, PKEYNAME)); + /* Insert実施 */ + super.add(item, updateusrid); + } + public void update(Org item, Integer updateusrid) { + super.update(item, updateusrid); + } + public void removeLogical(Org item, Integer updateusrid) { + super.removeLogical(item, updateusrid); + } + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Pwtckt.hbm.xml b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Pwtckt.hbm.xml new file mode 100644 index 0000000..7d83892 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Pwtckt.hbm.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Pwtckt.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Pwtckt.java new file mode 100644 index 0000000..a58116b --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Pwtckt.java @@ -0,0 +1,73 @@ +package jp.co.y_net.amm.dao; + +import java.io.Serializable; + + +public class Pwtckt extends AppDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** 状態 */ + public static final Integer STATUS_受付中 = 0; + public static final Integer STATUS_完了 = 1; + public static final Integer STATUS_中止 = 2; + public static final Integer STATUS_有効期限切れ = 3; + + private Integer pwtcktid; + private Integer usrid; + private String ticket; + private Long createdate; + private Long ticketdate; + private Long completedate; + private Long canceldate; + private Integer status; + + + public Integer getPwtcktid() { + return pwtcktid; + } + public void setPwtcktid(Integer pwtcktid) { + this.pwtcktid = pwtcktid; + } + public Integer getUsrid() { + return usrid; + } + public void setUsrid(Integer usrid) { + this.usrid = usrid; + } + public String getTicket() { + return ticket; + } + public void setTicket(String ticket) { + this.ticket = ticket; + } + public Long getCreatedate() { + return createdate; + } + public void setCreatedate(Long createdate) { + this.createdate = createdate; + } + public Long getTicketdate() { + return ticketdate; + } + public void setTicketdate(Long ticketdate) { + this.ticketdate = ticketdate; + } + public Long getCompletedate() { + return completedate; + } + public void setCompletedate(Long completedate) { + this.completedate = completedate; + } + public Long getCanceldate() { + return canceldate; + } + public void setCanceldate(Long canceldate) { + this.canceldate = canceldate; + } + public Integer getStatus() { + return status; + } + public void setStatus(Integer status) { + this.status = status; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/PwtcktDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/PwtcktDao.java new file mode 100644 index 0000000..911b2b0 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/PwtcktDao.java @@ -0,0 +1,53 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + + +@Component("pwtcktDao") +public class PwtcktDao extends AbstractDao { + + /* 参照形処理 ------------------------------------------------------------------------------------------------ */ + /** ユニークキーを使用した取得 */ + public List get(Pwtckt cnd) { + if(cnd != null) { + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + } + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Pwtckt.class); + dc.add(Example.create(cnd)); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + } + /** TODO 全件取得(論理削除除外) 必要になったら実装 */ + + /** TODO 条件付き取得(論理削除除外) 必要になったら実装*/ + + /* 更新系処理 ------------------------------------------------------------------------------------------------ */ + private static final String ENTITYNAME = "Pwtckt"; + private static final String PKEYNAME = "pwtcktid"; + /** + * 登録処理 + * ・必要なカラムを自動採番する + * ・共通処理を実施する。 + * @param item + */ + public void add(Pwtckt item, Integer updateusrid) { + /* 自動採番 */ + item.setPwtcktid(getNextId(ENTITYNAME, PKEYNAME)); + /* Insert実施 */ + super.add(item, updateusrid); + } + public void update(Pwtckt item, Integer updateusrid) { + super.update(item, updateusrid); + } + public void removeLogical(Pwtckt item, Integer updateusrid) { + super.removeLogical(item, updateusrid); + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/TextDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/TextDao.java new file mode 100644 index 0000000..ee4fc22 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/TextDao.java @@ -0,0 +1,491 @@ +package jp.co.y_net.amm.dao; + + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.lang.reflect.Field; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.servlet.ServletContext; + +import org.apache.wicket.protocol.http.WebApplication; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** +* テキストファイルをストレージとするData Access Object +* +* オブジェクトはJSON形式に変換する。 +* +* 必須ライブラリは、親プロジェクトの pom.xml に記述 +* + + + com.fasterxml.jackson.core + jackson-core + 2.5.0 + + + com.fasterxml.jackson.core + jackson-databind + 2.5.0 + + + com.fasterxml.jackson.core + jackson-annotations + 2.5.0 + +* +* @author k.inaba +*/ +public class TextDao { + + /* + * -------------------------------------------------------------------------- + * サンプル実装 + */ + + /** + * 実装のサンプル このDAOの使用方法を示す。 + * @param args パラメータ不要 + */ + public static void main(String[] args) { + + /* + * DAOをインスタンス化する。 + * このとき保存先を指定する。 + */ + TextDao dao = new TextDao("C:\\tmp\\textdb"); + + /* 登録のサンプル */ + + TextDBAccSampleDto insertdto1 = new TextDBAccSampleDto(10, "aiueo"); + int insertId1 = dao.insert(insertdto1); + System.out.println(insertdto1.toString() + "を[" + insertId1 + "]として保存しました。"); + + TextDBAccSampleDto insertdto2 = new TextDBAccSampleDto(10, "あいうえお"); + int insertId2 = dao.insert(insertdto2); + System.out.println(insertdto2.toString() + "を[" + insertId2 + "]として保存しました。"); + + /* 検索のサンプル*/ + + TextDBAccSampleDto condA = new TextDBAccSampleDto(); + condA.col1 = 10; + List resultsA = dao.select(condA, TextDBAccSampleDto.class); + + System.out.println(condA.toString() + " を条件として検索を実行。"); + for (TextDBAccSampleDto dto: resultsA) { + System.out.println(">" + dto.toString()); + } + + TextDBAccSampleDto condB = new TextDBAccSampleDto(); + condB.col1 = 10; + condB.col2 = "あいうえお"; + List resultsB = dao.select(condB, TextDBAccSampleDto.class); + + System.out.println(condB.toString() + " を条件として検索を実行。"); + for (TextDBAccSampleDto dto: resultsB) { + System.out.println(">" + dto.toString()); + } + + /* 削除のサンプル */ + + List resultsAll = dao.select(TextDBAccSampleDto.class); + Collections.reverse(resultsAll); + int i = 0; + for (TextDBAccSampleDto dto : resultsAll) { + System.out.println(dto.toString()); + if (i > 5) { + System.out.println(dto.id + " を削除します。"); + // dao.delete(r, false); 論理削除ではなく、実際にファイルを削除する。 + dao.delete(dto); + } + i++; + } + } + + /** + * 実装のサンプル このDAOで扱うDTOを実装する際の参考とする。 + */ + private static class TextDBAccSampleDto { + /** + * 制御用のフィールド[id] + * + */ + public int id; + /* 保存するフィールド */ + public int col1; + public String col2; + + /** + * JSONからオブジェクトへ変換するために、 引数付きのコンストラクタが実装されている場合は、 デフォルトコンストラクタの実装が必要である。 + */ + public TextDBAccSampleDto() { + // 処理なし + } + + public TextDBAccSampleDto(int col1, String col2) { + this.col1 = col1; + this.col2 = col2; + } + + @Override + public String toString() { + return "TextDBAccSampleBean [id=" + id + ", col1=" + col1 + + ", col2=" + col2 + "]"; + } + } + + /* -------------------------------------------------------------------------- */ + + private File dbroot; + /** + * @param root データを保存するディレクトリ + */ + public TextDao(String dbname) { + dbroot = new File(getDbPath(dbname)); + if (dbroot.exists() == false) { + dbroot.mkdirs(); + } + } + /** + * Tomcatインスタンスのコンテキストルートより2階層上位のディレクトリを + * テキストデータを保存するディレクトリのパスとして取得する。 + * + * Linuxでの実行環境では + *  /var/local/opt/tomcat/apache-tomcat/7.0/{???}-web/{dbname}/ + * + * 開発環境(ローカルのEclipse)では + *  {ワークスペース}\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\{dbname} + * + * @return テキストデータを保存するディレクトリのパス + */ + private static String getDbPath(String dbname) { + ServletContext servletContext = WebApplication.get().getServletContext(); + File tomCatInstance = new File(servletContext.getRealPath("")).getParentFile().getParentFile(); // コンテキストルートより2階層上位 + File file = new File(new File(tomCatInstance, dbname), dbname + ".txt"); + if (file.exists() == false) { + file.getParentFile().mkdirs(); + try { + boolean result = file.createNewFile(); + if (result == false) { + throw new RuntimeException("ファイルの作成に失敗:" + file.getAbsolutePath()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return file.getParent(); + } + + /** + * 保存する + * @param bean 保存するデータ + * @return id 保存したときに付与されたid + */ + public int insert(Object bean) { + String tablename = bean.getClass().getName(); + int maxId = -1; + File[] existfiles = getDbFiles(tablename); + for (File existfile : existfiles) { + int id = toId(existfile.getName(), tablename); + maxId = Math.max(maxId, id); + } + int insertId = maxId + 1; + ObjectMapper objectMapper = new ObjectMapper(); + try { + String json = objectMapper.writeValueAsString(bean); + File f = toFile(bean.getClass(), (insertId)); + writeText(f.getAbsolutePath(), json); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return insertId; + } + + /** + * 指定されたクラスのデータをすべて取得する。 + * @param clz 指定クラス + * @return 取得したデータ + */ + public List select(Class clz) { + return select(null, clz) ; + } + + /** + * 指定されたクラスのデータのうち、引数 cond の条件に合うものを取得する。 + * + * ・cond のフィールドのうち、 nullでないフィールドが検索条件となる。 + * ・AND条件となる。 + * ・フィールド id は無視する。 + * + * @param clz 指定クラス + * @return 取得したデータ + */ + public List select(T cond, Class clz) { + List cndFields = new ArrayList(); + for (Field f : clz.getFields()) { + if (f.getName().equals("id") == false) { + cndFields.add(f); + } + } + String tablename = clz.getName(); + File[] existfiles = getDbFiles(tablename); + List result = new ArrayList(); + for (File file : existfiles) { + // String text = "{\"a\":123,\"b\":true,\"c\":\"あいう\"}"; + String text = readTextAsString(file.getAbsolutePath()); + ObjectMapper mapper = new ObjectMapper(); + T bean; + try { + // JsonNode root = mapper.readTree(text); + // String c = root.get("c").asText(); + bean = mapper.readValue(text, clz); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + + /* 絞り込みのための判定 */ + boolean isMatch; + if (cond == null) { + /* 条件なしのため必ず選択(true) */ + isMatch = true; + } else { + isMatch = true; + for (Field cndField : cndFields) { + Object cndValue; + Object targetValue; + try { + cndValue = cndField.get(cond); + targetValue = cndField.get(bean); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (cndValue != null + && cndValue.equals(targetValue) == false) { + /* 不一致の条件を検出 */ + isMatch = false; + break; + } + } + } + if (isMatch) { + /* beanにidを付与する */ + /* ファイル名からidを取得する */ + try { + Field f = clz.getField("id"); + f.set(bean, toId(file.getName(), tablename)); + } catch (NoSuchFieldException e) { + /* フィールド[id]がなければ無視する。エラーとしない。 */ + } catch (Exception e) { + throw new RuntimeException(e); + } + result.add(bean); + } + } + return result; + } + + /** + * 指定されたBeanのidと一致するデータを論理削除する。 + * 論理削除の場合は、該当のデータの拡張子に[.del]が付与され、無効化される。 + * @param bean + */ + public void delete(Object bean) { + delete(bean, true); // デフォルトは論理削除 + } + /** + * 指定されたBeanのidと一致するデータを削除する。 + * 論理削除の場合は、該当のデータの拡張子に[.del]が付与され、無効化される。 + * @param bean + * @param logical 論理削除とする場合はTrue, 物理削除はFalseを指定する。 + */ + private void delete(Object bean, boolean logical) { + int id; + try { + Field f = bean.getClass().getField("id"); + id = f.getInt(bean); + } catch (NoSuchFieldException e) { + throw new RuntimeException("フィールド[id]がないbeanは削除できません。", e); + } catch (Exception e) { + throw new RuntimeException(e); + } + File file = toFile(bean.getClass(), id); + if (logical) { + /* 論理削除 (ファイル名の末尾に[.del]を付与する) */ + File dest = getDelFile(file); + file.renameTo(dest); + } else { + file.delete(); + } + } + + /** + * 引数srcのファイルオブジェクトのファイル名の末尾に [.del]を付与したオブジェクトを取得する。 + * すでに同名のファイルが存在するときは、[.del.del]となるように 再起処理を行う。 + * + * @param src + * @return + */ + private File getDelFile(File src) { + File delFile = new File(src.getAbsolutePath() + ".del"); + if (delFile.exists()) { + return getDelFile(delFile); + } + return delFile; + } + + private File toFile(Class clz, int id) { + String tablename = clz.getName(); + String filename = dbroot.getAbsolutePath() + File.separatorChar + + tablename + "_" + id + ".txt"; + return new File(filename); + } + + private int toId(String filename, String tablename) { + // Matcher m = Pattern.compile("_([0-9]+)\\.txt").matcher(tmp); + // tmp = m.group(1); + String tmp = filename; + tmp = tmp.substring(tablename.length()); // 接頭のテーブル名を除去 + tmp = tmp.substring(1); // _を除去 + tmp = tmp.substring(0, tmp.lastIndexOf(".txt")); + int id; + try { + id = Integer.parseInt(tmp); + } catch (NumberFormatException e) { + throw new RuntimeException(e); + } + return id; + } + + private File[] getDbFiles(final String tablename) { + File[] existfiles = dbroot.listFiles(new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().startsWith(tablename + "_") && f.getName() + .endsWith(".txt")); + } + }); + return existfiles; + } + /*------------------------------------------------------------------------------*/ + private static final String DEFAULT_ENC = "UTF-8"; + public static final String FILE_SEPARATOR = File.separator; + public static final String LINE_SEPARATOR = System.getProperty("line.separator"); + /** + * テキストファイルを書き出す + * @param filepath + * @param charsetName 例:"UTF-8" + * @param text + */ + public static void writeText(String filepath, String charsetName, List text) { + File f = new File(filepath); + OutputStream os = null; + Writer w = null; + BufferedWriter bw = null; + try { + os = new FileOutputStream(f); + w = new OutputStreamWriter(os, charsetName); + bw = new BufferedWriter(w); + for (String line: text) { + bw.write(line); + bw.newLine(); + //bw.flush(); + } + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + try { + if (bw != null) bw.close(); + if (w != null) w.close(); + if (os != null) os.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + public static void writeText(String filepath, String charsetName, String text) { + String[] array = text.split(LINE_SEPARATOR); + List list = Arrays.asList(array); + writeText(filepath, charsetName, list); + } + public static void writeText(String filepath, List string) { + writeText(filepath, DEFAULT_ENC, string); + } + public static void writeText(String filepath, String string) { + writeText(filepath, DEFAULT_ENC, string); + } + public static String readTextAsString(String filepath, String charsetName) { + StringBuilder sb = new StringBuilder(); + List lines = readText(filepath, charsetName); + for (String line: lines) { + sb.append(line).append(LINE_SEPARATOR); + } + return sb.toString(); + } + /** + * テキストファイルを読み込む + * @param filepath + * @return + */ + public static String readTextAsString(String filepath) { + return readTextAsString(filepath, DEFAULT_ENC); + } + /** + * テキストファイルを読み込む + * @param filepath + * @param charsetName 例:"UTF-8" + * @return List + */ + public static List readText(String filepath, String charsetName) { + if( new File(filepath).exists() == false ) { + throw new RuntimeException("ファイルが見つかりません。 [" + new File(filepath).getAbsolutePath() + "]"); + } + List result = new ArrayList(); + FileInputStream is = null; + InputStreamReader r = null; + BufferedReader br = null; + try { + is = new FileInputStream(filepath); + r = new InputStreamReader(is, Charset.forName(charsetName)); + br = new BufferedReader(r); +// int ch; +// while ((ch = in.read()) != -1) { + String line; + while((line = br.readLine()) != null) { + result.add(line); + + //System.out.print(str + NEW_LINE_CODE); + /* Unicode表現でデバッグ表示 */ + //System.out.print(Integer.toHexString(ch) + " "); + } + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if (br != null) br.close(); + if (r != null) r.close(); + if (is != null) is.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return result; + } +} \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Usr.hbm.xml b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Usr.hbm.xml new file mode 100644 index 0000000..b71d8d1 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Usr.hbm.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/Usr.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Usr.java new file mode 100644 index 0000000..e7a2bb5 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/Usr.java @@ -0,0 +1,332 @@ +package jp.co.y_net.amm.dao; + +import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Comparator; +import java.util.Date; + +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.CalcHash; + +import org.apache.commons.lang.StringUtils; + + +public class Usr extends AppDto implements Serializable { + private static final long serialVersionUID = 1L; + + + + private Integer usrid; + private String loginid; + private String name; + private Integer kind; + private Integer orgid; + private Integer orgrole; + private Integer stoplogin; + private Integer fromdate; + private Integer todate; + private String pwhash; + private String cres; + private Long cresdate; + private Long joindate; + private Long lastlogintrydate; + private Integer loginerrorcount; + private Long lastlogindate; + private Long modpwdate; + private Long leavedate; + private Integer status; + private Long requestlogoutdate; + + /* 自動生成のアクセサ - start */ + public Integer getUsrid() { + return usrid; + } + public void setUsrid(Integer usrid) { + this.usrid = usrid; + } + public String getLoginid() { + return loginid; + } + public void setLoginid(String loginid) { + this.loginid = loginid; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public Integer getKind() { + return kind; + } + public void setKind(Integer kind) { + this.kind = kind; + } + public Integer getOrgid() { + return orgid; + } + public void setOrgid(Integer orgid) { + this.orgid = orgid; + } + public Integer getOrgrole() { + return orgrole; + } + public void setOrgrole(Integer olgrole) { + this.orgrole = olgrole; + } + public Integer getStoplogin() { + return stoplogin; + } + public void setStoplogin(Integer stoplogin) { + this.stoplogin = stoplogin; + } + public Integer getFromdate() { + return fromdate; + } + public void setFromdate(Integer fromdate) { + this.fromdate = fromdate; + } + public Integer getTodate() { + return todate; + } + public void setTodate(Integer todate) { + this.todate = todate; + } + public String getPwhash() { + return pwhash; + } + public void setPwhash(String pwhash) { + this.pwhash = pwhash; + } + public String getCres() { + return cres; + } + public void setCres(String cres) { + this.cres = cres; + } + public Long getCresdate() { + return cresdate; + } + public void setCresdate(Long cresdate) { + this.cresdate = cresdate; + } + public Long getJoindate() { + return joindate; + } + public void setJoindate(Long joindate) { + this.joindate = joindate; + } + public Long getLastlogintrydate() { + return lastlogintrydate; + } + public void setLastlogintrydate(Long lastlogintrydate) { + this.lastlogintrydate = lastlogintrydate; + } + public Integer getLoginerrorcount() { + return loginerrorcount; + } + public void setLoginerrorcount(Integer loginerrorcount) { + this.loginerrorcount = loginerrorcount; + } + public Long getLastlogindate() { + return lastlogindate; + } + public void setLastlogindate(Long lastlogindate) { + this.lastlogindate = lastlogindate; + } + public Long getModpwdate() { + return modpwdate; + } + public void setModpwdate(Long modpwdate) { + this.modpwdate = modpwdate; + } + public Long getLeavedate() { + return leavedate; + } + public void setLeavedate(Long leavedate) { + this.leavedate = leavedate; + } + public Integer getStatus() { + return status; + } + public void setStatus(Integer status) { + this.status = status; + } + public Long getRequestlogoutdate() { + return requestlogoutdate; + } + public void setRequestlogoutdate(Long requestlogoutdate) { + this.requestlogoutdate = requestlogoutdate; + } + /* 自動生成のアクセサ - end */ + + + /** + * LoginUserオブジェクトへの値コピー + */ + public void copy(LoginUser loginUser) { + loginUser.setUsrid(this.getUsrid()); + loginUser.setLoginid(this.getLoginid()); + loginUser.setKind(this.getKind()); + loginUser.setOrgid(this.getOrgid()); + loginUser.setOrgrole(this.getOrgrole()); + } + + public static final String 管理者初期パスワード = "testtest"; + public static Usr create運営管理者代表(Org org運営管理){ + return create運営管理者(org運営管理, null, null, true); + } + public static Usr create運営管理者(Org org運営管理, String loginid, String name, boolean is管理者代表) { + int role; + if(is管理者代表) { + role = ROLE_管理者; + loginid = "admin"; + name = "運営管理者"; + } else { + role = ROLE_通常会員; + } + Usr usr運営管理者 = new Usr(); + usr運営管理者.setLoginid(loginid); + usr運営管理者.setName(name); + usr運営管理者.setKind(Usr.KIND_運営管理者); + usr運営管理者.setOrgrole(role); + usr運営管理者.setOrgid(org運営管理.getOrgid()); + usr運営管理者.setStatus(Usr.STATUS_登録済み); + usr運営管理者.setStoplogin(AppDef.FLASE); + String pwhash = CalcHash.passowrdHash(管理者初期パスワード, usr運営管理者.getLoginid()); // 初期パスワード + usr運営管理者.setPwhash(pwhash); + usr運営管理者.setModpwdate(AppUtils.createNowLong()); + + return usr運営管理者; + } + + + + + /* 会員種別 */ + public static final int KIND_機関会員 = 1; + public static final int KIND_機関管理者 = 2; + public static final int KIND_運営管理者 = 3; + + /* 所属機関での役割 */ + public static final Integer ROLE_管理者 = 1; + public static final Integer ROLE_通常会員 = 9; + + /* 状態 */ + public static final int STATUS_仮登録 = 0; + public static final int STATUS_登録済み = 1; + public static final int STATUS_退会 = 2; + + /** + * @return 状態の名称 + */ + public String getStatus_Disp() { + switch (status) { + case STATUS_仮登録: + return "仮登録"; + case STATUS_登録済み: + return "登録済み"; + case STATUS_退会: + return "退会"; + default: + return String.valueOf(status); + } + } + + /** @return 種類の名称 */ + public String getKind_Disp() { + switch (kind) { + case KIND_機関会員: + return "機関会員"; + case KIND_機関管理者: + return "機関管理者"; + case KIND_運営管理者: + return "運営管理者"; + default: + return String.valueOf(status); + } + } + public String getLastlogindate_Disp() { + String lastlogin; + try { + final DateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm"); + Date d = AppUtils.toDate(this.getLastlogindate()); + if(d == null) { + lastlogin = "未ログイン"; + } else { + lastlogin = DF.format(d); + } + + } catch (Exception e) { + AppLogger.error(e); + if (this.getLastlogindate() != null) { + lastlogin = String.valueOf(this.getLastlogindate()); + } else { + lastlogin = ""; + }; + } + return lastlogin; + } + /** + * @return 代表者の時はTrue + */ + public boolean isAdmin() { + return ROLE_管理者.equals(getKind()); + } + + public boolean isログイン停止() { + if(this.stoplogin != null && this.stoplogin == 1) { + return true; + } + return false; + } + + /** + * ・会員情報編集画面からの退会 + * ・登録会員情報削除によるカスケード退会 + */ + public void 退会処理() { + this.setLeavedate(AppUtils.createNowLong()); + this.setStatus(Usr.STATUS_退会); + } + + /** + * 最終ログイン日時のソートに用いるComparator + */ + public static class LastlogindateComparator implements Comparator { + /** trueに変更すると新しい順 */ + private boolean desc = false; + + public LastlogindateComparator(boolean desc) { + this.desc = desc; + } + + @Override + public int compare(Usr o1, Usr o2) { + int reverse = 1; + if(desc) { + reverse = -1; + } + + Long n1 = 0L; + Long n2 = 0L; + if(o1 != null && o1.getLastlogindate() != null) n1 = o1.getLastlogindate(); + if(o2 != null && o2.getLastlogindate() != null) n2 = o2.getLastlogindate(); + + return Long.compare(n1, n2) * reverse; + } + } + + public String getName_Disp() { + String str = StringUtils.abbreviate(getName(), 100); + return str; + } + public String getLoginid_Disp() { + String str = StringUtils.abbreviate(getLoginid(), 30); + return str; + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/UsrDao.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/UsrDao.java new file mode 100644 index 0000000..ce218dd --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/UsrDao.java @@ -0,0 +1,111 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.hibernate.criterion.Restrictions; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + + +@Component("usrDao") +public class UsrDao extends AbstractDao { + + /* 参照形処理 ------------------------------------------------------------------------------------------------ */ + /** ユニークキーを使用した取得 */ + public Usr getByUsrid(Integer usrid) { + Usr cnd = new Usr(); + cnd.setUsrid(usrid); + List usrs = get(cnd); + if(usrs.size() == 1) { + return usrs.get(0); + } + return null; + } + /** 全件取得(論理削除除外) */ + public List get() { + Usr cnd = new Usr(); + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + return get(cnd); + } + /** 条件付き取得(論理削除除外) */ + public List get(Usr cnd) { + if(cnd != null) { + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + } + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Usr.class); + dc.add(Example.create(cnd)); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + } + + /* 登録系 ----------------------------------------------------------------------------------------------------*/ + private static final String ENTITYNAME = "Usr"; + private static final String PKEYNAME = "usrid"; + /** + * 登録処理 + * ・必要なカラムを自動採番する + * ・共通処理を実施する。 + * @param item + */ + public void add(Usr item, Integer updateusrid) { + /* 自動採番 */ + item.setUsrid(getNextId(ENTITYNAME, PKEYNAME)); + /* Insert実施 */ + super.add(item, updateusrid); + } + public void update(Usr item, Integer updateusrid) { + super.update(item, updateusrid); + } + public void removeLogical(Usr item, Integer updateusrid) { + super.removeLogical(item, updateusrid); + } + + /* entity固有のユーティリティ ----------------------------------------------------------------------------------- */ + /** + * ログインIDによる検索 + * ・論理削除は除く + * ・複数件取得できる場合は、退会していないレコード + * @param loginid + * @return + */ + public Usr getByLoginid(String loginid) { + Usr cnd = new Usr(); + cnd.setLoginid(loginid); + List usrs = get(cnd); + + if(usrs.size() == 1) { + return usrs.get(0); + } + /* 複数件取得できる場合は、退会していないレコード */ + for(Usr usr: usrs) { + if(Usr.STATUS_退会 != usr.getStatus()) { + return usr; + } + } + return null; + } + /** + * 条件を指定した検索 + * ・論理削除は除く + * @param cnd 絞り込み条件 + * @param cndNot 否定条件 + * @return 検索結果 + */ + public List get(Usr cnd, Usr cndNot) { + if(cnd != null) { + cnd.setDeleted(AppDef.FLASE); // 論理削除考慮 + } + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Usr.class); + dc.add(Example.create(cnd)); + dc.add(Restrictions.not(Example.create(cndNot))); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/dao/package-info.java b/AMM_web/src/main/java/jp/co/y_net/amm/dao/package-info.java new file mode 100644 index 0000000..732de7f --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/dao/package-info.java @@ -0,0 +1,21 @@ +/** + * データアクセス関連のパッケージ。ストレージはRDBを想定。 + * 2015/04/24 k.inaba + */ +package jp.co.y_net.amm.dao; + +/* + +CREATE DATABASE amm + WITH OWNER = libgdc + ENCODING = 'UTF8' + TABLESPACE = pg_default + LC_COLLATE = 'ja_JP.UTF-8' + LC_CTYPE = 'ja_JP.UTF-8' + CONNECTION LIMIT = -1; +CREATE SCHEMA ammdb AUTHORIZATION libgdc; +COMMENT ON SCHEMA ammdb IS 'AMM開発用'; + + + +*/ \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/AppPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/AppPage.java new file mode 100644 index 0000000..9ba9905 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/AppPage.java @@ -0,0 +1,464 @@ +package jp.co.y_net.amm.page; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.List; + +import javax.servlet.http.Cookie; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.GrpDao; +import jp.co.y_net.amm.dao.GrpusrDao; +import jp.co.y_net.amm.dao.InfDao; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.PwtcktDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; +import jp.co.y_net.amm.service.BatchUsrCreate; +import jp.co.y_net.amm.service.Challengestring; +import jp.co.y_net.amm.service.Logincheck; +import jp.co.y_net.amm.service.Logout; +import jp.co.y_net.amm.service.MailAddressCheck; +import jp.co.y_net.amm.service.PasswordTicketManager; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.request.http.WebRequest; +import org.apache.wicket.request.http.WebResponse; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * このアプリケーションの最上位のPageクラス + * pageパッケージ配下のPageクラスは必ず継承しなければならない。 + * + * CommonFrameXを経由して継承することを想定するため、 + * このPageクラスは画面のレイアウトは決定せず、 + * 共通処理を責務とする。 + * + * @author k_inaba + */ +public abstract class AppPage extends WebPage{ + + /* + * SpringBean宣言 + */ + + @SpringBean(name="usrDao") + protected UsrDao usrDao; + + @SpringBean(name="orgDao") + protected OrgDao orgDao; + + @SpringBean(name="pwtcktDao") + protected PwtcktDao pwtcktDao; + + @SpringBean(name="infDao") + protected InfDao infDao; + + @SpringBean(name="grpDao") + protected GrpDao grpDao; + + @SpringBean(name="grpusrDao") + protected GrpusrDao grpusrDao; + + @SpringBean(name="challengestring") + protected Challengestring challengestring; + + @SpringBean(name="logincheck") + protected Logincheck logincheck; + + @SpringBean(name="logout") + protected Logout logout; + + @SpringBean(name="passwordTicketManager") + protected PasswordTicketManager passwordTicketManager; + + @SpringBean(name="mailAddressCheck") + protected MailAddressCheck mailAddressCheck; + + @SpringBean(name="batchUsrCreate") + protected BatchUsrCreate batchUsrCreate; + + public AppPage() { + /* ステートレスなページでも、 + * JavaEEの実際のSessionオブジェクトと関連付けする */ + AppSession.get().bind(); + } + + /** + * コンストラクタ呼び出しが行われなくても処理対象となるメソッド + * 戻るボタンによる遷移でも呼び出される。 + * @see org.apache.wicket.Component#onConfigure() + */ + @Override + protected void onConfigure() { + /* ログインチェック */ + if (validateLogin() == false || existRequestLogout() || missmatchLoginId()) { + + /* 戻り画面を設定 */ + AppSession.get().returnPageClass = getPageClass(); + AppSession.get().returnPageParameters = getPageParameters(); + /* ログイン画面へ遷移 */ + setResponsePage(LoginPage.class, getPageParameters()); + + return; + } + } + + /** + * @return ログアウト要求が登録されていればTrue + */ + private boolean existRequestLogout() { + if (AppSession.get().isLogin()) { + + Integer usrId = AppSession.get().getLoginUser().getUsrid(); + if (usrId != null) { + Usr usr = usrDao.getByUsrid(usrId); + if (usr != null) { + if (usr.getRequestlogoutdate() != null && usr.getRequestlogoutdate() != -1L) { + + /* ログアウトを実行する */ + logout.execute(AppSession.get().getLoginUser().getLoginid()); +// AppSession.get().invalidateNow(); // セッション無効化 + AppSession.get().clearLoginUser(); + + return true; + } + } + } + } + return false; + } + + /** + * 2016/06/02 + * @return パラメータに付与されているログインIDとセッション上のログインIDが一致していなければTrue + */ + private boolean missmatchLoginId() { + if (AppSession.get().isLogin()) { + /* + * パラメータにログインIDが含まれている場合の処理 + */ + PageParameters params = getPageParameters(); + String paramLoginid = params.get("loginid").toString(); + if (StringUtils.isEmpty(paramLoginid) == false) { + if (AppSession.get().getLoginUser().getLoginid().equals(paramLoginid) == false) { + /* パラメータのログインIDとセッション情報のログインIDが一致していない。*/ + + /* ログアウトを実行する */ + logout.execute(AppSession.get().getLoginUser().getLoginid()); +// AppSession.get().invalidateNow(); // セッション無効化 + AppSession.get().clearLoginUser(); + + return true; + } + } + + } + return false; + + } + + /** + * ログインチェック + *  ログイン認証が必要な画面ではOverrideして実装すること + * @return Pageへのアクセスを認める場合はTrue + */ + protected boolean validateLogin() { + return true; // 既定では必ず「チェックOK」となる。 + } + + + + + /* --------------------------------------------------------------------------------------------------------------- + * 入力値検査 + */ + + + /** + * 【文字列】 + * valueが妥当な値でなければ error でメッセージをセットする。 + * @param value 検査対象 + * @param itemname メッセージで使用する項目名 + * @param min 許容される最小値(必須入力の場合は1以上の値を設定すること) + * @param max 許容される最大値 + */ + protected void validItem(String value, String itemname, int min, int max) { + if(StringUtils.isEmpty(value)) { + if(min > 0) { + error(itemname + "を入力してください。"); + } else { + /* 処理なし */ + } + } else { + if ((value.length() >= min && value.length() <= max) == false ) { + if(min == max) { + error(itemname + "は" + min + "文字で入力してください。"); + } else { + if(min == 1 || min == 0) { + error(itemname + "は" + max + "文字以下で入力してください。"); + } else { + error(itemname + "は" + min + "~" + max + "文字で入力してください。"); + } + } + } + } + } + /** + * 【数値】 + * valueが妥当な値でなければ error でメッセージをセットする。 + * @param value 検査対象 + * @param itemname メッセージで使用する項目名 + * @param min 許容される最小値(必須入力の場合は1以上の値を設定すること) + * @param max 許容される最大値 + */ + protected void validItemNum(String value, String itemname, int min, int max) { + validItem(value, itemname, min, max); + if(hasInputError()) return; // ここまでにエラーがあれば中断 + if(StringUtils.isEmpty(value) == false) { + if(isNumeric(value) == false) { + error(itemname + "は数字で入力してください。"); + } + } + } + /** + * 【電話番号】 + * valueが妥当な値でなければ error でメッセージをセットする。 + * @param value 検査対象 + * @param itemname メッセージで使用する項目名 + * @param min 許容される最小値(必須入力の場合は1以上の値を設定すること) + * @param max 許容される最大値 + */ + protected void validItemTel(String value, String itemname, int min, int max) { + validItem(value, itemname, min, max); + if(hasInputError()) return; // ここまでにエラーがあれば中断 + if(StringUtils.isEmpty(value) == false) { + value = value.replaceAll("-", ""); + if(isNumeric(value) == false) { + error(itemname + "は数字とハイフンのみ使用できます。"); + } + } + } + /** + * 【英数記号】 + * valueが妥当な値でなければ error でメッセージをセットする。 + * @param value 検査対象 + * @param itemname メッセージで使用する項目名 + * @param min 許容される最小値(必須入力の場合は1以上の値を設定すること) + * @param max 許容される最大値 + */ + protected void validItemAscii(String value, String itemname, int min, int max) { + validItem(value, itemname, min, max); + if(hasInputError()) return; // ここまでにエラーがあれば中断 + if(StringUtils.isEmpty(value) == false) { + if(StringUtils.isAsciiPrintable(value) == false) { + error(itemname + "に使用できない文字が含まれています。"); + } + } + } + /** + * 【メールアドレス】 + * @param value 検査対象 + * @param itemname メッセージで使用する項目名 + * @param min 許容される最小値(必須入力の場合は1以上の値を設定すること) + * @param max 許容される最大値 + */ + protected void validItemMail(String value, String itemname) { + validItemMail(value, itemname, false); + } + /** + * 【メールアドレス】 + * @param value 検査対象 + * @param itemname メッセージで使用する項目名 + * @param min 許容される最小値(必須入力の場合は1以上の値を設定すること) + * @param max 許容される最大値 + */ + protected void validItemMail(String value, String itemname, boolean freemailCheck) { + + if(StringUtils.isEmpty(value)) { + error(itemname + "を入力してください。"); + return; + } + if (value.length() > 256 ) { + error(itemname + "は256文字以内で入力してください。"); + return; + } + if(StringUtils.isAsciiPrintable(value) == false) { + error(itemname + "に使用できない文字が含まれています。"); + return; + } + if(value.indexOf('@') == -1) { + /* @がないメールアドレスは不正とする */ + error(itemname + "は形式が正しくありません。"); + return; + } + if(freemailCheck) { + /* フリーメールチェック */ + for (String ng: ResourceReader.getLines("omitmaildomains")) { + if(ng == null) ng = ""; + ng = ng.trim(); + if(StringUtils.isEmpty(ng) == false) { + if(value.endsWith(ng)) { + error(itemname + "は利用できないドメインです。"); + + /* 攻撃時の調査のため、ログ出力 */ + AppLogger.info("次のメールアドレスで申請されましたが、拒否リストに含まるため受け付けませんでした。:" + value); + + return; + } + } + } + } + } + + /** + * @return エラーが検知されているときにTrue + */ + protected boolean hasInputError() { + return AppSession.get().getFeedbackMessages().isEmpty() == false; + } + + + + /** + * 文字列が数値かどうかチェックする + * @param value 対象文字列 + * @return 数値 true 数値以外 false + */ + public static boolean isNumeric(String value) { +// try { 以下の実装では Intの最大値以上で不正な結果を返す。 +// Integer.parseInt(value); +// } catch (NumberFormatException e) { +// return false; +// } +// return true; + if("-1".equals(value)) { + return true; // 「指定なし」を示す数値として許可する + } + if(StringUtils.isNumeric(value) == false) { + return false; + } + + if(StringUtils.isEmpty(value) != false) { + /* 全角の数字をNGとする。*/ + if(value.indexOf('0') != -1) return false; + if(value.indexOf('1') != -1) return false; + if(value.indexOf('2') != -1) return false; + if(value.indexOf('3') != -1) return false; + if(value.indexOf('4') != -1) return false; + if(value.indexOf('5') != -1) return false; + if(value.indexOf('6') != -1) return false; + if(value.indexOf('7') != -1) return false; + if(value.indexOf('8') != -1) return false; + if(value.indexOf('9') != -1) return false; + } + return true; + } + + + + + + /* + * ユーティリティ --------------------------------------------------------------------------------------------- + */ + /** @return 機関会員がログインしているときにTrue */ + protected boolean isMember() { + return AppSession.get().isLogin() + && AppSession.get().getLoginUser().getKind() != null + && AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関会員); + } + /** @return 機関管理者がログインしているときにTrue */ + protected boolean isOrgAdmin() { + return AppSession.get().isLogin() + && AppSession.get().getLoginUser().getKind() != null + && AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関管理者); + } + /** @return 運営管理者がログインしているときにTrue */ + protected boolean isSystemAdmin() { + return AppSession.get().isLogin() + && AppSession.get().getLoginUser().getKind() != null + && AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者); + } + protected boolean isSystemAdmin代表者() { + return AppSession.get().isLogin() + && AppSession.get().getLoginUser().getKind() != null + && AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者) + && AppSession.get().getLoginUser().getOrgrole() != null + && AppSession.get().getLoginUser().getOrgrole().equals(Usr.ROLE_管理者); + } + /** + * @param usr + * @return usr のログインIDが、ログインユーザのIDと一致するときにTrue + */ + protected boolean isLoginUser(Usr usr) { + return AppSession.get().isLogin() + && AppSession.get().getLoginUser().getUsrid().equals(usr.getUsrid()); + } + +// protected String createFullUrl(String url, boolean https) { +// /* URLを作成する */ +// Url urlMe = getRequestCycle().getRequest().getOriginalUrl(); +// /* 必要に応じてプロトコルを変更する */ +// String protocol = https ? "https://" : "http://"; +// String host = urlMe.getHost(); // 現在のホスト名を引き継ぐ +// String port = String.valueOf(urlMe.getPort()); // 現在のポートを引き継ぐ +// if (StringUtils.isEmpty(port) || "80".equals(port)) { +// port = ""; +// } else { +// port = ":" + port; +// } +// String contextPath = getRequestCycle().getRequest().getContextPath(); // 現在のコンテキストパスを引き継ぐ +// String urlBase = protocol + host + port + contextPath + "/" + url; +// return urlBase; +// } + + protected String getScreenId() { + return getPage().getClass().getSimpleName(); + } + protected PageParameters getParams() { + return super.getPageParameters(); + } + protected void addCookie(String name, String value, int time) { + Cookie cookie = new Cookie(name, value); + cookie.setPath("/"); + cookie.setMaxAge(time); // 保存期間 + ((WebResponse) getRequestCycle().getResponse()).addCookie(cookie); + } + protected String getCookie(String name) { + List cookies = ((WebRequest) getRequestCycle().getRequest()).getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if (name.equals(cookie.getName())) { + return cookie.getValue(); + } + } + } + return ""; + } +// TODO 実装箇所再検討 + protected static boolean validFromToDate(String value) { + if("00000000".equals(value)){ + return true; // 未指定として正しい値 + } + final DateFormat DF = new SimpleDateFormat("yyyyMMdd"); + DF.setLenient(false); // 厳密な変換 + try { + DF.parse(value); + return true; + } catch (ParseException e) { + return false; + } + } + + + + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonConfirmPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonConfirmPage.html new file mode 100644 index 0000000..59904b2 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonConfirmPage.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + +
フィードバックメッセージ
+
+
+ +
+ 確認メッセージ + +
+ 本当によろしいですか? +
+
+
+
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonConfirmPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonConfirmPage.java new file mode 100644 index 0000000..0c6d492 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonConfirmPage.java @@ -0,0 +1,88 @@ +package jp.co.y_net.amm.page; + +import java.io.Serializable; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.PropertyModel; + +public class CommonConfirmPage extends WebPage { + private static final long serialVersionUID = 1L; + + /** 確認メッセージ */ + public String confirmMessage = ""; // 変数名変更禁止 + public String confirmMessageStrong = ""; // 変数名変更禁止 + + /** + * コールバックオブジェクト + */ + public Callback callback; + public static abstract class Callback implements Serializable { + abstract void callback(AjaxRequestTarget target); + } + + /** + * 処理実行オブジェクト + */ + public Executable executable; + public static abstract class Executable { + abstract void execute(); + } + + public CommonConfirmPage() { + + /* フィードバックパネル */ + final FeedbackPanel fbPanel = new FeedbackPanel("feedback"); + fbPanel.setOutputMarkupId(true); + add(fbPanel); + + Form form = new Form("form"); + add(form); + + /* 確認メッセージ */ + form.add(new Label("confirmMessage", new PropertyModel(this, "confirmMessage"))); + form.add(new Label("confirmMessageStrong", new PropertyModel(this, "confirmMessageStrong")){ + @Override + public boolean isVisible() { + return StringUtils.isEmpty(confirmMessageStrong) == false; + } + + }); + + + /* 実行ボタン */ + form.add(new AjaxButton("btnExecute"){ + @Override + protected void onSubmit(AjaxRequestTarget target, Form form) { + executable.execute(); // executableの実行 + callback.callback(target); // コールバックに通知 + ModalWindow.closeCurrent(target); // 画面を閉じる + } + + @Override + protected void onError(AjaxRequestTarget target, Form form) { + // 処理なし + } + }); + + /* 戻る/キャンセル ボタン */ + form.add(new AjaxButton("btnBack") { + @Override + protected void onSubmit(AjaxRequestTarget target, Form form) { + ModalWindow.closeCurrent(target); // 画面を閉じる + } + + @Override + protected void onError(AjaxRequestTarget target, Form form) { + // 処理なし + } + }); + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonFrameA.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonFrameA.html new file mode 100644 index 0000000..f30aa48 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonFrameA.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + ChattyInftyOnline + + + + + + + + +
+
+
+ 0123456789 +
+
+
+
+ + + + + + +
+
+ + +
[各ページで記載] +

test

+ + +














+
+
+ +
+ + +
+
+ + + + + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonFrameA.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonFrameA.java new file mode 100644 index 0000000..25a17b7 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/CommonFrameA.java @@ -0,0 +1,379 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppSendMail; +import jp.co.y_net.amm.common.AppSendMail.MailSetting; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.service.PasswordTicketManager; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.Page; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.link.Link; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.Model; + + + +/** + * 1カラムでデザインされたページの共通クラス + * + * ヘッダー領域 + * ・トップぺ戻るリンク + * ・ログイン中のユーザID + * ・ログアウトボタン + * + * フッター領域 + * + * @author k_inaba + */ +public class CommonFrameA extends AppPage { + + /* 確認画面用のモーダル */ + /** モーダル確認画面で「処理実行」が選択されたときにTreuになるモデルオブジェクト*/ + final private Model doExecute = Model.of(false); + final private ModalWindow modalCommonConfirm = new ModalWindow("modalCommonConfirm"); + + /* [デバッグ用] メールに記載されたURLを表示するコンテナ */ + final private WebMarkupContainer cntDebugUrlOnMail = new WebMarkupContainer("cntDebugUrlOnMail"); + final private ExternalLink linkDebugUrlOnMail = new ExternalLink("debugUrlOnMail", ""){ + @Override + public boolean isVisible() { + return StringUtils.isEmpty(this.getDefaultModelObjectAsString()) == false; + } + }; + protected void addDebugUrl(String debugUrl){ + linkDebugUrlOnMail.setDefaultModelObject(debugUrl); + } + public CommonFrameA() { + + /* ロゴのクリック */ + //add(new BookmarkablePageLink("goTop", TopPage.class)); +// add(new ExternalLink("goTop",ResourceReader.getStringQuick("url.back.top"))); + + /* + * ログイン情報領域 + */ + WebMarkupContainer divLoginUser = new WebMarkupContainer("divLoginUser"){ + @Override + public boolean isVisible() { + //return AppSession.isLogin(); // ログイン中のみ表示する。 + return true; + } + }; + add(divLoginUser); + + /* + * ログイン中ユーザ + */ + Model loginUserId = new Model() { + @Override + public String getObject() { + if(AppSession.get().isLogin()) { + String loginid = AppSession.get().getLoginUser().getLoginid(); + //return "ログインユーザー:" + loginid; + return "ログインユーザー:" + StringUtils.abbreviate(loginid, 30); + } else { + //return "ログインしていません"; + return ""; + } + } + }; + Label labelLoginId = new Label("labelLoginId", loginUserId); + divLoginUser.add(labelLoginId); + + /* + * ログアウトボタン + */ + Form formLoginUser = new Form("formLoginUser"); + divLoginUser.add(formLoginUser); + Button buttonLogout = new Button("buttonLogout") { + @Override + public void onSubmit() { + + /* APIログアウト相当の実施 */ + logout.execute(AppSession.get().getLoginUser().getLoginid()); + + /* セッション無効化 */ + AppSession.get().invalidateNow(); + + /* トップ画面へ遷移 */ + //setResponsePage(getApplication().getHomePage()); + } + @Override + public boolean isVisible() { + return AppSession.get().isLogin(); // ログイン中のみ表示する。 + } + }; + formLoginUser.add(buttonLogout); + + /* 確認画面用のモーダル */ + /** モーダル確認画面で「処理実行」が選択されたときにTreuになるモデルオブジェクト*/ + add(modalCommonConfirm); + + /* デバッグ出力:メールに記載したURL */ + cntDebugUrlOnMail.setOutputMarkupId(true); + add(cntDebugUrlOnMail); + linkDebugUrlOnMail.setOutputMarkupId(true); + linkDebugUrlOnMail.setOutputMarkupPlaceholderTag(true); + cntDebugUrlOnMail.add(linkDebugUrlOnMail); + +// /* +// * LocaleStringに関するデバッグ情報 +// */ +// WebMarkupContainer devls = new WebMarkupContainer("devls") { +// @Override +// public boolean isVisible() { +// return AppLogger.isDebug(); +// } +// }; +// add(devls); + +// Localestring cnd = new Localestring(); +// cnd.setScreenid(getScreenId()); +// List localestrings = localestringDao.get(cnd); +// devls.add(new ListView("listView", localestrings) { +// @Override +// protected void populateItem(ListItem item) { +// item.add(new Label("screenid", item.getModelObject().getScreenid())); +// item.add(new Label("controlid", item.getModelObject().getControlid())); +// item.add(new Label("lang", String.valueOf(item.getModelObject().getLanguageid()))); +// item.add(new Label("string", String.valueOf(item.getModelObject().getPrintstring()))); +// } +// }); + + } + + /** モーダル確認画面を呼び出すためのボタン(共通実装)*/ + protected abstract class ConfirmAjaxButton extends AjaxButton { + public ConfirmAjaxButton(String id) { + super(id); + } + @Override + final protected void onSubmit(AjaxRequestTarget target, Form form) { + + /* + * 事前処理 + * 呼び出し元のPageクラスで実装したexecuteBeforeの処理を行います。 + */ + boolean check = executeBefore(); + if(check == false + || hasInputError()) { + + FeedbackPanel feedback = (FeedbackPanel)getPage().get("feedback"); + if(feedback != null) { + target.add(feedback); + } + return; // 【処理中断】 + } + + doExecute.setObject(false); + + /* モーダル確認画面を構築 */ + //modalDefPreview.setTitle(""); + modalCommonConfirm.setCssClassName(ModalWindow.CSS_CLASS_GRAY); + final Integer MODAL_PREVIEW_HEIGHT = 150; + final Integer MODAL_PREVIEW_WIDTH = 400; + modalCommonConfirm.setInitialHeight(MODAL_PREVIEW_HEIGHT); + modalCommonConfirm.setInitialWidth(MODAL_PREVIEW_WIDTH); + modalCommonConfirm.setResizable(true); + modalCommonConfirm.setPageCreator(new ModalWindow.PageCreator() { + private static final long serialVersionUID = 1L; + public Page createPage() { + /* Pageインスタンスの作成 */ + CommonConfirmPage modalPage = new CommonConfirmPage(); + /* + * 確認メッセージの設定 + *  呼び出し元のPageクラスでオーバーライドして設定します。 + */ + modalPage.confirmMessage = getConfirmMessage(); + modalPage.confirmMessageStrong = getConfirmMessageStrong(); + /* + * executableオブジェクトの設定 + *  executableは確認モーダル画面の「実行」ボタンを押した直後に実行されます。 + */ + modalPage.executable = new CommonConfirmPage.Executable() { + @Override + void execute() { + executableWork(); + } + }; + + /* + * CallBack の設定 + * Modal画面から呼び出し元のPageオブジェクトに参照を引き渡す処理です。 + * Callbackクラスを使用し、PageReferenceを経由しないと、正しく引き渡しできません。 + */ + final CommonConfirmPage.Callback callback = new CommonConfirmPage.Callback() { + @Override + public void callback(AjaxRequestTarget target) { + CommonFrameA me = (CommonFrameA)getPage().getPageReference().getPage(); // 左記の実装でないと、インスタンスが変化する。 + me.doExecute.setObject(true); + } + }; + modalPage.callback = callback; + return modalPage; + } + }); + /* CallBack の処理 */ + modalCommonConfirm.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { + private static final long serialVersionUID = 1L; + @Override + public void onClose(AjaxRequestTarget target) { + if(doExecute.getObject()) { + /* 確認モーダル画面の「実行」ボタンを押した後、呼び出し元のPageクラスで実行される処理。 */ + executeAfter(target); + + FeedbackPanel feedback = (FeedbackPanel)getPage().get("feedback"); + if(feedback != null) { + target.add(feedback); + } + + if(AppLogger.isDebug()) { + /* [デバッグ用] メールに記載されたURLを表示するコンテナ */ + target.add(cntDebugUrlOnMail); + } + } + } + }); + modalCommonConfirm.show(target); // モーダルを表示 + } + + @Override + protected void onError(AjaxRequestTarget target, Form form) { + // 処理なし + } + + /** 確認メッセージの設定 */ + abstract String getConfirmMessage(); + /** 確認メッセージの設定 */ + String getConfirmMessageStrong(){ + return ""; + }; + /** + * 前処理 + *  入力値チェックを行います。 + *  呼び出し元のPageクラスでオーバーライドします。 + *  入力値チェックが不要の場合は、オーバーライドしなくてよいです。 + */ + boolean executeBefore() { + return true; + } + /** + * 確認モーダル画面の「実行」ボタンを押した直後に実行される処理。 + * ここでは、呼び出し元のPageクラスのメンバに、正しく値を設定することができないことに注意する。 + */ + void executableWork(){ + // 必要に応じてオーバーライド + }; + /** + * 確認モーダル画面の「実行」ボタンを押した後、呼び出し元のPageクラスで実行される処理。 + */ + abstract void executeAfter(AjaxRequestTarget target); + } + + protected void doパスワードリセット(final Integer targetUserid, PasswordTicketManager passwordTicketManager, String mailValue) { + + + + /* 共通機能:パスワード登録チケット発行 からチケットを取得する */ + String random = passwordTicketManager.executeパスワードリセット(targetUserid); + + /* パスワード再設定用メールを送信する */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.resetpw")); + setting.setMailTo(mailValue); + String パスワード登録画面のURL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random; + setting.replace("パスワード登録画面のURL", パスワード登録画面のURL); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + /* テスト自動化対応 */ + if (AppLogger.isDebug()) { + //info("メールに記載したURL【" + パスワード登録画面のURL + "】"); + addDebugUrl(パスワード登録画面のURL); + } + } + + private Page returnPage; + protected Page getReturnPage() { + return returnPage; + } + protected void setReturnPage(Page returnPage) { + this.returnPage = returnPage; + } + + + + /** + * 共通戻るリンクの設置 + */ + protected void createCommonBackLinks() { + add(new ExternalLink("lnkMember", ResourceReader.getStringQuick("url.back.member")) { + @Override + public boolean isVisible() { + return isMember(); + } + }); + add(new ExternalLink("lnkOrgAdmin", ResourceReader.getStringQuick("url.back.orgadmin")) { + @Override + public boolean isVisible() { + return isOrgAdmin(); + } + }); + add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin")) { + @Override + public boolean isVisible() { + return isSystemAdmin(); + } + }); + } + /** + * 画面固有の戻るボタンの設置 + * @param clz + * @param string + */ + protected void createBackLink(final Class clz, final String name) { + Link linkReturn = new Link("lnkReturn") { + @Override + public void onClick() { + setResponsePage(getReturnPage()); + } + @Override + public boolean isVisible() { + return getReturnPage() != null; + } + }; + Label lnkReturnAnker = new Label("lnkReturnAnker", new Model(){ + @Override + public String getObject() { + if(getReturnPage() != null && getReturnPage().getClass().equals(clz)) { + return name + "へ戻る"; + } else { + return "前へ戻る"; + } + } + }); + linkReturn.add(lnkReturnAnker); + add(linkReturn); + } + /** + * フィードバックパネルの設置 + */ + protected void createFeedbackPanel() { + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/DashboardPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/DashboardPage.html new file mode 100644 index 0000000..5008a01 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/DashboardPage.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + ログイン + + + +
+
+ + +

+ + + + +この書式で記述するコメントは詳細設計の記述です。実際には画面に表示されません。 + +2016/10/18 更新 +

インターフェース一覧

+ + + + + + +

ログイン(スタブ)

+
フィードバックメッセージ
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
チャレンジ値(A)
アカウント(B)
パスワード(C)
パスワードハッシュ(D)
チャレンジレスポンス(E)
+
+ + + +
+ +
+
+ +
+ +

メール送信テスト

+
+
+ + + + + +
メールアドレス
+ +
+
+ + +

エラーログ

+
+ +ログ
+
+
<前へ 次へ>
+
+ + +
+ +

セッション利用状況

+
+    連番:時間:ID
+    連番:時間:ID
+
+ + + +
+
+再表示<< + + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/DashboardPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/DashboardPage.java new file mode 100644 index 0000000..e660a4d --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/DashboardPage.java @@ -0,0 +1,232 @@ +package jp.co.y_net.amm.page; + +import java.io.File; +import java.io.FilenameFilter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppSendMail; +import jp.co.y_net.amm.common.AppSendMail.MailSetting; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.common.SessionUsageListener; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.service.Logincheck; +import jp.co.y_net.amm.service.Logincheck.LogincheckResult; + +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.markup.html.link.DownloadLink; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.PageableListView; +import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; + +public class DashboardPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + private static final DateFormat DF_YYYYMMDDHHMMSSSS = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.S"); + + public DashboardPage() { + + /* 認証 */ + if(isSystemAdmin() == false && ResourceReader.getBooleanQuick("debug.mode") == false) { + AppSession.get().returnPageClass = DashboardPage.class; + throw new RestartResponseException(LoginPage.class); + } + + /* フィードバックパネル */ + final WebMarkupContainer fbPanel = new FeedbackPanel("feedback"); + add(fbPanel); + + /* ログインフォーム領域 ------------------------------------------------------------------------------------- */ + WebMarkupContainer divLogin = new WebMarkupContainer("divLogin") { + @Override + public boolean isVisible() { + //return AppSession.isLogin() == false; + return true; + } + }; + add(divLogin); + + + final Model modelChallengestringA = Model.of(challengestring.execute()); + final TextField textChallenge = new TextField("textChallenge", modelChallengestringA); + final TextField textLoginId = new TextField("textLoginId", Model.of("")); + final TextField textChallengeResponse = new TextField("textChallengeResponse", Model.of("")); + + + /* ログイン */ + Button btnLogin = new Button("btnLogin"); + + Form form =new Form("form") { + @Override + public boolean isVisible() { + //return AppSession.isLogin() == false; + return true; + } + @Override + public void onSubmit() { + /* ログイン処理 */ + + String challengestringA = modelChallengestringA.getObject(); + String loginidB = textLoginId.getValue(); + String cresE = textChallengeResponse.getValue(); + + + /* ------------------------ */ + + LogincheckResult checkresult = logincheck.executeFromApi(loginidB, cresE, challengestringA); // ここではAPI呼び出しと同等にする + + if(0 == checkresult.errorCode) { + /* 認証成功 */ + + /* セッションへ登録 */ + Usr usr = usrDao.getByLoginid(loginidB); + AppSession.get().setLoginUser(usr); + + /* jsessionidの変更(セッション固定化攻撃対策)*/ + AppSession.get().replaceSession(); + + if(AppSession.get().returnPageClass != null) { + /* 呼び出し元が設定されている場合 */ + setResponsePage(AppSession.get().returnPageClass, AppSession.get().returnPageParameters); + } else { + /* 呼び出し元が設定されていない場合 */ + //setResponsePage(getApplication().getHomePage()); + setResponsePage(getPage()); + } + + } else { + error(Logincheck.errorMemo.get(checkresult.errorCode) + "/" + Logincheck.errorMessage.get(checkresult.errorCode) ); + } + } + }; + divLogin.add(form); + form.add(textChallenge); + form.add(textLoginId); + form.add(textChallengeResponse); + form.add(btnLogin); + + /* + * メール送信テスト + */ + WebMarkupContainer divSendMail = new WebMarkupContainer("divSendMail"); + add(divSendMail); + { + Form formMail =new Form("form"); + divSendMail.add(formMail); + + final TextField mail = new TextField("mail", Model.of("")); + formMail.add(mail); + + final Button btnSubmit = new Button("btnSubmit"){ + @Override + public void onSubmit() { + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.test")); + setting.setMailTo(mail.getValue()); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + } + }; + formMail.add(btnSubmit); + } + + /* ログ取得 */ + WebMarkupContainer cntLogs = new WebMarkupContainer("cntLogs") { + @Override + public boolean isVisible() { + //return AppSession.get().isLogin(); + return true; + } + }; + add(cntLogs); + final IModel> logs = new LoadableDetachableModel>() { + @Override + protected List load() { + File dir = new File(System.getProperty("catalina.base"), "logs"); + if(dir.exists() == false) { + return new ArrayList(); + } + File[] aryLogs = dir.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return (name.startsWith("AMMLog") && name.endsWith(".log")); + } + }); + List logs = new ArrayList(); + for(File l: aryLogs) { + logs.add(l); + } + Collections.sort(logs, new Comparator() { + @Override + public int compare(File o1, File o2) { + return Long.valueOf(o1.lastModified()) + .compareTo( + Long.valueOf(o2.lastModified()) + ) * -1; + } + }); + return logs; + } + }; + final PageableListView listview = new PageableListView("lvLog", logs, 5) { + private static final long serialVersionUID = 1L; + @Override + protected void populateItem(ListItem item) { + File log = item.getModelObject(); + + DownloadLink lnkLog = new DownloadLink("lnkLog", log); + + lnkLog.add(new Label("log", log.getAbsolutePath())); + item.add(lnkLog); + } + }; +// listview.setReuseItems(true); + cntLogs.add(listview); + PagingNavigator navigator = new PagingNavigator("paging", listview); + cntLogs.add(navigator); + + + /* セッション利用状況 */ + StringBuilder sb = new StringBuilder(); + + int i = 0; + for (Map.Entry e: SessionUsageListener.map.entrySet()) { + + String startTime = DF_YYYYMMDDHHMMSSSS.format(e.getValue()); + String sessinId = e.getKey(); + + sb.append(String.format("#%1$04d",i++ )+ ":" + startTime + ":"+ sessinId + "\n"); + } + if(i == 0) { + sb.append("0件"); + } + add(new Label("sessionusage", sb.toString())); + + + /* 再表示 */ + BookmarkablePageLink lnkReload = new BookmarkablePageLink("lnkReload", DashboardPage.class); + add(lnkReload); + + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/EntryPasswordPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/EntryPasswordPage.html new file mode 100644 index 0000000..f1e79c3 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/EntryPasswordPage.html @@ -0,0 +1,58 @@ + + + + + + + + + + パスワード入力 + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+ +

+パスワードが登録されました。 +

+ + + + + + + + + + + + +
パスワード
パスワード(確認)
+
+ + + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/EntryPasswordPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/EntryPasswordPage.java new file mode 100644 index 0000000..4999f9e --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/EntryPasswordPage.java @@ -0,0 +1,205 @@ +package jp.co.y_net.amm.page; + +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.CalcHash; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Pwtckt; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.PasswordTextField; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class EntryPasswordPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + public String passwordValue; + public String password2Value; + + /* + * 画面の状態 + */ + private boolean complete = false; + + public EntryPasswordPage(PageParameters pageParams) { + + add(new ExternalLink("lnkTop", ResourceReader.getStringQuick("url.back.top"))); + + /* フィードバックメッセージ */ + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + + final Form form = new Form("form"); + form.setOutputMarkupId(true); + form.setVisible(false); // エラーチェックが完了するまで非表示とする。 + add(form); + + /* パラメータチェック ------------------------------------------- */ + String paramValue = pageParams.get("value").toString(); + validItem(paramValue, "パラメータvalue", 1, 16); + //if(hasInputError()) return; + if(hasInputError()) { + /* 有効文字数を表示してしまう具体的なエラーメッセージを避ける */ + AppSession.get().getFeedbackMessages().clear(); + error("このURLは無効です。"); + return; + } + + /* 有効なランダムチケットが無い場合は、メッセージを表示する。*/ + Pwtckt cnd = new Pwtckt(); + cnd.setTicket(paramValue); + final Pwtckt dbTicket; + List tickets = pwtcktDao.get(cnd); + if(tickets.size() != 1) { + error("このURLは無効です。"); + return; + } else { + dbTicket = tickets.get(0); + } + if(dbTicket.getStatus().equals(Pwtckt.STATUS_受付中) == false) { + error("このURLは無効です。"); + return; + } + if(dbTicket.getTicketdate() < AppUtils.createNowLong()) { + error("このURLは期限切れです。もう一度手続きを行ってください。"); + + dbTicket.setStatus(Pwtckt.STATUS_有効期限切れ); + pwtcktDao.update(dbTicket, AppDef.USERID_NONE); // 【更新処理】 + + return; + } + + form.setVisible(true); + /* -------------------------------------------------------------------------------------------------------*/ + /* Form内の設定 */ + + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + //String msg = "パスワードを登録してください。
パスワード登録後、本登録完了となります。
パスワードは8文字以上、16文字以内で入力してください。"; + String msg = "パスワードを登録してください。
パスワードは8文字以上、16文字以内で入力してください。"; + if(complete) { + msg = "パスワードの登録が完了しました。"; + } + return msg; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + resutlMessage.setEscapeModelStrings(false); + form.add(resutlMessage); + + PasswordTextField password = new PasswordTextField("password", new PropertyModel(this, "passwordValue")){ + @Override + public boolean isVisible() { + /* 完了後の状態なら表示しない */ + return complete == false; + } + }; + form.add(password); + PasswordTextField password2 = new PasswordTextField("password2", new PropertyModel(this, "password2Value")){ + @Override + public boolean isVisible() { + /* 完了後の状態なら表示しない */ + return complete == false; + } + }; + form.add(password2); + + Button btnSubmit = new ConfirmAjaxButton("btnSubmit"){ + @Override + protected String getConfirmMessage() { + return "パスワードを登録します。"; + } + @Override + boolean executeBefore() { + /* 入力値変換 */ + passwordValue = AppStringUtils.trim(passwordValue); + password2Value = AppStringUtils.trim(password2Value); + + /* 入力値チェック */ + validItemAscii(passwordValue, "パスワード", 8, 16); + validItemAscii(password2Value, "パスワード確認用", 8, 16); + if(passwordValue.equals(password2Value) == false) { + error("入力されたパスワードが一致しません。"); + } + if(hasInputError()) return false; // ここまででエラーチェック + return true; + } + @Override + void executeAfter(AjaxRequestTarget target) { + /* データアクセス 機関申請者のパスワード登録 */ + Usr usr = usrDao.getByUsrid(dbTicket.getUsrid()); + if(usr == null) { + error("(ユーザ情報が登録されていません。)"); + return; + } + if(Usr.STATUS_退会 == usr.getStatus()) { + /* 仮登録中に退会処理をされた場合を考慮 */ + error("(ユーザ情報が取り消されています。)"); + return; + } + + /* ユーザ情報更新 */ + String pwhash = CalcHash.passowrdHash(passwordValue, usr.getLoginid()); + usr.setPwhash(pwhash); + usr.setModpwdate(AppUtils.createNowLong()); + usr.setJoindate(AppUtils.createNowLong()); // 入会日時 + usr.setStatus(Usr.STATUS_登録済み); + + usrDao.update(usr, AppDef.USERID_NONE); // 【更新処理】 + + + /* 機関情報更新 */ + Org org = orgDao.getByOrgid(usr.getOrgid()); + if(org == null) { + error("(組織情報が登録されていません。)"); + return; + } + org.setStatus(Org.STATUS_本登録済み); + org.setJoindate(AppUtils.createNowLong()); // 本登録日時 + + orgDao.update(org, AppDef.USERID_NONE); // 【更新処理】 + + + /* パスワード受付管理情報更新 */ + dbTicket.setStatus(Pwtckt.STATUS_完了); + dbTicket.setCompletedate(AppUtils.createNowLong()); + + pwtcktDao.update(dbTicket, AppDef.USERID_NONE); // 【更新処理】 + + + /* 完了状態へ移行 */ + complete = true; + + /* 画面コンポーネントの再描画 */ + target.add(form); + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return complete == false; + } + }; + form.add(btnSubmit); + + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/ErrorPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/ErrorPage.html new file mode 100644 index 0000000..d7081b5 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/ErrorPage.html @@ -0,0 +1,24 @@ + + + + + + エラー + + +
+
+ +
フィードバックメッセージ
+ + +エラーが発生しました。
+
+ +
+トップへ + +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/ErrorPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/ErrorPage.java new file mode 100644 index 0000000..1ae9367 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/ErrorPage.java @@ -0,0 +1,28 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.common.ResourceReader; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.panel.FeedbackPanel; + +public class ErrorPage extends AppPage{ + public ErrorPage() { + /* フィードバックパネル設置 */ + add(new FeedbackPanel("feedback")); + + /* 標準メッセージ */ + add(new WebMarkupContainer("starndardmsg") { + @Override + public boolean isVisible() { + return getPage().hasFeedbackMessage() == false; + } + }); + + add(new ExternalLink("goTop",ResourceReader.getStringQuick("url.back.top"))); + } +// @Override +// protected boolean needLogin() { +// return false; +// } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/ExportPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/ExportPage.html new file mode 100644 index 0000000..7536e79 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/ExportPage.html @@ -0,0 +1,47 @@ + + + + + + + + + + データエクスポート + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

データエクスポート

+ +
+
+
+
+ +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/ExportPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/ExportPage.java new file mode 100644 index 0000000..27e2cec --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/ExportPage.java @@ -0,0 +1,332 @@ +package jp.co.y_net.amm.page; + +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Grp; +import jp.co.y_net.amm.dao.Grpusr; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.util.resource.StringResourceStream; + +public class ExportPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + // 無し + + /* + * 画面の状態 + */ +// private boolean complete = true; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + } + return false; + } + + public ExportPage(PageParameters pageParams) { + + /* 戻るリンク */ + add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin"))); + + /* フィードバックメッセージ */ + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + + /* 入力フォーム */ + Form form = new Form("form"); + add(form); + + /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + // なし + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + final List usrs = usrDao.get(); + final List orgs = orgDao.get(); + final List grps = grpDao.get(); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + form.add(new Button("btnCsvUsr"){ + @Override + public void onSubmit() { + StringBuilder csvBuilder = new StringBuilder(); + + csvBuilder.append("ユーザ情報\n"); + csvBuilder.append("出力日:" + new SimpleDateFormat("yyyy年MM月dd日 HH時:mm分").format(new Date()) + "\n"); + csvBuilder.append("\n"); + + List heads = Arrays.asList(new String[]{ + "ユーザID", + "ログインID", + "氏名", + "種別", + "所属組織", + "所属組織での役割", + "入会日時", + "ログイン失敗回数", + "最終ログイン日時", + "パスワード変更日時", + "退会日付", + "状態", + }); + for (String str: heads) { + csvBuilder.append(escapeCsv(str) + ","); + } + csvBuilder.append("\n"); + + List> recodes = new ArrayList>(); + for (Usr usr: usrs) { + List datas = Arrays.asList(new Object[]{ + (usr.getUsrid()), + (usr.getLoginid()), + (usr.getName()), + 名称へ変換(usr.getKind(), "1.機関会員,2.機関管理者,3.運営管理者,"), + 組織名へ変換(usr.getOrgid(), orgs), + 名称へ変換(usr.getOrgrole(), "1.管理者, 9.通常会員"), + yyyyMMddへ変換(usr.getJoindate()), + (usr.getLoginerrorcount()), + yyyyMMddへ変換(usr.getLastlogindate()), + yyyyMMddへ変換(usr.getModpwdate()), + yyyyMMddへ変換(usr.getLeavedate()), + 名称へ変換(usr.getStatus(), "0.仮登録(登録待ち),1.登録済み,2.退会,"), + }); + recodes.add(datas); + } + for (List recode: recodes) { + for (Object obj: recode) { + String str= ""; + if (obj!= null) { + str = obj.toString(); + } + csvBuilder.append(escapeCsv(str) + ","); + } + csvBuilder.append("\n"); + } + + /* CSVファイル名をセットしてレスポンス */ + String strCsvName = "USR_" + String.valueOf(getTodayNumber()) + ".csv"; + responseCsv(csvBuilder, strCsvName); + } + }); + + form.add(new Button("btnCsvOrg"){ + @Override + public void onSubmit() { + StringBuilder csvBuilder = new StringBuilder(); + + csvBuilder.append("組織情報\n"); + csvBuilder.append("出力日:" + new SimpleDateFormat("yyyy年MM月dd日 HH時:mm分").format(new Date()) + "\n"); + csvBuilder.append("\n"); + + List heads = Arrays.asList(new String[]{ + "組織ID", + "種別", + "名称", + "管理者氏名", + "申請日時", + "本登録日時", + "状態", + }); + for (String str: heads) { + csvBuilder.append(escapeCsv(str) + ","); + } + csvBuilder.append("\n"); + + List> recodes = new ArrayList>(); + for (Org data: orgs) { + List datas = Arrays.asList(new Object[]{ + (data.getOrgid()), + 名称へ変換(data.getKind(),"1.教育機関, 2.施設団体(政令指定), 3.施設団体(非政令指定), 9.個人, 999.運営管理"), + (data.getName()), + (data.getAdminname()), + yyyyMMddへ変換(data.getEntrydate()), + yyyyMMddへ変換(data.getJoindate()), + 名称へ変換(data.getStatus(),"0. 申請中(未処理),1. 承認済み(本登録待ち),2. 拒否済み,3. 本登録済み,"), + + }); + recodes.add(datas); + } + for (List recode: recodes) { + for (Object obj: recode) { + String str= ""; + if (obj!= null) { + str = obj.toString(); + } + csvBuilder.append(escapeCsv(str) + ","); + } + csvBuilder.append("\n"); + } + + /* CSVファイル名をセットしてレスポンス */ + String strCsvName = "ORG_" + String.valueOf(getTodayNumber()) + ".csv"; + responseCsv(csvBuilder, strCsvName); + } + }); + + form.add(new Button("btnCsvGrp"){ + @Override + public void onSubmit() { + StringBuilder csvBuilder = new StringBuilder(); + + csvBuilder.append("グループ情報\n"); + csvBuilder.append("出力日:" + new SimpleDateFormat("yyyy年MM月dd日 HH時:mm分").format(new Date()) + "\n"); + csvBuilder.append("\n"); + + List heads = Arrays.asList(new String[]{ + "グループID", + "名称", + "メンバー", + "メンバーの状態", + }); + for (String str: heads) { + csvBuilder.append(escapeCsv(str) + ","); + } + csvBuilder.append("\n"); + + List> recodes = new ArrayList>(); + for (Grp grp: grps) { + Grpusr cnd = new Grpusr(); + cnd.setGrpid(grp.getGrpid()); + boolean first = true; + for (Grpusr grpusr: grpusrDao.get(cnd)){ + Usr member = usrDao.getByUsrid(grpusr.getUsrid()); + String admin = ""; + if (grp.getAdminusrid().equals(member.getUsrid())) { + admin = "(グループ管理者)"; + } + List datas = Arrays.asList(new Object[]{ + first ? grp.getGrpid() : "", + first ?grp.getName() : "", + member.getUsrid() + "." + member.getName() + admin, + 名称へ変換(grpusr.getStatus(),"0.招待中,1.参加中,2.脱退,"), + }); + recodes.add(datas); + first = false; + } + } + for (List recode: recodes) { + for (Object obj: recode) { + String str= ""; + if (obj!= null) { + str = obj.toString(); + } + csvBuilder.append(escapeCsv(str) + ","); + } + csvBuilder.append("\n"); + } + + /* CSVファイル名をセットしてレスポンス */ + String strCsvName = "GRP_" + String.valueOf(getTodayNumber()) + ".csv"; + responseCsv(csvBuilder, strCsvName); + } + }); + } + + + private String 名称へ変換(Integer i, String defs) { + List listDefs = Arrays.asList(defs.split(",")); + for (String def: listDefs) { + if (def.trim().isEmpty()) continue; + String key = def.split("\\.")[0].trim(); + String value = def.split("\\.")[1].trim(); + if (key.equals(i.toString())) { + return value; + } + } + AppLogger.error("!!! 値が不正です !!!(" + i + ")"); + return "!!! 値が不正です !!!(" + i + ")"; + } + + private String yyyyMMddへ変換(Long l) { + if (l == null) return ""; + return new SimpleDateFormat("yyyy/MM/dd").format(AppUtils.toDate(l)); + } + + private String 組織名へ変換(Integer orgid, List orgs) { + for (Org org: orgs) { + if (org.getOrgid().equals(orgid)) { + return "(" + orgid + ")"+org.getName(); + } + } + + Org deletedOrg = orgDao.getByOrgid(orgid, true); + if (deletedOrg != null) { + return "(" + orgid + ")" + deletedOrg.getNameOrAdminname() + "(削除済み)"; + } + + AppLogger.error("!!! 組織情報が引き当てられませんでした !!!" + orgid); + return "!!! 組織情報が引き当てられませんでした !!!" + orgid; + } + + /** + * + * システム日付(yyyymmdd)を数値で返す + * + * @return システム日付(8桁数値) + */ + private static int getTodayNumber(){ + + Calendar cal; + int intToday = 0; + + cal = Calendar.getInstance(); + + /* 年を取得 */ + int y = cal.get(Calendar.YEAR) * 10000; + + /* 月を取得(0~11で返ってくるため+1する) */ + int m = (cal.get(Calendar.MONTH) + 1) * 100; + + /* 日を取得 */ + int d = cal.get(Calendar.DATE); + + /* 日付yyyymmddを取得 */ + intToday = y + m + d; + + return intToday; + } + private String escapeCsv(String value) { + return StringEscapeUtils.escapeCsv(value); + } + + private void responseCsv(StringBuilder csvBuilder, String strCsvName) { + /* 作成したCSVデータを配信するためのリソースストリームを生成 */ + StringResourceStream stream = new StringResourceStream(csvBuilder.toString(), "application/octet-stream"); + stream.setCharset(Charset.forName("Shift_JIS")); + /* ターゲットをResourceStreamRequestTargetに差し替える */ + getRequestCycle().scheduleRequestHandlerAfterCurrent(new ResourceStreamRequestHandler(stream, strCsvName)); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupListPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupListPage.html new file mode 100644 index 0000000..0fff569 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupListPage.html @@ -0,0 +1,113 @@ + + + + + + + + + + + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る + +
フィードバックメッセージ
+ + + +
+

完了メッセージ

+ +

管理グループ一覧

+
+

グループ作成

+ 名称: + +
+ + + + + + + + + + + + + + + +
グループ名称作成日参加人数管理者 
グループ名2015/3/285管理者 + メンバーリストへ + +
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+ +

参加グループ一覧

+
+
+ + + + + + + + + + + + + + + + + +
グループ名称メンバー数管理者参加日状態 
グループ名5管理者2015/3/28参加済み + + + + + +
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupListPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupListPage.java new file mode 100644 index 0000000..87fa2ca --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupListPage.java @@ -0,0 +1,523 @@ +package jp.co.y_net.amm.page; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Grp; +import jp.co.y_net.amm.dao.Grpusr; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.PageableListView; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class GroupListPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + /* グループ作成.名称 */ + private String groupnameValue = ""; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + return true; + } + return false; + } + + public GroupListPage(PageParameters pageParams) { + + /* 共通戻るリンクの設置 */ + createCommonBackLinks(); + + /* フィードバックメッセージ */ + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + + /* 入力フォーム */ + Form form = new Form("form"); + add(form); + + /* 初期表示エラーチェック・共通変数設定 --------------------------------------------------------------------- */ + + /* + * 機能制御 + */ + if (ResourceReader.getBooleanQuick("enable.grouplist") == false) { + form.setVisible(false); + error("現在この機能はご利用いただけません。"); + } + + + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; + } + final Integer loginUserId = loginUser.getUsrid(); + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + /* 完了メッセージ */ + Model resultMessageModel = new Model() { +// @Override +// public String getObject() { +// if(complete) { +// return ""; +// } +// return ""; +// } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + resutlMessage.setOutputMarkupId(true); + form.add(resutlMessage); + + /* -----------------------------------------------------------------------------------------------------------*/ + + /* + * listA = 管理グループ一覧のモデル + * リクエストごとにloadが実行される + */ + final IModel> listAModel = new LoadableDetachableModel>() { + /* */ + @Override + protected List load() { + + Grp cndGrp = new Grp(); + + if(Usr.KIND_運営管理者 == loginUser.getKind()) { + // 運営管理者は全て表示 + } else { + cndGrp.setAdminusrid(loginUserId); // 自分の管理しているグループに絞り込む + } + + List list = grpDao.get(cndGrp); + + /* 作成日の新しい順でソート*/ + Collections.sort(list, new Grp.CreatedateComparator(true)); + return list; + } + + }; + /* + * listB = 参加グループ一覧のモデル + * リクエストごとにloadが実行される + */ + final IModel> listBModel = new LoadableDetachableModel>() { + @Override + protected List load() { + Grpusr cndGrpusr = new Grpusr(); + cndGrpusr.setUsrid(loginUserId); + List list = grpusrDao.get(cndGrpusr); + + /* + *・自分が管理者のグループは除外する + *・脱退者は除外する + */ + List tmp = new ArrayList(); + for(Grpusr gu: list) { + Grp g = grpDao.getByGrpid(gu.getGrpid()); + if(g == null) { + // 追加しない + } else if(g.getAdminusrid().equals(loginUserId)) { + // 追加しない + } else if(Grpusr.STATUS_脱退.equals(gu.getStatus())) { + // 追加しない + } else { + tmp.add(gu); + } + + } + list = tmp; + + /* 参加日の新しい順でソート*/ + Collections.sort(list, new Grpusr.JoindateComparator(true)); + return list; + } + }; + + + /* コンテナの設定 ------------------------------------------------------------------------------------------------*/ + /* + * 画面の部分更新の対象となるコンテナ + *  ページをインスタンス化するときに初期非表示としてはいけない。 + */ + + /* 管理グループ一覧 */ + final WebMarkupContainer listAContainer = new WebMarkupContainer("listAContainer"); + listAContainer.setOutputMarkupId(true); + form.add(listAContainer); + + final WebMarkupContainer listAContainerData = new WebMarkupContainer("listAContainerData"){ + @Override + public boolean isVisible() { + return listAModel.getObject().isEmpty() == false; + } + }; + listAContainerData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする + listAContainer.add(listAContainerData); + + final WebMarkupContainer listAContainerNoData = new WebMarkupContainer("listAContainerNoData"){ + @Override + public boolean isVisible() { + return listAModel.getObject().isEmpty(); + } + }; + listAContainerNoData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする + listAContainer.add(listAContainerNoData); + + /* 参加グループ一覧 */ + final WebMarkupContainer listBContainer = new WebMarkupContainer("listBContainer"); + listBContainer.setOutputMarkupId(true); + form.add(listBContainer); + + final WebMarkupContainer listBContainerData = new WebMarkupContainer("listBContainerData"){ + @Override + public boolean isVisible() { + return listBModel.getObject().isEmpty() == false; + } + }; + listBContainerData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする + listBContainer.add(listBContainerData); + + final WebMarkupContainer listBContainerNoData = new WebMarkupContainer("listBContainerNoData"){ + @Override + public boolean isVisible() { + return listBModel.getObject().isEmpty(); + } + }; + listBContainerNoData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする + listBContainer.add(listBContainerNoData); + + /* 一覧の設定 ------------------------------------------------------------------------------------------------*/ + + + /*listA = 管理グループ一覧 ------------------------------------------------------------------- */ + final PageableListView listA = new PageableListView("listA", listAModel, 5) { + private static final long serialVersionUID = 1L; + @Override + protected void populateItem(ListItem item) { + + final Grp grp = item.getModelObject(); + + item.add(new Label("groupname", grp.getName())); // グループ名 + item.add(new Label("createdate" , AppUtils.toStrYyyyMMdd(grp.getCreatedate()))); // 作成日 + item.add(new Label("membercount" , grpusrDao.getMembercount参加中AsString(grp.getGrpid()))); // 参加人数 + + String adminname = usrDao.getByUsrid(grp.getAdminusrid()).getName(); + item.add(new Label("leadername" , adminname)); // 管理者 + + /* 「メンバーリストへ」*/ + PageParameters param = new PageParameters(); + param.add("grpid", grp.getGrpid()); + item.add(new BookmarkablePageLink("goMemberlist", GroupMemberListPage.class, param)); + + /* グループ削除 ボタン */ + item.add(new ConfirmAjaxButton("buttonDelete"){ + + @Override + protected String getConfirmMessage() { + return "すべてのメンバーを脱退させ、グループを削除します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpDao.removeLogical(grp, loginUserId); // 【論理削除】 + + // 紐づくメンバーも削除 + Grpusr members = new Grpusr(); + members.setGrpid(grp.getGrpid()); + for(Grpusr member: grpusrDao.get(members)) { + member.set脱退設定(); + grpusrDao.update(member, loginUserId); + } + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* メッセージ表示 */ + feedbackPanel.info(grp.getName() + " のすべてのメンバーを脱退させ、グループを削除しました。"); +// /* LoadableDetachableModel#load を再実行させるためのデタッチ */ +// listAModel.detach(); + + target.add(listAContainer); + } + }); + } + }; + listAContainerData.add(listA); + + /* ページングの部品 */ + final AjaxPagingNavigator pagingListA = new AjaxPagingNavigator("pagingListA", listA){}; + listAContainerData.add(pagingListA); + + + /* グループ作成.名称 */ + TextField inputgroupname = new TextField("inputgroupname", new PropertyModel(this, "groupnameValue")); + listAContainer.add(inputgroupname); + + /* グループを作成する ボタン */ + listAContainer.add(new ConfirmAjaxButton("buttonCreateGroup"){ + @Override + protected String getConfirmMessage() { + return "グループを作成します。"; + } + @Override + boolean executeBefore() { + /* 入力値変換 */ + groupnameValue = AppStringUtils.trim(groupnameValue); + /* 入力値検査 */ + validItem(groupnameValue, "グループ名", 1, 512); + if(hasInputError()) return false; // ここまででエラーチェック + return true; + } + @Override + void executableWork() { + /* データ更新 */ + Grp group = new Grp(); + group.setName(groupnameValue); + group.setAdminusrid(loginUser.getUsrid()); + group.setCreatedate(AppUtils.createNowLong()); + grpDao.add(group, loginUserId); // 【データ更新】 + + Grpusr member = new Grpusr(); + member.setGrpid(group.getGrpid()); + member.setUsrid(loginUser.getUsrid()); + member.setJoindate(AppUtils.createNowLong()); + member.setAdmindate(AppUtils.createNowLong()); + member.setStatus(Grpusr.STATUS_参加中); + grpusrDao.add(member, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* メッセージ表示 */ + feedbackPanel.info("グループ「" + groupnameValue + "」を作成しました。"); + + /* 入力項目初期化 */ + groupnameValue = ""; + + /* 画面部品の更新 */ + target.add(listAContainer); // 管理グループ一覧領域 + } + }); + + + /*listB = 参加グループ一覧 ------------------------------------------------------------------- */ + + final PageableListView listB = new PageableListView("listB", listBModel, 20) { + private static final long serialVersionUID = 1L; + @Override + protected void populateItem(ListItem item) { + + final Grpusr grpusr = item.getModelObject(); + final Grp grp = grpDao.getByGrpid(grpusr.getGrpid()); + + final String groupname = grp.getName(); + + item.add(new Label("groupname", groupname)); // グループ名 + item.add(new Label("membercount" , grpusrDao.getMembercount参加中AsString(grp.getGrpid()))); // 参加人数 + + String adminname = usrDao.getByUsrid(grp.getAdminusrid()).getName(); + item.add(new Label("leadername" , adminname)); // 管理者 + + + Date joindate = AppUtils.toDate(grpusr.getJoindate()); + String joindateStr = ""; + if(joindate != null) { + joindateStr = AppUtils.toStrYyyyMMdd(joindate); + } + item.add(new Label("joindate" , joindateStr)); // 参加日 + item.add(new Label("status" , grpusr.getStatus合算())); // 状態 + + + /* 参加する ボタン */ + item.add(new ConfirmAjaxButton("buttonJoin"){ + @Override + protected String getConfirmMessage() { + return "グループ「" + groupname + "」に参加します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusr.setJoindate(AppUtils.createNowLong()); // 参加日時 + grpusr.setStatus(Grpusr.STATUS_参加中); + grpusrDao.update(grpusr, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* メッセージ表示 */ + feedbackPanel.info("グループ「" + groupname + "」に参加しました。"); + + /* 画面部品の更新 */ + target.add(listBContainer); // 参加グループ一覧領域 + } + @Override + public boolean isVisible() { + /* 招待中状態で無ければ非表示 */ + if(Grpusr.STATUS_招待中.equals(grpusr.getStatus()) == false) return false; + + return true; + } + }); + /* 参加しない ボタン */ + item.add(new ConfirmAjaxButton("buttonReject"){ + @Override + protected String getConfirmMessage() { + return "グループ「" + groupname + "」への参加を辞退します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusrDao.removeLogical(grpusr, loginUserId); // 【論理削除】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* メッセージ表示 */ + feedbackPanel.info("グループ「" + groupname + "」への参加を辞退しました。"); + + /* 画面部品の更新 */ + target.add(listBContainer); // 参加グループ一覧領域 + } + @Override + public boolean isVisible() { + /* 招待中状態で無ければ非表示 */ + if(Grpusr.STATUS_招待中.equals(grpusr.getStatus()) == false) return false; + + return true; + } + }); + /* 脱退する ボタン */ + item.add(new ConfirmAjaxButton("buttonLeave"){ + @Override + protected String getConfirmMessage() { + return "グループ「" + groupname + "」から脱退します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusr.set脱退設定(); + grpusrDao.update(grpusr, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* メッセージ表示 */ + feedbackPanel.info("グループ「" + groupname + "」から脱退しました。"); + + /* 画面部品の更新 */ + target.add(listBContainer); // 参加グループ一覧領域 + } + @Override + public boolean isVisible() { + if (Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false; + return true; + } + }); + + /* 承諾する ボタン */ + item.add(new ConfirmAjaxButton("buttonAdminAccept"){ + @Override + protected String getConfirmMessage() { + return "グループ「" + groupname + "」の管理者を承諾します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusr.setAdmindate(AppUtils.createNowLong()); // 管理者就任日時 + grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_移管完了); + grpusrDao.update(grpusr, loginUserId); // 【データ更新】 + + grp.setAdminusrid(loginUser.getUsrid()); + grpDao.update(grp, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* メッセージ表示 */ + feedbackPanel.info("グループ「" + groupname + "」の管理者を承諾しました。"); + + /* 画面部品の更新 */ + target.add(listAContainer); // 管理グループ一覧領域 + target.add(listBContainer); // 参加グループ一覧領域 + } + @Override + public boolean isVisible() { + /* 移管依頼中でなければ表示しない */ + if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin()) == false) return false; + return true; + } + }); + /* 承諾しない ボタン */ + item.add(new ConfirmAjaxButton("buttonAdminReject"){ + @Override + protected String getConfirmMessage() { + return "グループ「" + groupname + "」の管理者を辞退します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_未設定); + grpusrDao.update(grpusr, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* メッセージ表示 */ + feedbackPanel.info("グループ「" + groupname + "」の管理者を辞退しました。"); + + /* 画面部品の更新 */ + target.add(listBContainer); // 参加グループ一覧領域 + } + @Override + public boolean isVisible() { + /* 移管依頼中でなければ表示しない */ + if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin()) == false) return false; + return true; + } + }); + } + }; + listBContainerData.add(listB); + + /* ページングの部品 */ + final AjaxPagingNavigator pagingListB = new AjaxPagingNavigator("pagingListB", listB){}; + listBContainerData.add(pagingListB); + + } + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupMemberListPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupMemberListPage.html new file mode 100644 index 0000000..bb8aa32 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupMemberListPage.html @@ -0,0 +1,86 @@ + + + + + + + + + + + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +
+

完了メッセージ

+ +

{グループ名}の参加者

+ + + + + + + + + + + + + +
メールアドレス
メールアドレス確認
+ +
+ +
+ + + + + + + + + + + + + +
メンバーの名前参加日状態 
メンバーの名前2015/3/28参加済み + + + + + このグループの管理者です +
+
<前へ 次へ>
+
+
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupMemberListPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupMemberListPage.java new file mode 100644 index 0000000..b60ecba --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/GroupMemberListPage.java @@ -0,0 +1,421 @@ +package jp.co.y_net.amm.page; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.dao.Grp; +import jp.co.y_net.amm.dao.Grpusr; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.PageableListView; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class GroupMemberListPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + // TODO 運営管理者向け制御 + + /* + * 画面入力値 + */ + public String usrmailValue; + public String usrmail2Value; + + /* + * 画面の状態 + */ + private boolean complete = true; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + return true; + } + return false; + } + + public GroupMemberListPage(PageParameters pageParams) { + + /* 共通戻るリンクの設置 */ + createCommonBackLinks(); + + /* フィードバックメッセージ */ + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + + /* 入力フォーム */ + Form form = new Form("form"); + add(form); + + /* 初期表示エラーチェック・共通変数設定 --------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + +// final Usr loginUser = AppSession.get().getLoginUser(); + + final Integer paramGrpid; + String paramGrpidStr = pageParams.get("grpid").toString(); + if(paramGrpidStr == null) { + error("パラメータ grpid が指定されていません。"); + return; + } else { + try { + paramGrpid = Integer.parseInt(paramGrpidStr); + } catch (NumberFormatException e) { + error("パラメータ grpid が不正です。"); + return; + } + } + final Grp targetGroup = grpDao.getByGrpid(paramGrpid); + if(targetGroup == null) { + error("パラメータ grpid に該当するデータがありません。"); + return; + } + final Integer targetGroupAdminid = targetGroup.getAdminusrid(); + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; + } + final Integer loginUserId = loginUser.getUsrid(); + + if(Usr.KIND_運営管理者 == loginUser.getKind()) { + // 運営管理者は全てのグループを表示できる + } else { + if(loginUserId.equals(targetGroup.getAdminusrid()) == false) { + error("このグループの管理者ではありません。"); + return; + } + } + + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(complete) { + return ""; + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + resutlMessage.setOutputMarkupId(true); + form.add(resutlMessage); + /* ----------------------------------------------------------------------------------------------------------*/ + /* 一覧のモデルの設定 */ + + final IModel> listModel = new LoadableDetachableModel>() { + /* LoadableDetachableModel#load は リクエストごと、最初に実行される */ + @Override + protected List load() { + + Grpusr cnd = new Grpusr(); + cnd.setGrpid(paramGrpid); + List list = grpusrDao.get(cnd); + /* + *・脱退者は除外する + */ + List tmp = new ArrayList(); + for(Grpusr gu: list) { + if(Grpusr.STATUS_脱退.equals(gu.getStatus())) { + // 追加しない + } else { + tmp.add(gu); + } + } + list = tmp; + /* 参加日の新しい順でソート*/ + Collections.sort(list, new Grpusr.JoindateComparator(true)); + return list; + } + }; + + /*グループ名*/ + Label groupname = new Label("groupname", targetGroup.getName()); + form.add(groupname); + + /* コンテナの設定 ------ -------------------------------------------------------------------------------------*/ + /* + * 画面の部分更新の対象となるコンテナ + */ + + /* メンバー一覧 */ + final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer"); + listContainer.setOutputMarkupId(true); + listContainer.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする + form.add(listContainer); + + /* 招待欄の設定 ---------------------------------------------------------------------------------------------*/ + + TextField usrmail = new TextField("usrmail", new PropertyModel(this, "usrmailValue")); + form.add(usrmail); + TextField usrmail2 = new TextField("usrmail2", new PropertyModel(this, "usrmail2Value")); + form.add(usrmail2); + + + Button btnSubmit = new ConfirmAjaxButton("btnSubmit"){ + @Override + boolean executeBefore() { + /* 入力値変換 */ + usrmailValue = AppStringUtils.trimHalf(usrmailValue); + usrmail2Value = AppStringUtils.trimHalf(usrmail2Value); + + /* 入力値検査 */ + if(usrmailValue.equals(usrmail2Value) == false) { + error("メールアドレスが一致しません。"); + } + if(hasInputError()) return false; // ここまででエラーチェック + + Usr usr = usrDao.getByLoginid(usrmailValue); + if(usr == null) { + error("メールアドレスが登録されていません。"); + } else { + if(usr.getStatus() == Usr.STATUS_退会) { + error("メールアドレスが無効です。"); + } + } + if(hasInputError()) return false; // ここまででエラーチェック + + + Grpusr newMember = new Grpusr(); + newMember.setGrpid(paramGrpid); + newMember.setUsrid(usr.getUsrid()); + List exists = grpusrDao.get(newMember); + if(exists.isEmpty() == false) { + for(Grpusr gu: exists) { + if(Grpusr.STATUS_参加中.equals(gu.getStatus())) { + error("すでに参加しています。"); + return false; + } + if(Grpusr.STATUS_招待中.equals(gu.getStatus())) { + error("すでに招待中です。"); + return false; + } + } + } + + return true; + } + @Override + protected String getConfirmMessage() { + return "ユーザを招待します。"; + } + @Override + void executableWork() { + /* データアクセス メンバー招待 + * 過去に参加してればUpdateとする + */ + Usr usr = usrDao.getByLoginid(usrmailValue); + Grpusr newMember = new Grpusr(); + newMember.setGrpid(paramGrpid); + newMember.setUsrid(usr.getUsrid()); + List exists = grpusrDao.get(newMember); + if(exists.isEmpty() == false) { + newMember = exists.get(0); + } + newMember.setInvitationdate(AppUtils.createNowLong()); + newMember.setStatus(Grpusr.STATUS_招待中); + if(exists.isEmpty()) { + grpusrDao.add(newMember, loginUserId); // 更新処理 + } else { + grpusrDao.update(newMember, loginUserId); // 更新処理 + } + } + @Override + void executeAfter(AjaxRequestTarget target) { + Usr usr = usrDao.getByLoginid(usrmailValue); + feedbackPanel.info(usr.getName() + "さんを招待しました。"); + + /* 入力項目初期化 */ + usrmailValue = ""; + usrmail2Value = ""; + + /* 画面部品の更新 */ + target.add(listContainer); // 一覧領域 + } + }; + form.add(btnSubmit); + + /* 一覧の繰り返し処理 --------------------------------------------------------------------------------------*/ + final PageableListView list = new PageableListView("list", listModel, 20) { + private static final long serialVersionUID = 1L; + @Override + protected void populateItem(ListItem item) { + + final Grpusr grpusr = item.getModelObject(); + final Usr member = usrDao.getByUsrid(grpusr.getUsrid()); + + final String memberName = member.getName(); + + item.add(new Label("name", memberName)); // メンバーの名前 + + item.add(new Label("joindate" , AppUtils.toStrYyyyMMdd(grpusr.getJoindate()))); // 参加日 + + item.add(new Label("status" , grpusr.getStatus合算())); // 状態 + + item.add(new Label("isAdmin", "このグループの管理者です。"){ + @Override + public boolean isVisible() { + return member.getUsrid().equals(targetGroup.getAdminusrid()); + } + + }); + + /* 招待取消 ボタン */ + item.add(new ConfirmAjaxButton("buttonReject"){ + @Override + protected String getConfirmMessage() { + return memberName + "さんへの招待を取消します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusrDao.removeLogical(grpusr, loginUserId); // 【論理削除】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + /* メッセージ表示 */ + feedbackPanel.info(memberName + "さんへの招待を取消しました。"); + /* 画面部品の更新 */ + target.add(listContainer); // 一覧領域 + } + @Override + public boolean isVisible() { + /* グループ管理者か、運営管理者でなければ非表示 */ + if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false; + /* 招待状態でなければ非表示 */ + if(Grpusr.STATUS_招待中.equals(grpusr.getStatus()) == false) return false; + return true; + } + }); + + /* 脱退させる ボタン */ + item.add(new ConfirmAjaxButton("buttonLeave"){ + @Override + protected String getConfirmMessage() { + return memberName + "さんを脱退させます。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusr.set脱退設定(); + grpusrDao.update(grpusr, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + /* メッセージ表示 */ + feedbackPanel.info(memberName + "さんを脱退させました。"); + /* 画面部品の更新 */ + target.add(listContainer); // 一覧領域 + } + @Override + public boolean isVisible() { + /* グループ管理者か、運営管理者でなければ非表示 */ + if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false; + /* 自分自身のデータの場合は非表示 */ + if(member.getUsrid().equals(loginUser.getUsrid())) return false; + /* 参加状態でなければ非表示 */ + if(Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false; + return true; + } + }); + /* 管理者依頼 ボタン */ + item.add(new ConfirmAjaxButton("buttonAdmin"){ + @Override + protected String getConfirmMessage() { + return memberName + "さんに管理者を依頼します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_移管依頼中); + grpusrDao.update(grpusr, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + /* メッセージ表示 */ + feedbackPanel.info(memberName + "さんに管理者を依頼しました。"); + /* 画面部品の更新 */ + target.add(listContainer); // 一覧領域 + } + @Override + public boolean isVisible() { + /* グループ管理者か、運営管理者でなければ非表示 */ + if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false; + /* 自分自身のデータの場合は非表示 */ + if(member.getUsrid().equals(loginUser.getUsrid())) return false; + /* 参加状態でなければ非表示 */ + if(Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false; + /* 移管依頼中の場合は非表示 */ + if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin())) return false; + return true; + } + }); + /* 管理者依頼取消 ボタン */ + item.add(new ConfirmAjaxButton("buttonAdminReject"){ + @Override + protected String getConfirmMessage() { + return memberName + "さんへの管理者依頼を取消します。"; + } + @Override + void executableWork() { + /* データ操作 */ + grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_未設定); + grpusrDao.update(grpusr, loginUserId); // 【データ更新】 + } + @Override + void executeAfter(AjaxRequestTarget target) { + /* メッセージ表示 */ + feedbackPanel.info(memberName + "さんへの管理者依頼を取消しました。"); + /* 画面部品の更新 */ + target.add(listContainer); // 一覧領域 + } + @Override + public boolean isVisible() { + /* グループ管理者か運営管理者でなければ非表示 */ + if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false; + /* 自分自身のデータの場合は非表示 */ + if(member.getUsrid().equals(loginUser.getUsrid())) return false; + /* 参加状態でなければ非表示 */ + if(Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false; + /* 移管依頼中でなければ非表示 */ + if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin()) == false) return false; + return true; + } + }); + } + }; + listContainer.add(list); + + /* ページングの部品 */ + final AjaxPagingNavigator pagingList = new AjaxPagingNavigator("pagingList", list){}; + listContainer.add(pagingList); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoEntryPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoEntryPage.html new file mode 100644 index 0000000..afa5869 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoEntryPage.html @@ -0,0 +1,74 @@ + + + + + + + + + + + お知らせ作成 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+

登録しました。

+
+タイトル +
+
+
+ +あとn文字入力できます。 + + + + +
+ +
+
+ プレビュー +
+
+
+
+ +
+ + + + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoEntryPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoEntryPage.java new file mode 100644 index 0000000..15d7a5f --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoEntryPage.java @@ -0,0 +1,232 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.InfoRenderer; +import jp.co.y_net.amm.dao.Inf; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextArea; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class InfoEntryPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + private String infotitleValue; + private String infobodyValue; + + /* + * 画面の状態 + */ + private boolean complete = false; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + } + return false; + } + + public InfoEntryPage(PageParameters params) { + + /* 共通戻るリンクの設置 */ + createCommonBackLinks(); + + /* 画面固有の戻るボタンの設置 */ + createBackLink(InfoListPage.class, "お知らせ管理"); + + /* フィードバックパネルの設置 */ + createFeedbackPanel(); + + /* 入力フォーム */ + Form form = new Form("form"); + add(form); + + /* お知らせ編集の時はパラメータが指定されるのでチェック */ + String paramInfid = params.get("infid").toString(""); + final Inf targetInf; + if(StringUtils.isEmpty(paramInfid)) { + targetInf = null; + } else { + Integer targetInfid = AppUtils.toInteger(paramInfid); + targetInf = infDao.getByInfid(targetInfid); + } + if(targetInf != null) { + infotitleValue = targetInf.getTitle(); + infobodyValue = targetInf.getBody(); + } + + + /* 初期表示エラーチェック・共通変数設定 --------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; + } + final Integer loginUserId = loginUser.getUsrid(); + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(complete) { + return "登録しました。"; + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + form.add(resutlMessage); + + /* コンテナの設定 ----------------------------------------------------------------------------------*/ + final WebMarkupContainer cntPreview = new WebMarkupContainer("cntPreview"); + cntPreview.setOutputMarkupId(true); + form.add(cntPreview); + + /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/ + + final TextField infotitle = new TextField("infotitle", new PropertyModel(this, "infotitleValue")); + form.add(infotitle); + + final TextArea infobody = new TextArea("infobody", new PropertyModel(this, "infobodyValue")); + infobody.setEscapeModelStrings(false); + form.add(infobody); + + /* 表示項目の設定 ----------------------------------------------------------------------------------*/ + + Model modelPreview = new Model() { + @Override + public String getObject() { + Inf previewInf = new Inf(); + previewInf.setTitle(infotitle.getValue()); + previewInf.setBody(infobody.getValue()); + if(targetInf != null) { + previewInf.setPubdate(targetInf.getPubdate()); + } + return InfoRenderer.execute(previewInf); + } + }; + final Label preview = new Label("preview", modelPreview) {}; + preview.setVisible(false); // 初期 非表示 + preview.setEscapeModelStrings(false); + cntPreview.add(preview); + + final Label wordcount = new Label("wordcount", new Model(){ + @Override + public String getObject() { + String body = infobody.getValue(); + int bodyCount = body == null ? 0 :body.length(); + return "あと" + (Inf.DEFお知らせ本文の文字数 - bodyCount) + "文字入力できます。"; + } + + }); + wordcount.setOutputMarkupId(true); + form.add(wordcount); + + /* その他の振る舞い ------------------------------------------------------------------------------------------*/ + + /* 本文が入力されたら残り文字数をリアルタイムで再描画する */ + infobody.add(new AjaxFormComponentUpdatingBehavior("onKeyUp") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + target.add(wordcount); + } + }); + + + /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/ + Button btnRegist = new Button("btnRegist") { + @Override + public void onSubmit() { + + /* モデル(PropertyModel以外)から値取得 */ + // なし + + /* 入力値変換 */ + infotitleValue = AppStringUtils.trim(infotitleValue); + infobodyValue = AppStringUtils.trim(infobodyValue); + + /* 入力値検査 */ + validItem(infotitleValue, "タイトル", 1, 512); + validItem(infobodyValue, "本文", 1, Inf.DEFお知らせ本文の文字数); + + if(hasInputError()) return; // ここまででエラーチェック + + /* データアクセス */ + if(targetInf == null) { + /* 新規作成 */ + Inf item = new Inf(); + item.setTitle(infotitleValue); + item.setBody(infobodyValue); + item.setPubdate(AppUtils.createNowLong()); // 現在日時 + item.setStatus(Inf.STATUS_掲載中); + infDao.add(item, loginUserId); // データ更新 + } else { + + /* データ更新 */ + targetInf.setTitle(infotitleValue); + targetInf.setBody(infobodyValue); + infDao.update(targetInf, loginUserId); // データ更新 + } + + + /* 完了状態へ移行 */ + complete = true; + } + @Override + public boolean isVisible() { + if(complete == true) { + return false; + } + return true; + } + }; + form.add(btnRegist); + + AjaxButton btnPreview = new AjaxButton("btnPreview") { + private static final long serialVersionUID = 1L; + @Override + protected void onSubmit(AjaxRequestTarget target, Form form){ + preview.setVisible(true); + target.add(cntPreview); // プレビュー再描画 + } + @Override + protected void onError(AjaxRequestTarget target, Form form) { + /* エラーハンドリングなし */ + } + }; + form.add(btnPreview); + + + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoListPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoListPage.html new file mode 100644 index 0000000..94ea78e --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoListPage.html @@ -0,0 +1,64 @@ + + + + + + + + + + + お知らせ管理 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

お知らせ管理

+ +

新規お知らせ作成

+ +新規お知らせ作成 + +

現在表示されているお知らせ

+
+

削除しました。

+ + + + + + + + + + +
お知らせタイトル掲載日時 
+ お知らせのタイトルをクリックすると「お知らせ本文ページ」へ遷移します + 2015/3/31 14:23
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoListPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoListPage.java new file mode 100644 index 0000000..97906b9 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoListPage.java @@ -0,0 +1,181 @@ +package jp.co.y_net.amm.page; + +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Inf; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.link.Link; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.list.PageableListView; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class InfoListPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + // 無し + + /* + * 画面の状態 + */ + private boolean complete = false; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + } + return false; + } + + public InfoListPage() { + + /* 戻るリンク */ + add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin"))); + + /* 新規お知らせ作成リンク */ +// add(new BookmarkablePageLink("goInfoEntry", InfoEntryPage.class)); + /* 編集画面への遷移 */ + Link goInfoEntry = new Link("goInfoEntry"){ + @Override + public void onClick() { + PageParameters params = new PageParameters(); +// params.set("infid", inf.getInfid()); + InfoEntryPage infoEntryPage = new InfoEntryPage(params); + infoEntryPage.setReturnPage(getPage()); + setResponsePage(infoEntryPage); + } + }; + add(goInfoEntry); + + /* フィードバックメッセージ */ + add(new FeedbackPanel("feedback")); + + /* 入力フォーム */ + Form form = new Form("form"); + add(form); + + /* 初期表示エラーチェック・共通変数設定 --------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; + } + final Integer loginUserId = loginUser.getUsrid(); + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(complete) { + return "削除しました。"; + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + form.add(resutlMessage); + + + /* 一覧の設定 ------------------------------------------------------------------------------------------------*/ + + /* お知らせ領域 */ + // LoadableDetachableModel は リクエストの最初に load にてデータを取得するモデル + final IModel> infModel = new LoadableDetachableModel>() { + @Override + protected List load() { + Inf cnd = new Inf(); + cnd.setStatus(Inf.STATUS_掲載中); + List list = infDao.get(cnd); + return list; + } + }; + final ListView listInfo = new PageableListView("listInfo", infModel, 20) { + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem item) { + final Inf inf = item.getModelObject(); + + WebMarkupContainer infoCont = new WebMarkupContainer("infoCont"); + item.add(infoCont); + + /* 編集画面への遷移 */ + Link link = new Link("link"){ + @Override + public void onClick() { + PageParameters params = new PageParameters(); + params.set("infid", inf.getInfid()); + InfoEntryPage infoEntryPage = new InfoEntryPage(params); + infoEntryPage.setReturnPage(getPage()); + setResponsePage(infoEntryPage); + } + }; + link.add(new Label("label", inf.getTitleFormat())); + infoCont.add(link); + + item.add(new Label("date", inf.getPubdate_Disp())); + + item.add(new Button("delete") { + @Override + public void onSubmit() { + inf.setStatus(Inf.STATUS_掲載終了); + infDao.update(inf, loginUserId); // 更新処理 + + /* 完了状態へ遷移 */ +// completeDel = true; 連続削除を考慮し、完了状態へ移行しない + + info("削除しました。"); + } + }); + } + }; + form.add(listInfo); + + } + +// private List readInfo() { +// List list = new ArrayList(); +// +// for (int i = 0; i < 3; i++) { +// Infomation info = new Infomation(); +// info.title = "ああああ" + i + "いいいいいうううううえええええおおおおおかかかかかかききききき"; +// info.date = new Date(); +// list.add(info); +// } +// return list; +// } + + // @Override + // protected boolean needLogin() { + // return false; + // } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoPage.html new file mode 100644 index 0000000..6278f96 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoPage.html @@ -0,0 +1,55 @@ + + + + + + + + + + + お知らせ + + + +
+
+ + +

+ + + +トップへ戻る + +
フィードバックメッセージ
+ +
+ +

ChattyInftyの講習の日程が決まりました。

+

2015/3/31

+

+ ChattyInftyの講習の日程が決まりました。
+ 日時:2015年8月18日 10:00~12:00
+ 場所:日本点字図書館 本館3階
+ 内容:(1)ChattyInftyOnlineとは
+    (2)マルチメディアデイジーを作ろう
+    (3)質疑応答
+

+
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoPage.java new file mode 100644 index 0000000..50f5e71 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/InfoPage.java @@ -0,0 +1,56 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.InfoRenderer; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Inf; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class InfoPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + // なし + + /* + * 画面の状態 + */ + // 初期表示のみ + //private boolean complete = false; + + public InfoPage(PageParameters params) { + + + /* トップへ戻る */ + add(new ExternalLink("lnkTop", ResourceReader.getStringQuick("url.back.top"))); + + /* フィードバックメッセージ */ + add(new FeedbackPanel("feedback")); + + /* お知らせ情報の出力 */ + Model infhtmlModel = new Model(); + add(new Label("infohtml", infhtmlModel).setEscapeModelStrings(false)); + + String paramInfid = params.get("infid").toString(""); + final Integer targetInfid; + if(StringUtils.isEmpty(paramInfid)) { + /* パラメータが指定されていなければ、ログインユーザの情報を対象とする */ + error("パラメータ usrid がありません。"); + return; // ----------中断 + } + targetInfid = AppUtils.toInteger(paramInfid); + Inf targetInf = infDao.getByInfid(targetInfid); + + infhtmlModel.setObject(InfoRenderer.execute(targetInf)); // htmlをセット + + + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/LoginPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/LoginPage.html new file mode 100644 index 0000000..327323a --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/LoginPage.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + Login + + + + + + + + +

ログイン

+
フィードバックメッセージ
+
+ + + + + + + + + + + + + + + + +
アカウント
パスワード + +
+
+ + +
+ +
+
+ + +
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/LoginPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/LoginPage.java new file mode 100644 index 0000000..6712ab2 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/LoginPage.java @@ -0,0 +1,242 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.service.Logincheck; +import jp.co.y_net.amm.service.Logincheck.LogincheckResult; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.HiddenField; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.Url; +import org.apache.wicket.request.Url.StringMode; +import org.apache.wicket.request.flow.RedirectToUrlException; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class LoginPage extends CommonFrameA { + + public LoginPage() { + this(new PageParameters()); + } + public LoginPage(PageParameters params) { + + /* トップへ戻る */ + add(new ExternalLink("lnkTop", ResourceReader.getStringQuick("url.back.top"))); + + /* フィードバックパネルの設置 */ + createFeedbackPanel(); + + final Model modelChallengestringA = Model.of(challengestring.execute()); + final HiddenField textChallenge = new HiddenField("textChallenge", modelChallengestringA); + final TextField textLoginId = new TextField("textLoginId", Model.of("")); + final HiddenField textChallengeResponse = new HiddenField("textChallengeResponse", Model.of("")); + + Button btnLogin = new Button("btnLogin"); + btnLogin.add(new AttributeModifier("onclick", "return eventLogin(true)")); + + Form form =new Form("form") { + @Override + public void onSubmit() { + /* ログイン処理 */ + String challengestringA = modelChallengestringA.getObject(); + String loginidB = textLoginId.getValue(); + String cresE = textChallengeResponse.getValue(); + + /* ------------------------ */ + + LogincheckResult logincheckResult = logincheck.executeFromAmm(loginidB, cresE, challengestringA); + + if(0 == logincheckResult.errorCode) { + /* 認証成功 */ + + /* + * すでに別のユーザでセッションが作成されているときの処理 + */ + if(existOtherSession(loginidB)) { + error("別のユーザでログイン中です。一度ログアウトしてください。"); + return; + } + + /* セッション開始 */ + startSession(loginidB); + + /* 画面遷移 */ + if(AppSession.get().returnPageClass != null) { + /* 呼び出し元が設定されている場合 */ + setResponsePage(AppSession.get().returnPageClass, AppSession.get().returnPageParameters); + + } else { + + /* 呼び出し元が設定されていない場合 */ + if(isMember()) { + throw new RedirectToUrlException(ResourceReader.getStringQuick("url.back.member")); + } + if(isOrgAdmin()) { + throw new RedirectToUrlException(ResourceReader.getStringQuick("url.back.orgadmin")); + } + if(isSystemAdmin()) { + throw new RedirectToUrlException(ResourceReader.getStringQuick("url.back.sysadmin")); + } + } + + } else { + + error(Logincheck.errorMessage.get(logincheckResult.errorCode)); + } + } + }; + add(form); + form.add(textChallenge); + form.add(textLoginId); + form.add(textChallengeResponse); + form.add(btnLogin); + + + /* + * パラメータにログインIDが含まれている場合の処理 + */ + String paramLoginid = params.get("loginid").toString(); + if (StringUtils.isEmpty(paramLoginid) == false) { + + /* 2015/10/02 引数にチャレンジレスポンスを追加 */ + Usr user = usrDao.getByLoginid(paramLoginid); + String paramCres = params.get("cres").toString(); + if (checkParam(user, paramCres)) { +// if (user != null && StringUtils.isEmpty(user.getCres()) == false) { +// if(user.getCresdate() > AppUtils.createNowLong()) { + + /* チャレンジレスポンスの有効期限以内のときはログイン認証を割愛してログインする */ + paramLoginid = AppUtils.urlDecode(paramLoginid); // URLデコード + + /* + * チャレンジレスポンスの破棄 + *  次のケースで無限ループとなるため。 + * 1. 権限管理されたページに権限の不足しているユーザがアクセス + * 2. Loginへ自動転送され、チャレンジレスポンスが有効なため、自動ログイン(「1.」へ戻る) + */ + user.setCres(null); + user.setCresdate(-1L); + usrDao.update(user, AppDef.USERID_NONE); // 【更新処理】 + + /* + * すでに別のユーザでセッションが作成されているときの処理 + */ + if(existOtherSession(paramLoginid)) { + error("別のユーザでログイン中です。一度ログアウトしてください。"); + return; + } + + /* セッション開始 */ + startSession(paramLoginid); + + /* 画面遷移 */ + if(AppSession.get().returnPageClass != null) { + /* 呼び出し元が設定されている場合 */ + throw new RestartResponseException( + AppSession.get().returnPageClass, AppSession.get().returnPageParameters); + } else { + /* 呼び出し元が設定されていない場合 */ + } +// } + } + } + } + + /** + * 識別パラメータの検証 + * ユーザ識別パラメータとは、 + *  ログイン後にアクセスできる画面を呼び出すときに必要なパラメータ。 + *  [UTF-8でURLエンコーディングされたログインID]と、 + *  ログイン認証時に使用した[チャレンジレスポンスの値]を使用する。 + *  例: ?loginid=user%40example.com&cres=374491d2deadaf228cd82b985d27e6af97d0518c2c1691be336a73035ad5eb9e + * + * @param user + * @param paramCres + * @return + */ + private boolean checkParam(Usr user, String paramCres) { + if(user == null) return false; + if(StringUtils.isEmpty(user.getCres())) return false; + if(StringUtils.isEmpty(paramCres)) return false; + + if(user.getCresdate() > AppUtils.createNowLong()) { + /* 有効期限内 */ + if(paramCres.equals(user.getCres())) { + return true; // チャレンジレスポンスが一致する + } else { + AppLogger.info("ユーザ識別パラメータが指定されましたが、チャレンジレスポンスの値が一致しませんでした。"); + return false; + } + } else { + /* 有効期限を過ぎている */ + return false; + } + } + /** + * ログイン認証後の処理 + * @param loginid + */ + private void startSession(String loginid) { + + /* セッションへ登録 */ + Usr usr = usrDao.getByLoginid(loginid); + AppSession.get().setLoginUser(usr); + + /* jsessionidの変更(セッション固定化攻撃対策)*/ + AppSession.get().replaceSession(); + + } + /** + * すでに別のユーザでセッションが作成されているときの処理 + * @param loginid + * @return + */ + private boolean existOtherSession(String loginid) { + boolean existOtherSession; + if(AppSession.get().isLogin()) { + LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser.getLoginid().equals(loginid) == false) { + existOtherSession = true; + } else { + existOtherSession = false; + } + } else { + existOtherSession = false; + } + return existOtherSession; + } + + /** + * コンストラクタ呼び出しが行われなくても処理対象となるメソッド + * 戻るボタンによる遷移でも呼び出される。 + * @see org.apache.wicket.Component#onConfigure() + */ + @Override + protected void onConfigure() { + /* + * URLの調整を行う。 + *  HTTPSでの接続が必要な時に、HTTPとして呼び出された場合には、URLを変更する。 + */ + if (ResourceReader.getBooleanQuick("use.ssl")) { + Url url = getRequestCycle().getRequest().getOriginalUrl(); + if("https".equalsIgnoreCase(url.getProtocol()) == false) { + url.setProtocol("https"); + throw new RedirectToUrlException(url.toString(StringMode.FULL)); + } + } + } + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberDetailPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberDetailPage.html new file mode 100644 index 0000000..4dd05fc --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberDetailPage.html @@ -0,0 +1,115 @@ + + + + + + + + + + 会員情報詳細 + + + +
+
+ + +

+ + + +3.2.9 会員情報編集画面 / 3.2.11.2 会員情報詳細画面 + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +

会員情報

+ +
+

完了メッセージ

+ +※ ・・・ 管理者、運営者のみ表示 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
所属○○○中学校
氏名
メールアドレス
メールアドレス確認用
(変更するときのみ入力)
新しいパスワード(※)
新しいパスワード確認用
(変更するときのみ入力)
状態2015/3/21 21:43
最終ログイン日 +2015/3/21 21:43
利用可能期間yyyy/MM/dd~yyyy/MM/dd
 
+ + + + ※ メールアドレスを変更するとパスワードがリセットされます。
+
+ + + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+ + +
+ + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberDetailPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberDetailPage.java new file mode 100644 index 0000000..69d6a15 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberDetailPage.java @@ -0,0 +1,508 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.CalcHash; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.CheckBox; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.PasswordTextField; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + + +/** + * @author k_inaba + */ +public class MemberDetailPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + public String nameValue; + public String mailValue; + public String mail2Value; + public String passwordValue; + public String password2Value; +// public String fromdateValue; +// public String todateValue; + public boolean stoploginValue; + + /* + * 画面の状態 + */ + private boolean completeMod = false; + private boolean completePwreset = false; + private boolean completeDel = false; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関管理者)) { + return true; + } + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関会員)) { + return true; + } + } + return false; + } + + + public MemberDetailPage(PageParameters pageParams) { + + /* 共通戻るリンクの設置 */ + createCommonBackLinks(); + + /* 画面固有の戻るボタンの設置 */ + createBackLink(MemberListPage.class, "会員管理"); + + /* フィードバックパネルの設置 */ + createFeedbackPanel(); + + + /* 入力フォーム */ + final Form form = new Form("form"); + form.setOutputMarkupId(true); + add(form); + + /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + + String paramUsrid = pageParams.get("usrid").toString(""); + final Integer targetUserid; + if(StringUtils.isEmpty(paramUsrid)) { + /* パラメータが指定されていなければ、ログインユーザの情報を対象とする */ + if (isMember() || isOrgAdmin() || isSystemAdmin()) { + targetUserid = AppSession.get().getLoginUser().getUsrid(); + } else { + error("パラメータ usrid がありません。"); + return; // ----------中断 + } + } else { + targetUserid = AppUtils.toInteger(paramUsrid); + } + final Usr targetUsr = usrDao.getByUsrid(targetUserid); + if(targetUsr == null) { + error("該当する利用者情報がありません。"); + return; // ----------中断 + + } + if(isSystemAdmin()) { + /* 機関管理者が他機関の情報にアクセスしてはいけない */ + LoginUser loginUser = AppSession.get().getLoginUser(); + if(AppUtils.equals(loginUser.getOrgid(), targetUsr.getOrgid()) == false && isSystemAdmin() == false) { + error("該当する情報を扱う権限がありません。"); + return; // ----------中断 + } + } + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; + } + final Integer loginUserId = loginUser.getUsrid(); + + + /* 組織の管理者は 登録情報編集画面を使用するため、会員詳細ページへリンクさせない */ + if(Usr.ROLE_管理者 == targetUsr.getOrgrole()) { + throw new RestartResponseException(OrgDetailPage.class); + } + + + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(completeMod) { + return "会員情報を変更しました。"; + } + if(completePwreset) { + return "パスワード登録用のメールを送りました。"; + } + if(completeDel) { + return "会員情報を削除しました。"; + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + form.add(resutlMessage); + + /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/ + + nameValue = targetUsr.getName(); + mailValue = targetUsr.getLoginid(); + stoploginValue = AppUtils.toBoolean(targetUsr.getStoplogin()); + + /* 名前 */ + TextField name = new TextField("name", new PropertyModel(this, "nameValue")); + form.add(name); + /* メールアドレス */ + TextField mail = new TextField("mail", new PropertyModel(this, "mailValue")); + form.add(mail); + /* メールアドレス確認用 */ + TextField mail2 = new TextField("mail2", new PropertyModel(this, "mail2Value")); + form.add(mail2); + + /* パスワード */ + final PasswordTextField password = new PasswordTextField("password", new PropertyModel(this, "passwordValue")){ + @Override + public boolean isVisible() { + /* ログインユーザ自身の情報でなければ画面から変更できない */ + return isLoginUser(targetUsr); + } + }; + password.setRequired(false); + form.add(password); + + /* パスワード確認用 */ + PasswordTextField password2 = new PasswordTextField("password2", new PropertyModel(this, "password2Value")){ + @Override + public boolean isVisible() { + /* ログインユーザ自身の情報でなければ画面から変更できない */ + return isLoginUser(targetUsr); + } + }; + password2.setRequired(false); + form.add(password2); + + /* 利用可能期間FROM~TO */ + Org 所属する組織 = orgDao.getByOrgid(targetUsr.getOrgid()); + String fromtodateStr = 所属する組織.getFromTodate_Disp(); + + Label fromtodate = new Label("fromtodate", Model.of(fromtodateStr)){ + @Override + public boolean isVisible() { + return StringUtils.isEmpty(getDefaultModelObjectAsString()) == false; + } + + }; + form.add(fromtodate); + + /* ログイン停止 */ + final Model stoploginModel = Model.of(stoploginValue); + CheckBox stoplogin = new CheckBox("stoplogin", stoploginModel){ + @Override + public boolean isVisible() { + /* 一般会員変更不可 */ + return isSystemAdmin() || isOrgAdmin(); + } + }; + form.add(stoplogin); + + /* 表示コンポーネントの設定 ----------------------------------------------------------------------------------*/ + + /* 所属機関 */ + final Org org = orgDao.getByOrgid(targetUsr.getOrgid()); + form.add(new Label("orgname", org.getName()){ + @Override + public boolean isVisible() { + if(org.isPersonalOrg()) { // 個人の場合は非表示 + return false; + } + return true; + } + }); + + /* 最終ログイン日時 */ + form.add(new Label("lastlogin" , targetUsr.getLastlogindate_Disp())); + + /* 状態 */ + form.add(new Label("status", targetUsr.getStatus_Disp())); + + + /* 上位者によるメールアドレス変更のメッセージ */ + form.add(new Label("msgpwreset", "※ メールアドレスを変更するとパスワードがリセットされます。") { + @Override + public boolean isVisible() { + /* パスワード欄から変更できない場合はパスワードリセット */ + return password.isVisible() == false; + } + }); + + + /* パスワード情報 */ + PasswordInfoPanel passwordInfoPanel = new PasswordInfoPanel("PasswordInfoPanel", + targetUsr, + isSystemAdmin()); + form.add(passwordInfoPanel); + + /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/ + + /* + * 【会員情報変更】 + */ + Button btnSubmitMod = new ConfirmAjaxButton("btnSubmitMod") { + @Override + String getConfirmMessage() { + return "更新します。"; + } + @Override + boolean executeBefore() { + /* 入力値変換 */ + nameValue = AppStringUtils.trim(nameValue); + mailValue = AppStringUtils.trimHalf(mailValue); + mail2Value = AppStringUtils.trimHalf(mail2Value); + passwordValue = AppStringUtils.trimHalf(passwordValue); + password2Value = AppStringUtils.trimHalf(password2Value); + if(isSystemAdmin() || isOrgAdmin()) { + stoploginValue = stoploginModel.getObject(); + } + boolean isメールアドレスが変更されている = (mailValue.equals(targetUsr.getLoginid()) == false); + boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false); + + /* 入力値検査 */ + validItem(nameValue, "氏名", 1, 512); + + if(isメールアドレスが変更されている){ + validItemMail(mailValue, "メールアドレス"); + validItemMail(mail2Value, "メールアドレス確認用"); + } + if (isパスワード欄が入力されている) { + validItemAscii(passwordValue, "パスワード", 8, 16); + validItemAscii(password2Value, "パスワード確認用", 8, 16); + } + + if(hasInputError()) return false; // ここまででエラーチェック + + if(isメールアドレスが変更されている){ + if(mailValue.equals(mail2Value) == false) { + error("メールアドレスが一致しません。"); + } + + if(mailAddressCheck.exist(mailValue)) { + error("このメールアドレスは既に使用されています。"); + } + } + if(isパスワード欄が入力されている) { + if(passwordValue.equals(password2Value) == false) { + error("パスワードが一致しません。"); + } + } + if(hasInputError()) return false; // ここまででエラーチェック + + /* + * パスワードの変更について + * メールアドレスが変更されている場合は、パスワードの変更が必須である。 + * パスワード欄が入力できるのは変更対象の情報が、ログインユーザ本人であるときのみ。 + * パスワード欄が入力できない場合(代表者や運営管理者による変更)は、パスワードリセットを実施する。 + */ +// boolean パスワードリセットが必要 = false; + if(isメールアドレスが変更されている) { + if(isLoginUser(targetUsr) ) { + /* 変更対象の情報が、ログインユーザ本人 */ + if(isパスワード欄が入力されている) { + // 正しい + } else { + error("メールアドレスを変更する場合は、パスワードも設定してください。"); + } + + } else if(isSystemAdmin() || isOrgAdmin()) { + /* パスワード欄が入力できない場合(代表者や運営管理者による変更) */ +// パスワードリセットが必要 = true; + } else { + /* 通常想定されない条件 */ + error("メールアドレスを変更することはできません。"); + } + } + + if(hasInputError()) return false; // ここまででエラーチェック + + return true; + } + + @Override + void executeAfter(AjaxRequestTarget target) { + /* データアクセス 代表者による会員情報変更 */ + + boolean isメールアドレスが変更されている = (mailValue.equals(targetUsr.getLoginid()) == false); + boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false); + + if(isメールアドレスが変更されている){ + targetUsr.setLoginid(mailValue); + } + if(isパスワード欄が入力されている) { + String pwhash = CalcHash.passowrdHash(passwordValue, targetUsr.getLoginid()); + targetUsr.setPwhash(pwhash); + targetUsr.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時 + } + + if(isメールアドレスが変更されている + && isパスワード欄が入力されている == false) { + /* 代表者や運営管理者によるメールアドレスだけの変更 */ + targetUsr.setPwhash(""); + targetUsr.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時 + } + + targetUsr.setName(nameValue); + if(stoploginValue) { + targetUsr.setStoplogin(AppDef.TRUE); + } else { + targetUsr.setStoplogin(AppDef.FLASE); + } + + usrDao.update(targetUsr, loginUserId); // 【更新処理】 + + + /* 本人以外がメールアドレスを変更していたらパスワードリセット */ + boolean パスワードリセットが必要 = false; + if(isメールアドレスが変更されている) { + if(isSystemAdmin() || isOrgAdmin()) { + /* パスワード欄が入力できない場合(代表者や運営管理者による変更) */ + パスワードリセットが必要 = true; + } + } + if(パスワードリセットが必要) { + doパスワードリセット(targetUserid, passwordTicketManager, mailValue); + } + + /* + * 状態遷移 + */ + completeMod = true; + + + /* TODO ログインユーザのメールアドレスかパスワードが変更されたら、自動ログアウトさせる */ + if(isパスワード欄が入力されている && isLoginUser(targetUsr)) { + /* APIログアウト相当の実施 */ + logout.execute(AppSession.get().getLoginUser().getLoginid()); + + /* セッション無効化 */ + AppSession session = (AppSession) getSession(); + session.invalidateNow(); + + // TODO 次のメッセージを出すことができない。 + error("パスワードが変更されたためログアウトしました。新たらしいパスワードでログインしてください。"); + + setResponsePage(LoginPage.class); + } + + /* 画面コンポーネントを更新する */ + target.add(form); + + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return completeMod == false && completePwreset == false && completeDel == false; + } + }; + form.add(btnSubmitMod); + + /* + * 【パスワードリセット】 + */ + Button btnSubmitPwreset = new ConfirmAjaxButton("btnSubmitPwreset") { + @Override + String getConfirmMessage() { + return "パスワードリセットします。"; + } + @Override + void executeAfter(AjaxRequestTarget target) { + + doパスワードリセット(targetUserid, passwordTicketManager, mailValue); + + + /* 完了状態へ遷移 */ + completePwreset = true; + + /* 画面コンポーネントを更新する */ + target.add(form); + } + + @Override + public boolean isVisible() { + /* パスワード変更欄が表示されていれば、パスワードリセットボタンは表示しない */ + if(password.isVisible()) { + return false; + } + + /* 完了後の状態ならボタンを表示しない */ + return completeMod == false && completePwreset == false && completeDel == false; + } + }; + form.add(btnSubmitPwreset); + + /* + * 【会員情報削除】 + */ + Button btnSubmitDel = new ConfirmAjaxButton("btnSubmitDel") { + @Override + String getConfirmMessage() { + return "削除します。"; + } + @Override + String getConfirmMessageStrong() { + return "本当によろしいですか?"; + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* データアクセス 機関管理者による会員情報削除 */ + targetUsr.退会処理(); + usrDao.update(targetUsr, loginUserId); // 【更新処理】 + + /* 外部APIに退会者のログインIDを通知 */ + AppUtils.callDeleteNotice(targetUsr); + + /* 完了状態へ遷移 */ + completeDel = true; + + /* 画面コンポーネントを更新する */ + target.add(form); + } + @Override + public boolean isVisible() { + /* 運営管理者、代表者以外には表示しない */ + if(isSystemAdmin() == false && isOrgAdmin() == false) { + return false; + } + /* 自分自身の情報は削除できない */ + if(isLoginUser(targetUsr)) { + return false; + } + + /* 完了後の状態ならボタンを表示しない */ + return completeMod == false && completePwreset == false && completeDel == false; + } + }; + form.add(btnSubmitDel); + } + + + + + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberListPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberListPage.html new file mode 100644 index 0000000..3f24a18 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberListPage.html @@ -0,0 +1,104 @@ + + + + + + + + + + 会員管理 + + + +
+
+ + +

+ + + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+ +

○○中学校

+ +

追加

+
+

仮登録を行い、登録したメールアドレスへ会員追加メールを送りました。

+ + + + + + + + + + + + + + + + +
氏名
メールアドレス
メールアドレス確認
+ +
このユーザはシステム管理者の追加はできません。
+
+
+ +
+

会員

+ +
+ + + + + + + + + + + + + + + + + + + + + +
氏名メールアドレス状態最終ログイン日時
○○ 太郎abcdefg.taro@example.com登録済み2015/3/28 XX:XX
○○ 次郎abcdefg.jiro@example.com仮登録 
+
+
<前へ 次へ>
+
+ +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberListPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberListPage.java new file mode 100644 index 0000000..033bca6 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/MemberListPage.java @@ -0,0 +1,484 @@ +package jp.co.y_net.amm.page; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppSendMail; +import jp.co.y_net.amm.common.AppSendMail.MailSetting; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.link.Link; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.PageableListView; +import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +/** + * @author k_inaba + */ +public class MemberListPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + public String usrnameValue; + public String usrmailValue; + public String usrmail2Value; + + /* + * 画面の状態 + */ + private boolean complete = false; + + /* 編集対象の組織 */ + private Org targetOrg = null; + + + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関管理者)) { + return true; + } +// if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関会員)) { +// error("権限がありません。"); +// return false; +// } + } + return false; + } + + public MemberListPage(PageParameters pageParams) { + + /* 共通戻るリンクの設置 */ + createCommonBackLinks(); + + /* 画面固有の戻るボタンの設置 */ + createBackLink(OrgMemberListPage.class, "登録会員情報管理"); + + /* フィードバックパネルの設置 */ + createFeedbackPanel(); + + final Form form = new Form("form"); + add(form); + + Label h1msg = new Label("h1msg", ""); + form.add(h1msg); + + /* 見出し */ + form.add(new Label("h2msg", new Model(){ + @Override + public String getObject() { + if(mode運営管理者一覧() == false) { + return "追加"; + } else { + return "運営管理者の追加"; + } + } + })); + + + WebMarkupContainer contMemberList = new WebMarkupContainer("contMemberList"); + form.add(contMemberList); + + /* 見出し */ + contMemberList.add(new Label("h2msg", new Model(){ + @Override + public String getObject() { + if(mode運営管理者一覧() == false) { + return "会員"; + } else { + return "運営管理者"; + } + } + })); + + + /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + contMemberList.setVisible(false); + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; // ----------中断 + } + final Integer loginUserId = loginUser.getUsrid(); + + + /* + * 表示対象の決定 + * ・パラメータに orgid が設定されている場合は、該当する組織を対象とする。 + *   ただし、ログインユーザが 運営管理者か、その組織の代表者でなければいけない。 + * ・パラメータに orgid が設定されていない場合は、ログインユーザに紐づく組織を対象とする。 + */ + String paramOrgid = pageParams.get("orgid").toString(""); + Integer targetOrgid = null; + if(StringUtils.isEmpty(paramOrgid) == false) { + targetOrgid = AppUtils.toInteger(paramOrgid); + this.targetOrg = orgDao.getByOrgid(targetOrgid); + + if(this.targetOrg == null) { + error("組織情報が取得できません。 orgid=" + paramOrgid); + return; // ----------中断 + } + if(isSystemAdmin()) { + // OK + } else if(isOrgAdmin()) { + if (this.targetOrg.getOrgid().equals(loginUser.getOrgid())) { + // OK + } else { + error("該当する情報を扱う権限がありません。"); + return; // ----------中断 + } + } else { + error("該当する情報を扱う権限がありません。"); + return; // ----------中断 + } + } else { + targetOrgid = loginUser.getOrgid(); + this.targetOrg = orgDao.getByOrgid(targetOrgid); + } + + if(hasInputError()) return; // ----------エラーがあれば中止 + + /* 組織が「個人」であれば、組織情報編集ページへ遷移させる */ + if(Org.KIND_PERSONAL == this.targetOrg.getKind()) { + PageParameters param = new PageParameters(); + param.add("orgid", this.targetOrg.getOrgid()); + throw new RestartResponseException(OrgDetailPage.class, param); + } + + + form.setVisible(true); + contMemberList.setVisible(true); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + + h1msg.setDefaultModelObject("会員管理 「" +targetOrg.getName() + "」"); + + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(complete) { +// return "仮登録を行い、登録したメールアドレスへ会員追加メールを送りました。"; + /* 連続登録を想定し、infoメッセージとする。 */ + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + form.add(resutlMessage); + /* 出力コンポーネントの設定 ----------------------------------------------------------------------------------*/ + form.add(new Label("thLoginid", new Model(){ + @Override + public String getObject() { + if(mode運営管理者一覧() == false) { + return "メールアドレス"; + } else { + return "ログインID"; + } + } + })); + form.add(new Label("thLoginid2", new Model(){ + @Override + public String getObject() { + if(mode運営管理者一覧() == false) { + return "メールアドレス確認用"; + } else { + return "ログインID確認用"; + } + } + })); + + + /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/ + TextField usrname = new TextField("usrname", new PropertyModel(this, "usrnameValue")); + form.add(usrname); + TextField usrmail = new TextField("usrmail", new PropertyModel(this, "usrmailValue")); + form.add(usrmail); + TextField usrmail2 = new TextField("usrmail2", new PropertyModel(this, "usrmail2Value")); + form.add(usrmail2); + + /* 一覧の設定 */ + final WebMarkupContainer listViewContainer = new WebMarkupContainer("listViewContainer"); + contMemberList.add(listViewContainer); + listViewContainer.setOutputMarkupId(true); + + // LoadableDetachableModel は リクエストの最初に load にてデータを取得するモデル + final IModel> usrModel = new LoadableDetachableModel>() { + @Override + protected List load() { + Usr cnd = new Usr(); + cnd.setOrgid(targetOrg.getOrgid()); // 該当機関 + Usr cndNot = new Usr(); + cndNot.setStatus(Usr.STATUS_退会); + List list = usrDao.get(cnd, cndNot); + + /* 最終ログイン日の新しい順でソート*/ + Collections.sort(list, new Usr.LastlogindateComparator(true)); + + return list; + } + }; + final PageableListView listview = new PageableListView("listview", usrModel, 20) { + private static final long serialVersionUID = 1L; + @Override + protected void populateItem(ListItem item) { + + final Usr member = item.getModelObject(); + + /* 氏名リンク */ + final PageParameters param = new PageParameters(); + param.add("usrid", member.getUsrid()); + //BookmarkablePageLink lnkName = new BookmarkablePageLink("lnkName", MemberDetailPage.class, param); + Link lnkName = new Link("lnkName") { + @Override + public void onClick() { + MemberDetailPage nextPage = new MemberDetailPage(param); + nextPage.setReturnPage(getPage()); // このページを戻り先として記録する + setResponsePage(nextPage); + } + @Override + protected boolean isLinkEnabled() { + /* 組織の管理者は 登録情報編集画面を使用するため、会員詳細ページへリンクさせない */ + if(Usr.ROLE_管理者 == member.getOrgrole()) { + return false; + } + return super.isLinkEnabled(); + } + + }; + + Label lnklblName = new Label("lnklblName", member.getName_Disp()); + lnkName.add(lnklblName); + item.add(lnkName); + + /* メールアドレス */ + item.add(new Label("mail", member.getLoginid_Disp())); + + /* ステータス */ + item.add(new Label("status", member.getStatus_Disp())); + + /* 最終ログイン日時 */ + item.add(new Label("lastlogin" , member.getLastlogindate_Disp())); + } + }; + listViewContainer.add(listview); + + PagingNavigator navigator = new PagingNavigator("paging", listview){ + @Override + public boolean isVisible() { + return listview.size() > 0; + } + }; + contMemberList.add(navigator); + + /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/ + Button btnSubmit = new ConfirmAjaxButton("btnSubmit"){ + @Override + String getConfirmMessage() { + if(mode運営管理者一覧() == false) { + return "会員を追加します。"; + } else { + return "運営管理者を追加します。"; + } + } + @Override + boolean executeBefore() { + /* 入力値変換 */ + usrnameValue = AppStringUtils.trim(usrnameValue); + usrmailValue = AppStringUtils.trimHalf(usrmailValue); + usrmail2Value = AppStringUtils.trimHalf(usrmail2Value); + + /* 入力値検査 */ + validItem(usrnameValue, "氏名", 1, 512); + if(mode運営管理者一覧() == false) { + validItemMail(usrmailValue, "メールアドレス"); + validItemMail(usrmail2Value, "メールアドレス確認用"); + } else { + validItem(usrmailValue, "ログインID", 1, 256); + validItem(usrmail2Value, "ログインID確認用", 1, 256); + } + + if(hasInputError()) return false; // ここまででエラーチェック + + + if(usrmailValue.equals(usrmail2Value) == false) { + if(mode運営管理者一覧() == false) { + error("メールアドレスが一致しません。"); + } else { + error("ログインIDが一致しません。"); + } + } + + if(mailAddressCheck.exist(usrmailValue)) { + if(mode運営管理者一覧() == false) { + error("このメールアドレスは既に使用されています。"); + } else { + error("このログインIDは既に使用されています。"); + } + + } + + Usr cnd = new Usr(); + cnd.setOrgid(targetOrg.getOrgid()); // 該当機関 + List members = usrDao.get(cnd); + List members退会者以外 = new ArrayList(); + for(Usr usr: members) { + if(usr.getStatus().equals(Usr.STATUS_退会) == false) { + members退会者以外.add(usr); + } + } + if(targetOrg.isLimitnum指定なし() == false + && targetOrg.getLimitnum() < members退会者以外.size() + 1) { // 管理者分+1 + error("登録可能会員数を超過するため、これ以上登録できません。"); + } + + + + if(hasInputError()) return false; // ここまででエラーチェック + + return true; + } + @Override + void executeAfter(AjaxRequestTarget target) { + if(mode運営管理者一覧()) { + + /* 運営管理者追加 */ + + Usr usr運営管理者 = Usr.create運営管理者(targetOrg, usrmailValue, usrnameValue, false); + usrDao.add(usr運営管理者, loginUserId); // 更新処理 + + /* 完了メッセージ */ + info("運営管理者を追加しました。"); + + }else{ + /* データアクセス 機関管理者による会員仮登録 */ + Usr usr = new Usr(); + usr.setLoginid(usrmailValue); + usr.setName(usrnameValue); + usr.setOrgid(targetOrg.getOrgid()); + usr.setKind(Usr.KIND_機関会員); + usr.setOrgrole(Usr.ROLE_通常会員); + usr.setStoplogin(AppDef.FLASE); + usr.setStatus(Usr.STATUS_仮登録); + usr.setLoginerrorcount(0); + + usrDao.add(usr, loginUserId); // 【更新処理】 + + /* 共通機能:パスワード登録チケット発行 からチケットを取得する */ + String random = passwordTicketManager.execute新規パスワード発行(usr.getUsrid()); + + /* 会員追加メール送信 */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.addmember")); + setting.setMailTo(usrmailValue); + setting.replace("機関名称", targetOrg.getName()); + setting.replace("氏名", usrnameValue); + String 本登録URL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random; + setting.replace("本登録URL", 本登録URL); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + /* テスト自動化対応 */ + if (AppLogger.isDebug()) { + //info("メールに記載したURL【" + 本登録URL + "】"); + addDebugUrl(本登録URL); + } + + /* 完了メッセージ */ + info("仮登録を行い、登録したメールアドレスへ会員追加メールを送りました。"); + } + + + /* + * 状態遷移 + *  この画面では連続して登録することを想定するため、状態遷移は行わない + */ +// complete = true; + + /* 入力項目初期化 */ + usrnameValue = ""; + usrmailValue = ""; + usrmail2Value = ""; + + /* コンポーネント更新 */ + target.add(form); + + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return complete == false; + } + @Override + public boolean isEnabled() { + /* 運営管理組織のとき、代表者以外は運営管理者を追加できない。 */ + if(mode運営管理者一覧() && isSystemAdmin代表者() == false) { + return false; + } + return true; + } + }; + if(mode運営管理者一覧() == false) { + btnSubmit.add(new AttributeModifier("value", "会員を追加")); + } else { + btnSubmit.add(new AttributeModifier("value", "運営管理者を追加")); + } + + form.add(btnSubmit); + form.add(new Label("msgNoneBtnSubmit", "このユーザはシステム管理者の追加はできません。"){ + + @Override + public boolean isVisible() { + return form.get("btnSubmit").isEnabled() == false; + } + + }); + + + } + private boolean mode運営管理者一覧() { + if(targetOrg != null && Org.KIND_運営管理 == targetOrg.getKind()) { + if(isSystemAdmin()) { + return true; + } + } + return false; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/MenuPage.html.back b/AMM_web/src/main/java/jp/co/y_net/amm/page/MenuPage.html.back new file mode 100644 index 0000000..22ba7f5 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/MenuPage.html.back @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + メニュー + + + +
+
+ + +

+ + + +ユーザによって異なるメニューが表示されます。 + +
+

機関会員メニュー(スタブ)

+3.2.8 機関会員メニュー + +
+ +
+

機関管理者メニュー(スタブ)

+ +
+ +
+

運営管理者メニュー(スタブ)

+ +
+ +
+

システム開発メニュー

+運用時にこのメニューは表示されません。 + +
+ + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/MenuPage.java.back b/AMM_web/src/main/java/jp/co/y_net/amm/page/MenuPage.java.back new file mode 100644 index 0000000..daebbee --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/MenuPage.java.back @@ -0,0 +1,112 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppLogger; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.markup.html.link.Link; + + + +public class MenuPage extends CommonFrameA{ + + /** + * ページ利用可能Roleの設定 + */ + @Override + protected boolean okUser() { + return false + || AppSession.isLogin(AppSession.LoginUser.Role.USER) + || AppSession.isLogin(AppSession.LoginUser.Role.LEADER) + || AppSession.isLogin(AppSession.LoginUser.Role.ADMIN) + || AppSession.isLogin(AppSession.LoginUser.Role.DEV) + ; + } + public MenuPage() { + + /* + * 機関会員メニュー + */ + WebMarkupContainer contUser = new WebMarkupContainer("contUser"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.USER); + } + }; + add(contUser); + /* ・会員情報の編集 */ + contUser.add(new Link("goMemberDetail"){ + @Override + public void onClick() { + MemberDetailPage page = new MemberDetailPage(AppSession.getLoginUserId()); + setResponsePage(page); + } + }); + + /* + * 機関管理者メニュー + */ + WebMarkupContainer contLeader = new WebMarkupContainer("contLeader"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.LEADER); + } + }; + add(contLeader); + contLeader.add(new Link("goMemberList") { + @Override + public void onClick() { + MemberListPage page = new MemberListPage(AppSession.getLoginOrgId()); + setResponsePage(page); + } + }); + contLeader.add(new Link("goOrgDetail") { + @Override + public void onClick() { + OrgDetailPage page = new OrgDetailPage(AppSession.getLoginOrgId()); + setResponsePage(page); + } + }); + + /* + * 運営管理者メニュー + */ + WebMarkupContainer contAdmin = new WebMarkupContainer("contAdmin"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.ADMIN); + } + }; + add(contAdmin); + contAdmin.add(new Link("goOrgEntryList") { + @Override + public void onClick() { + OrgEntryListPage page = new OrgEntryListPage(); + setResponsePage(page); + } + }); + contAdmin.add(new Link("goOrgMemberList") { + @Override + public void onClick() { + OrgMemberListPage page = new OrgMemberListPage(); + setResponsePage(page); + } + }); + contAdmin.add(new BookmarkablePageLink("ogInfoList", InfoListPage.class)); + + /* + * システム開発者メニュー + */ + WebMarkupContainer contDev = new WebMarkupContainer("contDev"){ + @Override + public boolean isVisible() { + return AppLogger.isDebug(); + } + }; + add(contDev); + contDev.add(new BookmarkablePageLink("goDashboard", DashboardPage.class)); + + + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgDetailPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgDetailPage.html new file mode 100644 index 0000000..dfdd0a4 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgDetailPage.html @@ -0,0 +1,172 @@ + + + + + + + + + + 登録情報 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +

登録会員情報

+ +
+

(更新する)機関・団体情報情報を更新しました。 + / (削除する)機関・団体情報情報を削除しました。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDxxx
会員の種別教育機関
機関・団体名称 +
代表者|氏名
ふりがな
連絡先郵便番号
連絡先住所
連絡先電話番号
連絡先メールアドレス
連絡先メールアドレス確認用
(変更するときのみ入力)
パスワード
(変更するときのみ入力)
パスワード確認用
(変更するときのみ入力)
利用可能期間 +
+ + + +
+ ~ + + + +
+ 日付が正しくありません。 +
登録可能会員数 + + + +
+ + + ※ メールアドレスを変更するとパスワードがリセットされます。
+
+ + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+ +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgDetailPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgDetailPage.java new file mode 100644 index 0000000..f25a191 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgDetailPage.java @@ -0,0 +1,720 @@ +package jp.co.y_net.amm.page; + +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.CalcHash; +import jp.co.y_net.amm.common.ChoiceDateElement; +import jp.co.y_net.amm.common.ChoiceDateElement.DropDownChoiceDate; +import jp.co.y_net.amm.common.ChoiceElement; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.PasswordTextField; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +/** + * 機関情報詳細 + * @author k_inaba + */ +public class OrgDetailPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + public String kindValue; + public String nameValue; + public String adminnameValue; + public String adminnamekanaValue; + public String postnumValue; + public String addressValue; + public String telnumValue; + public String mailValue; + public String mail2Value; + public String passwordValue; + public String password2Value; + public String fromdateValue; + public String todateValue; + public String limitnumValue; + + /* + * 画面の状態 + */ + private boolean completeMod = false; + private boolean completeDel = false; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関管理者)) { + return true; + } + } + return false; + } + + public OrgDetailPage(PageParameters pageParams) { + + /* 共通戻るリンクの設置 */ + createCommonBackLinks(); + + /* 画面固有の戻るボタンの設置 */ + createBackLink(OrgMemberListPage.class, "登録会員情報管理"); + + /* フィードバックパネルの設置 */ + createFeedbackPanel(); + + /* 入力フォーム */ + final Form form = new Form("form"); + add(form); + + /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; // ----------中断 + } + final Integer loginUserId = loginUser.getUsrid(); + + String paramOrgid = pageParams.get("orgid").toString(""); + Integer targetOrgid; + if(StringUtils.isEmpty(paramOrgid)) { + /* + * パラメータ orgid が指定されていなければ、ログインユーザに紐づく機関情報を対象とする。 + *  ただし、機関管理者か、運営管理者に限る。 + */ + if (isOrgAdmin() || isSystemAdmin()) { + targetOrgid = loginUser.getOrgid(); + + } else { + error("パラメータ orgid がありません。"); + return; // ----------中断 + + } + } else { + targetOrgid = AppUtils.toInteger(paramOrgid); + } + final Org targetOrg = orgDao.getByOrgid(targetOrgid); + if (targetOrg == null) { + error("該当する登録会員情報がありません。"); + return; // ----------中断 + } + if(isSystemAdmin()) { + /* 機関管理者が他機関の情報にアクセスしてはいけない */ + if(AppUtils.equals(loginUser.getOrgid(), targetOrg.getOrgid()) == false && isSystemAdmin() == false) { + error("該当する情報を扱う権限がありません。"); + return; // ----------中断 + } + } + + final Usr target代表者; + { + Usr cnd = new Usr(); + cnd.setOrgid(targetOrgid); + cnd.setOrgrole(1); // 代表者 + List users = usrDao.get(cnd); + if(users.size() != 1) { + error("代表者のデータが取得できません。"); + return; // ----------中断 + } else { + target代表者 = users.get(0); + } + } + + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(completeMod) { + return "登録会員情報を変更しました。"; + } + if(completeDel) { + return "登録会員情報を削除しました。"; + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + form.add(resutlMessage); + + /* 組織IDの出力 */ + form.add(new Label("orgid", Model.of(targetOrg.getOrgid()))); + + + /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/ + +// kindValue = AppUtils.toStr(targetOrg.getKind()); + nameValue = targetOrg.getName(); +// adminnameValue = targetOrg.getAdminname(); + adminnameValue = target代表者.getName(); + adminnamekanaValue = targetOrg.getAdminnamekana(); + postnumValue = targetOrg.getPostnum_Disp(); // ハイフン付きへ変換 + addressValue = targetOrg.getAddress(); + telnumValue = targetOrg.getTelnum(); +// mailValue = targetOrg.getMail(); + mailValue = target代表者.getLoginid(); + mail2Value = ""; + fromdateValue = AppUtils.toStr(targetOrg.getFromdate()); + todateValue = AppUtils.toStr(targetOrg.getTodate()); + limitnumValue = AppUtils.toStr(targetOrg.getLimitnum()); + if(StringUtils.isEmpty(limitnumValue)) { + limitnumValue = "-1"; + } + + /* 会員の種類 */ + form.add(new Label("kind", Model.of(targetOrg.getKind_Disp()))); + + /* 団体名称 */ + TextField name = new TextField("name", new PropertyModel(this, "nameValue")){ + @Override + public boolean isVisible() { + if(targetOrg.isPersonalOrg()) { // 個人の場合は非表示 + return false; + } + return true; + } + }; + form.add(name); + + /* 管理者氏名 */ + final Label thAdminname = new Label("thAdminname", new Model(){ + @Override + public String getObject() { + if(targetOrg.isPersonalOrg() == false) { + return "代表者氏名"; + } + return "氏名"; + } + }){ + }; + form.add(thAdminname); + TextField adminname = new TextField("adminname", new PropertyModel(this, "adminnameValue")); + form.add(adminname); + + /* ふりがな */ + TextField adminnamekana = new TextField("adminnamekana", new PropertyModel(this, "adminnamekanaValue")); + form.add(adminnamekana); + + /* 連絡先郵便番号 */ + TextField postnum = new TextField("postnum", new PropertyModel(this, "postnumValue")); + form.add(postnum); + + /* 連絡先住所 */ + TextField address = new TextField("address", new PropertyModel(this, "addressValue")); + form.add(address); + + /* 連絡先電話番号 */ + TextField telnum = new TextField("telnum", new PropertyModel(this, "telnumValue")); + form.add(telnum); + + /* 連絡先メールアドレス */ + TextField mail = new TextField("mail", new PropertyModel(this, "mailValue")); + form.add(mail); + + /* 連絡先メールアドレス確認用 */ + TextField mail2 = new TextField("mail2", new PropertyModel(this, "mail2Value")); + form.add(mail2); + + /* パスワード */ + final PasswordTextField password = new PasswordTextField("password", new PropertyModel(this, "passwordValue")){ + @Override + public boolean isVisible() { + /* ログインユーザ自身の情報でなければ画面から変更できない */ + return isLoginUser(target代表者); + } + }; + password.setRequired(false); + form.add(password); + + /* パスワード確認用 */ + PasswordTextField password2 = new PasswordTextField("password2", new PropertyModel(this, "password2Value")){ + @Override + public boolean isVisible() { + /* ログインユーザ自身の情報でなければ画面から変更できない */ + return isLoginUser(target代表者); + } + }; + password2.setRequired(false); + form.add(password2); + + /* 利用可能期間 --------------------------------------------------------------------------------------- */ + + List choiceY = ChoiceDateElement.createChoiceY(fromdateValue, todateValue); + List choiceM = ChoiceDateElement.createChoiceM(); + List choiceD = ChoiceDateElement.createChoiceD(); + + final Model fromdateYModel = ChoiceDateElement.createModelY(choiceY, fromdateValue); + final Model fromdateMModel = ChoiceDateElement.createModelM(choiceM, fromdateValue); + final Model fromdateDModel = ChoiceDateElement.createModelD(choiceD, fromdateValue); + + final Model todateYModel = ChoiceDateElement.createModelY(choiceY, todateValue); + final Model todateMModel = ChoiceDateElement.createModelM(choiceM, todateValue); + final Model todateDModel = ChoiceDateElement.createModelD(choiceD, todateValue); + + final DropDownChoiceDate fromdateY = new DropDownChoiceDate("fromdateY", fromdateYModel, choiceY); + form.add(fromdateY); + final DropDownChoiceDate fromdateM = new DropDownChoiceDate("fromdateM", fromdateMModel, choiceM); + form.add(fromdateM); + final DropDownChoiceDate fromdateD = new DropDownChoiceDate("fromdateD", fromdateDModel, choiceD); + form.add(fromdateD); + + final DropDownChoiceDate todateY = new DropDownChoiceDate("todateY", todateYModel, choiceY); + form.add(todateY); + final DropDownChoiceDate todateM = new DropDownChoiceDate("todateM", todateMModel, choiceM); + form.add(todateM); + final DropDownChoiceDate todateD = new DropDownChoiceDate("todateD", todateDModel, choiceD); + form.add(todateD); + + if(isSystemAdmin() == false) { // 運営管理者にのみ表示する編集項目 + fromdateY.setVisible(false); + fromdateM.setVisible(false); + fromdateD.setVisible(false); + todateY.setVisible(false); + todateM.setVisible(false); + todateD.setVisible(false); + } + /* 即時日付チェック */ + final Label quickMsgFromto = new Label("quickMsgFromto", new Model(){ + @Override + public String getObject() { +// fromdateY.getModelObject().getId() + String tmpFromdate = ChoiceDateElement.日付取得(fromdateYModel, fromdateMModel, fromdateDModel); + String tmpTodate = ChoiceDateElement.日付取得(todateYModel, todateMModel, todateDModel); + + if(validFromToDate(tmpFromdate) == false || validFromToDate(tmpTodate) == false) { + return "日付が正しくありません。"; + } else { + return ""; + } + } + }); + quickMsgFromto.setOutputMarkupId(true); + form.add(quickMsgFromto); + + /* ドロップダウン変更時の挙動を設定 */ + fromdateY.add(new DateDropDownOnchangeBehavior(quickMsgFromto)); + fromdateM.add(new DateDropDownOnchangeBehavior(quickMsgFromto)); + fromdateD.add(new DateDropDownOnchangeBehavior(quickMsgFromto)); + todateY.add(new DateDropDownOnchangeBehavior(quickMsgFromto)); + todateM.add(new DateDropDownOnchangeBehavior(quickMsgFromto)); + todateD.add(new DateDropDownOnchangeBehavior(quickMsgFromto)); + + /* 利用可能期間 ここまで ---------------------------------------------------------------------------------- */ + + /* 登録可能会員数 */ + List choiceLimitnum = Org.createLimitChices(limitnumValue); + final Model limitnumModel = new Model(); + ChoiceElement.setDropDownList(limitnumModel, choiceLimitnum, String.valueOf(limitnumValue)); // 初期値設定 + + final DropDownChoice limitnum = new DropDownChoice( + "limitnum", limitnumModel, choiceLimitnum, new ChoiceElement.Renderer()); + form.add(limitnum); + + if(isSystemAdmin() == false) { // 運営管理者にのみ表示する編集項目 + limitnum.setVisible(false); + } + + + /* 組織「運営管理」を編集する場合の表示制御 ------------------------------------------------------------------*/ + if(targetOrg.getKind().equals(Org.KIND_運営管理)) { + /* 次の項目を非表示 */ + adminnamekana.setVisible(false); // ふりがな + postnum.setVisible(false); // 連絡先郵便番号 + address.setVisible(false); // 連絡先住所 + telnum.setVisible(false); // 連絡先電話番号 + limitnum.setVisible(false); // 登録可能会員数 + /* 利用可能期間 */ + fromdateY.setVisible(false); + fromdateM.setVisible(false); + fromdateD.setVisible(false); + todateY.setVisible(false); + todateM.setVisible(false); + todateD.setVisible(false); + } + + /* 表示コンポーネントの設定 ----------------------------------------------------------------------------------*/ + + form.add(new Label("thLoginid", new Model(){ + @Override + public String getObject() { + if(targetOrg.getKind().equals(Org.KIND_運営管理) == false) { + return "連絡先メールアドレス"; + } else { + return "ログインID"; + } + } + })); + form.add(new Label("thLoginid2", new Model(){ + @Override + public String getObject() { + if(targetOrg.getKind().equals(Org.KIND_運営管理) == false) { + return "連絡先メールアドレス確認用"; + } else { + return "ログインID確認用"; + } + } + })); + + /* 代表者によるメールアドレス変更のメッセージ */ + form.add(new Label("msgpwreset", "※ メールアドレスを変更するとパスワードがリセットされます。") { + @Override + public boolean isVisible() { + /* パスワード欄から変更できない場合はパスワードリセット */ + return password.isVisible() == false; + } + }); + + + /* パスワード情報 */ + PasswordInfoPanel passwordInfoPanel = new PasswordInfoPanel("PasswordInfoPanel", + target代表者, + isSystemAdmin()); + form.add(passwordInfoPanel); + + + /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/ + + /* + * 【更新する】 + */ + Button btnSubmitMod = new ConfirmAjaxButton("btnSubmitMod") { + @Override + String getConfirmMessage() { + return "更新します。"; + } + @Override + boolean executeBefore() { + /* モデル(PropertyModel以外)から値取得 */ + fromdateValue = ChoiceDateElement.日付取得(fromdateYModel, fromdateMModel, fromdateDModel); + todateValue = ChoiceDateElement.日付取得(todateYModel, todateMModel, todateDModel); + if(limitnumModel.getObject() == null) { + limitnumValue = String.valueOf(Org.LIMITNUM_未指定); + } else { + limitnumValue = limitnumModel.getObject().getId(); + } + /* 入力値変換 */ +// kindValue = AppStringUtils.trim(kindModel); + nameValue = AppStringUtils.trim(nameValue); + adminnameValue = AppStringUtils.trim(adminnameValue); + adminnamekanaValue = AppStringUtils.trim(adminnamekanaValue); + postnumValue = AppStringUtils.trimHalf(postnumValue); + postnumValue = postnumValue.replaceAll("-", "");// 郵便番号からハイフン除去 + addressValue = AppStringUtils.trim(addressValue); + telnumValue = AppStringUtils.trimHalf(telnumValue); + mailValue = AppStringUtils.trimHalf(mailValue); + mail2Value = AppStringUtils.trimHalf(mail2Value); + passwordValue = AppStringUtils.trimHalf(passwordValue); + password2Value = AppStringUtils.trimHalf(password2Value); + if(isSystemAdmin()) { + + fromdateValue = AppStringUtils.trimHalf(fromdateValue); + todateValue = AppStringUtils.trimHalf(todateValue); + + limitnumValue = AppStringUtils.trimHalf(limitnumValue); + } + + boolean isメールアドレスが変更されている = (mailValue.equals(target代表者.getLoginid()) == false); + boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false); + + /* 入力値検査 */ +// validItemNum(kindValue, "会員の種類", 1, 1); + validItem(nameValue, "機関・団体名称", 0, 512); + validItem(adminnameValue, thAdminname.getDefaultModelObjectAsString(), 1, 512); // 代表者氏名 or 氏名 + + + if(targetOrg.getKind().equals(Org.KIND_運営管理)) { + /* 組織「運営管理」を編集する場合のチェック */ + validItem(mailValue, "ログインID確認用", 1, 256); + + } else { + /* 通常のチェック */ + validItem(adminnamekanaValue, "ふりがな", 1, 512); + validItemNum(postnumValue, "連絡先郵便番号", 7, 7); + validItem(addressValue, "連絡先住所", 1, 1024); + validItemTel(telnumValue, "連絡先電話番号", 1, 32); + validItemMail(mailValue, "連絡先メールアドレス"); + if(isSystemAdmin()) { + validItemNum(limitnumValue, "登録可能会員数", 0, 4); + } + if(hasInputError()) return false; // ここまででエラーチェック + + if(isSystemAdmin() && validFromToDate(fromdateValue) == false) { + error("利用可能期間(開始)が日付として正しくありません。"); + } + if(isSystemAdmin() && validFromToDate(todateValue) == false) { + error("利用可能期間(終了)が日付として正しくありません。"); + } + } + + if(hasInputError()) return false; // ここまででエラーチェック + + if(isメールアドレスが変更されている) { + + if(targetOrg.getKind().equals(Org.KIND_運営管理)) { + /* 組織「運営管理」を編集する場合のチェック */ + validItem(mail2Value, "ログインID確認用", 1, 256); + if(hasInputError()) return false; // ここまででエラーチェック + + if(mailValue.equals(mail2Value) == false) { + error("ログインIDが一致しません。"); + } + if(mailAddressCheck.exist(mailValue)) { + error("このログインIDは既に使用されています。"); + } + + } else { + /* 通常のチェック */ + validItemMail(mail2Value, "メールアドレス確認用"); + + if(hasInputError()) return false; // ここまででエラーチェック + + if(mailValue.equals(mail2Value) == false) { + error("メールアドレスが一致しません。"); + } + if(mailAddressCheck.exist(mailValue)) { + error("このメールアドレスは既に使用されています。"); + } + } + + } + + if (isパスワード欄が入力されている) { + validItemAscii(passwordValue, "パスワード", 8, 16); + validItemAscii(password2Value, "パスワード確認用", 8, 16); + } + + if(hasInputError()) return false; // ここまででエラーチェック + + if(isパスワード欄が入力されている) { + if(passwordValue.equals(password2Value) == false) { + error("パスワードが一致しません。"); + } + } + if(hasInputError()) return false; // ここまででエラーチェック + + /* + * パスワードの変更について + * メールアドレスが変更されている場合は、パスワードの変更が必須である。 + * パスワード欄が入力できるのは変更対象の情報が、ログインユーザ本人であるときのみ。 + * パスワード欄が入力できない場合(代表者や運営管理者による変更)は、パスワードリセットを実施する。 + */ +// boolean パスワードリセットが必要 = false; + if(isメールアドレスが変更されている) { + + if(isLoginUser(target代表者) ) { + /* 変更対象の情報が、ログインユーザ本人 */ + + if(isパスワード欄が入力されている) { + // 正しい + } else { + error("メールアドレスを変更する場合は、パスワードも設定してください。"); + } + + } else if(isSystemAdmin() ) { + /* パスワード欄が入力できない場合(代表者や運営管理者による変更) */ +// パスワードリセットが必要 = true; + } else { + /* 通常想定されない条件 */ + error("メールアドレスを変更することはできません。"); + } + } + + + if(hasInputError()) return false; // ここまででエラーチェック + + return true; + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* データアクセス 代表者による登録会員情報の変更 */ + +// targetOrg.setKind(Integer.parseInt(kindValue)); + targetOrg.setName(nameValue); + targetOrg.setAdminname(adminnameValue); + targetOrg.setAdminnamekana(adminnamekanaValue); + targetOrg.setPostnum(postnumValue); + targetOrg.setTelnum(telnumValue); + targetOrg.setAddress(addressValue); + targetOrg.setMail(mailValue); + if(isSystemAdmin()) { + if(StringUtils.isEmpty(fromdateValue) == false) { + int i = AppUtils.toInteger(fromdateValue); + if(i == 0) { + i = -1; // 未指定は「-1」とする。 + } + targetOrg.setFromdate(i); + } + if(StringUtils.isEmpty(todateValue) == false) { + int i = AppUtils.toInteger(todateValue); + if(i == 0) { + i = -1; // 未指定は「-1」とする。 + } + targetOrg.setTodate(i); + } + if(StringUtils.isEmpty(limitnumValue) == false) { + targetOrg.setLimitnum(AppUtils.toInteger(limitnumValue)); + } + } + + orgDao.update(targetOrg, loginUserId); // 【更新処理】 + + + // 代表者の氏名、メールアドレス、パスワードの変更についてユーザー情報も変更する。 + + boolean isメールアドレスが変更されている = (mailValue.equals(target代表者.getLoginid()) == false); + boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false); + + if(isメールアドレスが変更されている){ + target代表者.setLoginid(mailValue); + } + if(isパスワード欄が入力されている) { + String pwhash = CalcHash.passowrdHash(passwordValue, target代表者.getLoginid()); + target代表者.setPwhash(pwhash); + target代表者.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時 + } + + if(isメールアドレスが変更されている + && isパスワード欄が入力されている == false) { + /* 運営管理者によるメールアドレスだけの変更 */ + target代表者.setPwhash(""); + target代表者.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時 + } + target代表者.setName(adminnameValue); + + usrDao.update(target代表者, loginUserId); // 更新処理 + + /* 本人以外がメールアドレスを変更していたらパスワードリセット */ + boolean パスワードリセットが必要 = false; + if(isメールアドレスが変更されている) { + if(isSystemAdmin() ) { + /* パスワード欄が入力できない場合(代表者や運営管理者による変更) */ + パスワードリセットが必要 = true; + } + } + if(パスワードリセットが必要) { + doパスワードリセット(target代表者.getUsrid(), passwordTicketManager, mailValue); + } + + /* TODO ログインユーザのメールアドレスかパスワードが変更されたら、自動ログアウトさせる */ + + /* + * 状態遷移 + */ + completeMod = true; + + /* 画面コンポーネントを更新する */ + target.add(form); + } + + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return completeMod == false && completeDel == false; + } + }; + form.add(btnSubmitMod); + + + /* + * 【削除する】 + */ + Button btnSubmitDel = new ConfirmAjaxButton("btnSubmitDel") { + @Override + String getConfirmMessage() { + return "削除します。"; + } + @Override + String getConfirmMessageStrong() { + return "登録情報を削除すると、機関・団体の情報が削除され、所属する会員もすべて退会します。"; + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* + * 運営管理者による機関情報の削除 + * ・所属する会員を退会 + * ・組織を論理削除 + */ + Usr cndUser = new Usr(); + cndUser.setOrgid(targetOrg.getOrgid()); + List members = usrDao.get(cndUser); + for(Usr member: members) { + if(Usr.STATUS_退会 != member.getStatus()) { + member.退会処理(); + usrDao.update(member, loginUserId); // 更新処理 + } + } + /* 外部APIに退会者のログインIDを通知 */ + AppUtils.callDeleteNotice(members); + + orgDao.removeLogical(targetOrg, loginUserId); // 論理削除 + + /* 状態遷移 */ + completeDel = true; + + /* 画面コンポーネントを更新する */ + target.add(form); + } + @Override + public boolean isVisible() { + /* 運営管理者以外には表示しない */ + if(isSystemAdmin() == false) { + return false; + } + if(targetOrg.getKind().equals(Org.KIND_運営管理)) { + /* 組織「運営管理」は削除しない */ + return false; + } + /* 完了後の状態ならボタンを表示しない */ + return completeMod == false && completeDel == false; + } + }; + form.add(btnSubmitDel); + } + + + /** + * 利用期間の日付ドロップダウンが変更された時の振る舞い + */ + private class DateDropDownOnchangeBehavior extends AjaxFormComponentUpdatingBehavior { + private final Label quickMsgFromto; + private DateDropDownOnchangeBehavior(Label quickMsgFromto) { + super("onchange"); + this.quickMsgFromto = quickMsgFromto; + } + @Override + protected void onUpdate(AjaxRequestTarget target) { + target.add(quickMsgFromto); + } + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryDetailPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryDetailPage.html new file mode 100644 index 0000000..7aee237 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryDetailPage.html @@ -0,0 +1,126 @@ + + + + + + + + + + 申請内容表示 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+

+ 承認しました。連絡先メールアドレスへ申請内容承認メールを送りました。/拒否しました。連絡先メールアドレスへ申請内容拒否メールを送りました。 +

+ +

申請内容詳細

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
会員の種別教育機関
申請機関・団体○○中学校
担当者|氏名○○太郎
ふりがなまるまるたろう
連絡先郵便番号999-9999
連絡先住所東京都新宿区高田馬場1-1-1
連絡先電話番号03-9999-9999
連絡先メールアドレスabcd.taro@example.com
拒否理由 + +
+ +
+ +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+
+
+ ※ 有効期限が残っている場合でも、リセットされます。
+
フィードバックメッセージ
+
+ + + + +
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryDetailPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryDetailPage.java new file mode 100644 index 0000000..761832b --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryDetailPage.java @@ -0,0 +1,429 @@ +package jp.co.y_net.amm.page; + +import java.util.List; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.AppSession.LoginUser; +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppSendMail; +import jp.co.y_net.amm.common.AppSendMail.MailSetting; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextArea; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class OrgEntryDetailPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + + /* + * 画面入力値 + */ + public String noteValue; + /* + * 画面の状態 + */ + private boolean completeA = false; + private boolean completeR = false; + private boolean complete = false; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + } + + return false; + } + + public OrgEntryDetailPage(final PageParameters pageParams) { + + /* 共通戻るリンクの設置 */ + createCommonBackLinks(); + + /* 画面固有の戻るボタンの設置 */ + createBackLink(OrgEntryListPage.class, "申請一覧"); + + /* フィードバックパネルの設置 */ + createFeedbackPanel(); + + final Form form = new Form("form"); + form.setOutputMarkupId(true); + add(form); + + + /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + + final LoginUser loginUser = AppSession.get().getLoginUser(); + if(loginUser == null) { + error("ログイン情報が取得できません。"); + return; // ----------中断 + } + final Integer loginUserId = loginUser.getUsrid(); + + String orgid = pageParams.get("orgid").toString(); + validItemNum(orgid, "パラメータorgid", 1, Integer.MAX_VALUE); + if(hasInputError()) return; // ----------エラーがあれば中止 + + Integer iOrgid = Integer.parseInt(orgid); + + Org cond = new Org(); + cond.setOrgid(iOrgid); + List orgs = orgDao.get(cond); + if(orgs.size() != 1) { + error("パラメータorgidが不正です。"); + } + + if(hasInputError()) return; // ----------エラーがあれば中止 + + form.setVisible(true); + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + + final Org org = orgs.get(0); + + /* 状態に応じて初期表示を変更 */ + if(org.getStatus().equals(Org.STATUS_承認済み)) { + error("すでに承認されています。"); + complete = true; + } + if(org.getStatus().equals(Org.STATUS_本登録済み)) { + error("すでに登録が完了しています。"); + complete = true; + } + if(org.getStatus().equals(Org.STATUS_拒否済み)) { + error("すでに拒否されています。"); + complete = true; + } + + + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(completeA) { + return "承認しました。連絡先メールアドレスへ申請内容承認メールを送りました。"; + } + if(completeR) { + return "拒否しました。連絡先メールアドレスへ申請内容拒否メールを送りました。"; + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + form.add(resutlMessage); + + /* 出力コンポーネントの設定 ----------------------------------------------------------------------------------*/ + form.add(new Label("kind", Model.of(org.getKind_Disp()))); + Label name = new Label("name", Model.of(org.getName())){ + @Override + public boolean isVisible() { + if(org.isPersonalOrg()) { // 個人の場合は非表示 + return false; + } + return true; + } + }; + form.add(name); + form.add(new Label("adminname", Model.of(org.getAdminname()))); + form.add(new Label("adminnamekana", Model.of(org.getAdminnamekana()))); + form.add(new Label("postnum", Model.of(org.getPostnum_Disp()))); + form.add(new Label("address", Model.of(org.getAddress()))); + form.add(new Label("telnum", Model.of(org.getTelnum()))); + form.add(new Label("mail", Model.of(org.getMail()))); + + noteValue = org.getNote(); + TextArea note = new TextArea("note", new PropertyModel(this, "noteValue")); + form.add(note); + + + Label thAdminname = new Label("thAdminname", new Model(){ + @Override + public String getObject() { + if(org.isPersonalOrg() == false) { + return "担当者"; + } + return "氏名"; + } + }){ + }; + form.add(thAdminname); + + final Button btnSubmitA = new ConfirmAjaxButton("btnSubmitA"){ + @Override + String getConfirmMessage() { + return "承認します"; + } + @Override + boolean executeBefore() { + /* 入力値変換 */ + // なし + + /* 入力値チェック */ + // なし + + /* + * この時点でもう一度メールアドレスのチェックが必要。 + * (申請中に別の申請が通過してユーザが作成されている可能性を考慮) + */ + if(mailAddressCheck.existWithoutOrg(org.getAddress())) { + error("このメールアドレスは既に使用されています。"); + } + + if(hasInputError()) return false; // ここまででエラーチェック + + return true; + } + @Override + void executeAfter(AjaxRequestTarget target) { + /* データアクセス 新規申請承認 */ + + org.setStatus(Org.STATUS_承認済み); + org.setApprovaldate(AppUtils.createNowLong()); + orgDao.update(org, loginUserId); // 【更新実施】 + + Usr usr = new Usr(); + usr.setLoginid(org.getMail()); + usr.setName(org.getAdminname()); + usr.setKind(Usr.KIND_機関管理者); + usr.setOrgid(org.getOrgid()); + usr.setOrgrole(Usr.ROLE_管理者); + usr.setStoplogin(AppDef.FLASE); + usr.setStatus(Usr.STATUS_仮登録); // 仮登録 + usr.setLoginerrorcount(0); + usrDao.add(usr, loginUserId); // 【更新実施】 + + /* 共通機能:パスワード登録チケット発行 からチケットを取得する(申請者のユーザIDをキーとする)*/ + String random = passwordTicketManager.execute新規パスワード発行(usr.getUsrid()); + + /* 申請内容承認メール */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.org.approval")); + setting.setMailTo(org.getMail()); + setting.replace("機関名称", org.getName()); + setting.replace("申請者氏名", org.getAdminname()); + String 本登録URL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random; + setting.replace("本登録URL", 本登録URL); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + /* テスト自動化対応 */ + if (AppLogger.isDebug()) { + //info("メールに記載したURL【" + 本登録URL + "】"); + addDebugUrl(本登録URL); + } + + + /* 完了状態へ移行 */ + completeA = true; + + /* コンポーネント更新 */ + target.add(form); + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return completeA == false && completeR == false && complete== false; + } + }; + form.add(btnSubmitA); + + final Button btnSubmitR = new ConfirmAjaxButton("btnSubmitR"){ + @Override + String getConfirmMessage() { + return "拒否します"; + } + @Override + boolean executeBefore() { + /* 入力値変換 */ + noteValue = AppStringUtils.trim(noteValue); + + /* 入力値チェック */ + validItem(noteValue, "拒否理由", 1, 5000); + + if(hasInputError()) return false; // ここまででエラーチェック + + return true; + } + @Override + void executeAfter(AjaxRequestTarget target) { + /* データアクセス 新規機関申請拒否 */ + org.setStatus(Org.STATUS_拒否済み); + org.setRejectdate(AppUtils.createNowLong()); + org.setNote(noteValue); + orgDao.update(org, loginUserId); // 【更新実施】 + + + /* 申請内容拒否メール */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.org.reject")); + setting.setMailTo(org.getMail()); + setting.replace("機関名称", org.getName()); + setting.replace("申請者氏名", org.getAdminname()); + setting.replace("否認理由", noteValue); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + /* 完了状態へ移行 */ + completeR = true; + + /* コンポーネント更新 */ + target.add(form); + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return completeA == false && completeR == false && complete== false; + } + }; + form.add(btnSubmitR); + + /* + * 承認済みのときに表示される領域 + */ + WebMarkupContainer cntStatus1 = new WebMarkupContainer("cntStatus1") { + @Override + public boolean isVisible() { + return org.getStatus().equals(Org.STATUS_承認済み); + } + }; + cntStatus1.setOutputMarkupId(true); + cntStatus1.setOutputMarkupPlaceholderTag(true); + form.add(cntStatus1); + + + +// /* パスワードの有効期限 */ +// Label pwtcktLabel = new Label("pwtckt", new Model(){ +// @Override +// public String getObject() { +// /* 仮登録されている代表者 */ +// final Usr usrPreAdmin = 仮登録されている代表者(org); +// String ticket = "xxx"; +// Pwtckt pwtckt = passwordTicketManager.get有効なチケット(usrPreAdmin.getUsrid()); +// if(pwtckt != null) { +// if(pwtckt.getTicketdate() != null) { +// ticket = "パスワード受付の有効期限は " +// + AppUtils.toStrYyyyMMdd_HHmmss(pwtckt.getTicketdate()) +// + " です。"; +// } else { +// ticket = "パスワード受付の有効期限が取得できません。"; +// } +// } else { +// ticket = "パスワード受付の有効期限が取得できません。"; +// } +// return ticket; +// } +// }); +// pwtcktLabel.setOutputMarkupPlaceholderTag(true); +// cntStatus1.add(pwtcktLabel); + + /* 承認メールを再送する ボタン */ + final Button btnSubmitStatus1 = new ConfirmAjaxButton("btnSubmitStatus1"){ + @Override + String getConfirmMessage() { + return "承認メールを再送します。"; + } + @Override + boolean executeBefore() { + /* 入力値変換 */ + // なし + /* 入力値チェック */ + // なし + return true; + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* 共通機能:パスワード登録チケット発行 からチケットを取得する(申請者のユーザIDをキーとする)*/ + final Usr usrPreAdmin = 組織の代表者(org); + String random = passwordTicketManager.execute新規パスワード発行(usrPreAdmin.getUsrid()); + + /* 申請内容承認メール */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.org.approval")); + setting.setMailTo(org.getMail()); + setting.replace("機関名称", org.getName()); + setting.replace("申請者氏名", org.getAdminname()); + String 本登録URL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random; + setting.replace("本登録URL", 本登録URL); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + /* テスト自動化対応 */ + if (AppLogger.isDebug()) { + addDebugUrl(本登録URL); + } + + /* メッセージ表示 */ + info("パスワード受付の有効期限を更新して、メールを再送しました。"); + + /* コンポーネント更新 */ + target.add(form); + + } + @Override + public boolean isVisible() { + return org.getStatus().equals(Org.STATUS_承認済み); + } + }; + btnSubmitStatus1.setOutputMarkupPlaceholderTag(true); + cntStatus1.add(btnSubmitStatus1); + + FeedbackPanel fb = new FeedbackPanel("feedback"); + fb.setOutputMarkupPlaceholderTag(true); + cntStatus1.add(fb); + + + /* パスワード情報 */ + PasswordInfoPanel passwordInfoPanel = new PasswordInfoPanel("PasswordInfoPanel", + 組織の代表者(org), + isSystemAdmin(), + true); + form.add(passwordInfoPanel); + + + } + private Usr 組織の代表者(final Org org) { + Usr usrPreAdminCnd = new Usr(); + if(Org.KIND_運営管理 == org.getKind()) { // 運営管理を考慮 + usrPreAdminCnd.setKind(Usr.KIND_運営管理者); + } else { + usrPreAdminCnd.setKind(Usr.KIND_機関管理者); + } + usrPreAdminCnd.setOrgid(org.getOrgid()); + usrPreAdminCnd.setOrgrole(Usr.ROLE_管理者); + List usrs = usrDao.get(usrPreAdminCnd); + if(usrs.isEmpty()) { + //throw new RuntimeException("承認済み組織からユーザ情報が取得できませんでした。"); + return null; // 「未処理」を考慮 + } + final Usr usrPreAdmin = usrs.get(0); + return usrPreAdmin; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryListPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryListPage.html new file mode 100644 index 0000000..a731c55 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryListPage.html @@ -0,0 +1,71 @@ + + + + + + + + + + 申請一覧 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

申請一覧

+ + + +表示順序:
+絞り込み:
+ + + + + + + + + + + + + + + + + + + + + + +
会員種別登録会員名称状態申請日時
教育機関○○中学校未処理2015/3/28 XX:XX
施設団体(政令指定)○○市教育委員会承認済み2015/3/28 XX:XX
+
<前へ 次へ>
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryListPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryListPage.java new file mode 100644 index 0000000..339512e --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryListPage.java @@ -0,0 +1,168 @@ +package jp.co.y_net.amm.page; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map.Entry; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.ChoiceElement; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.link.Link; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.PageableListView; +import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class OrgEntryListPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + } + return false; + } + + public OrgEntryListPage(PageParameters pageParams) { + + /* 戻るリンク */ + add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin"))); + + /* フィードバックメッセージ */ + add(new FeedbackPanel("feedback")); + + + /* 表示順序 */ + List sortChoice = new ArrayList(); + sortChoice.add(new ChoiceElement("1","申請日時の新しい順")); + sortChoice.add(new ChoiceElement("2","申請日時の古い順")); + final Model sortModel = new Model(); + ChoiceElement.setDropDownList(sortModel, sortChoice, "1"); // 初期値設定 + final DropDownChoice sortEntrydate = new DropDownChoice( + "sortEntrydate", sortModel, sortChoice, new ChoiceElement.Renderer()); + add(sortEntrydate); + + /* 絞り込み */ + List filterChoice = new ArrayList(); + filterChoice.add(new ChoiceElement(" ","全て")); + for(Entry entry: Org.getStatusMap().entrySet()) { + filterChoice.add(new ChoiceElement(entry.getKey(), entry.getValue())); + } + final Model filterModel = new Model(); + ChoiceElement.setDropDownList(filterModel, filterChoice, " "); // 初期値設定 + final DropDownChoice filterStatus = new DropDownChoice( + "filterStatus", filterModel, filterChoice, new ChoiceElement.Renderer()); + add(filterStatus); + + // LoadableDetachableModel は リクエストの最初に load にてデータを取得するモデル + final IModel> orgsModel = new LoadableDetachableModel>() { + @Override + protected List load() { + Org cnd = new Org(); + if(filterModel.getObject() != null) { + String filterId = filterModel.getObject().getId(); + if(filterId != null && filterId.trim().equals("") == false) { + int iFilterId = Integer.parseInt(filterId); + cnd.setStatus(iFilterId); + } + } + List entryOrgs = orgDao.get(cnd); + + boolean desc = sortModel.getObject().getId().equals("1"); + Collections.sort(entryOrgs, new Org.EntryDateComparator(desc)); + + return entryOrgs; + } + }; + + final WebMarkupContainer container = new WebMarkupContainer("listViewContainer"); + container.setOutputMarkupId(true); + add(container); + final PageableListView listview = new PageableListView("listview", orgsModel, 20) { + private static final long serialVersionUID = 1L; + @Override + protected void populateItem(ListItem item) { +// + final Org org = item.getModelObject(); + + /* 会員種別 */ + item.add(new Label("kind", org.getKind_Disp())); + + + /* 名称とリンク */ + //BookmarkablePageLink lnkName = new BookmarkablePageLink("lnkName", OrgEntryDetailPage.class, param); + Link lnkName = new Link("lnkName"){ + @Override + public void onClick() { + PageParameters param = new PageParameters(); + param.add("orgid", org.getOrgid()); + OrgEntryDetailPage nextPage = new OrgEntryDetailPage(param); + nextPage.setReturnPage(getPage()); // このページを戻り先として記録する + setResponsePage(nextPage); + } + }; + + + String name = org.getNameOrAdminname(); + if(StringUtils.isEmpty(name)) { + name = "※"; // 仮に値が取得できない場合でも、リンクに使用されるため、疑似値を設定した。 + } + Label lnklblName = new Label("lnklblName", name); + lnkName.add(lnklblName); + item.add(lnkName); + + /* ステータス */ + item.add(new Label("status", org.getStatus_Disp())); + + /* 申請日時 */ + item.add(new Label("entrydate" , org.getEntrydate_Disp())); + } + }; + container.add(listview); + + PagingNavigator navigator = new PagingNavigator("paging", listview){ + @Override + public boolean isVisible() { + return listview.size() > 0; + } + }; + add(navigator); + + + /* プルダウン変更の挙動 */ + sortEntrydate.add(new AjaxFormComponentUpdatingBehavior("onchange") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + target.add(container); + } + }); + filterStatus.add(new AjaxFormComponentUpdatingBehavior("onchange") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + target.add(container); + } + }); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryPage.html new file mode 100644 index 0000000..261008d --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryPage.html @@ -0,0 +1,126 @@ + + + + + + + + + + 新規申請 + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+

+ 申請を行いました。申請の結果は連絡先メールアドレスへお送りします。しばらくお待ちください。 +

+ + + + + +
会員の種別 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
会員の種別 + 選択された種別 +   + (会員種別を選び直す) +
申請機関・団体
担当者|氏名
ふりがな
連絡先郵便番号
連絡先住所
連絡先電話番号
連絡先メールアドレス
連絡先メールアドレス
(確認)
+ +
※メールアドレスはログインアカウントとして使用します。 +
※携帯電話のメールアドレスは登録できません。 +
利用規約 +
+ +
+ + + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryPage.java new file mode 100644 index 0000000..421cf35 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgEntryPage.java @@ -0,0 +1,421 @@ +package jp.co.y_net.amm.page; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppSendMail; +import jp.co.y_net.amm.common.AppSendMail.MailSetting; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.ChoiceElement; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.CheckBox; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextArea; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.link.Link; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class OrgEntryPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + public String kindValue; + public String nameValue; + public String adminnameValue; + public String adminnamekanaValue; + public String postnumValue; + public String addressValue; + public String telnumValue; + public String mailValue; + public String mail2Value; + public boolean agreeValue; + + /* + * 画面の状態 + */ + /* 会員の種別選択完了 */ + private boolean completeKind = false; + /* 申請完了 */ + private boolean complete = false; + + public OrgEntryPage(PageParameters params) { + + + /* トップへ戻る */ + add(new ExternalLink("lnkTop", ResourceReader.getStringQuick("url.back.top"))); + + /* フィードバックメッセージ */ + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + + /* 入力フォーム */ + final Form form = new Form("form"); + form.setOutputMarkupId(true); + add(form); + + /* + * 機能制御 + */ + if (ResourceReader.getBooleanQuick("enable.orgentry") == false) { + form.setVisible(false); + error("現在この機能はご利用いただけません。"); + return; + } + + + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + String msg = ""; +// if(completeKind == false) { +// msg = "会員の種別を選択してください。"; +// } else if(complete == false) { +// msg = "申請内容を入力してください。"; +// } else { +// msg = "申請を行いました。申請の結果は連絡先メールアドレスへお送りします。しばらくお待ちください。"; +// } + return msg; + } + }; + info("会員の種別を選択してください。"); + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + form.add(resutlMessage); + + /* 入力コンポーネント定義 ---------------------------------------------------------------------------------*/ + + /* 会員の種別 ---------------------------------------------------------- */ + + WebMarkupContainer tableKind = new WebMarkupContainer("tableKind"){ + @Override + public boolean isVisible() { + /* 会員の種別選択されていれば表示しない */ + if(completeKind == true) { + return false; + } + return true; + } + }; + form.add(tableKind); + + /* 会員の種類 */ + List choiceKind = new ArrayList(); + choiceKind.add(new ChoiceElement(" ","")); + Map map = Org.getOrgkindMap(); + for(Entry e: map.entrySet()) { + choiceKind.add(new ChoiceElement(e.getKey(), e.getValue())); + } + final Model kindModel = new Model(); + ChoiceElement.setDropDownList(kindModel, choiceKind, " "); // 初期値設定 + + final DropDownChoice kind = new DropDownChoice( + "kind", kindModel, choiceKind, new ChoiceElement.Renderer()); + tableKind.add(kind); + + /* 会員の種別 以外---------------------------------------------------------- */ + + WebMarkupContainer tableMain = new WebMarkupContainer("tableMain") { + @Override + public boolean isVisible() { + /* 会員の種別が未選択の時は表示しない */ + if(completeKind == false) { + return false; + } + return true; + } + }; + form.add(tableMain); + + Label thAdminname = new Label("thAdminname", new Model(){ + @Override + public String getObject() { + if(Org.KIND_PERSONAL_STR.equals(kindModel.getObject().getId()) == false) { + return "担当者"; + } + return "氏名"; + } + }){ + }; + tableMain.add(thAdminname); + + /* 会員の種別(表示用)*/ + Label selectedKind = new Label("selectedKind", new Model(){ + @Override + public String getObject() { + String kindname = Org.getOrgkindMap().get(kindModel.getObject().getId()); + return kindname; + } + + }); + tableMain.add(selectedKind); + + /* 会員種別を選び直す */ + final Link selectedKindBack = new Link("selectedKindBack") { + @Override + public void onClick() { + + /* 入力値変換 */ + // なし + + /* 自画面再読み込み */ + setResponsePage(getPage().getClass()); + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return complete == false; + } + + }; + + tableMain.add(selectedKindBack); + + /* 団体名称 */ + TextField name = new TextField("name", new PropertyModel(this, "nameValue")){ + @Override + public boolean isVisible() { + if(Org.KIND_PERSONAL_STR.equals(kindModel.getObject().getId())) { // 個人の場合は非表示 + return false; + } + return true; + } + }; + tableMain.add(name); + + /* 申請者氏名 */ + TextField adminname = new TextField("adminname", new PropertyModel(this, "adminnameValue")); + tableMain.add(adminname); + + /* ふりがな */ + TextField adminnamekana = new TextField("adminnamekana", new PropertyModel(this, "adminnamekanaValue")); + tableMain.add(adminnamekana); + + /* 郵便番号 */ + TextField postnum = new TextField("postnum", new PropertyModel(this, "postnumValue")); + tableMain.add(postnum); + + /* 連絡先住所 */ + TextField address = new TextField("address", new PropertyModel(this, "addressValue")); + tableMain.add(address); + + /* 連絡先電話番号 */ + TextField telnum = new TextField("telnum", new PropertyModel(this, "telnumValue")); + tableMain.add(telnum); + + /* 連絡先メールアドレス */ + TextField mail = new TextField("mail", new PropertyModel(this, "mailValue")); + tableMain.add(mail); + + /* 連絡先メールアドレス確認用 */ + TextField mail2 = new TextField("mail2", new PropertyModel(this, "mail2Value")); + tableMain.add(mail2); + + /* 利用規約 */ + TextArea termsofuse = new TextArea("termsofuse", Model.of(ResourceReader.getText("message/termsofuse"))); + tableMain.add(termsofuse); + + final Model agreeModel = Model.of(false); + CheckBox agree = new CheckBox("agree", agreeModel); + tableMain.add(agree); + + /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/ + final Button btnCancel = new Button("btnCancel"){ + @Override + public void onSubmit() { + /* 入力値変換 */ + // なし + + /* 自画面再読み込み */ + setResponsePage(getPage().getClass()); + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return complete == false; + } + }; + form.add(btnCancel); + + Button btnSubmitKind = new Button("btnSubmitKind") { + @Override + public void onSubmit() { + /* 入力値変換 */ + kindValue = AppStringUtils.trim(kindModel); + + /* 入力値検査 */ + validItemNum(kindValue, "会員の種類", 1, 1); + + if(hasInputError()) return; // ここまででエラーチェック + + /* メッセージ表示 */ + info("申請内容を入力してください。"); + + /* 状態遷移 */ + completeKind = true; + } + @Override + public boolean isVisible() { + if(completeKind == true) { + return false; + } + if(complete == true) { + return false; + } + return true; + } + }; + form.add(btnSubmitKind); + + Button btnSubmit = new ConfirmAjaxButton("btnSubmit"){ + @Override + protected String getConfirmMessage() { + return "申請を行います。"; + } + + @Override + boolean executeBefore() { + /* モデル(PropertyModel以外)から値取得 */ + // なし + + /* 入力値変換 */ + kindValue = AppStringUtils.trim(kindModel); + nameValue = AppStringUtils.trim(nameValue); + adminnameValue = AppStringUtils.trim(adminnameValue); + adminnamekanaValue = AppStringUtils.trim(adminnamekanaValue); + postnumValue = AppStringUtils.trimHalf(postnumValue); + postnumValue = postnumValue.replaceAll("-", "");// 郵便番号からハイフン除去 + addressValue = AppStringUtils.trim(addressValue); + telnumValue = AppStringUtils.trimHalf(telnumValue); + mailValue = AppStringUtils.trimHalf(mailValue); + mail2Value = AppStringUtils.trimHalf(mail2Value); + agreeValue = agreeModel.getObject(); + + /* 入力値検査 */ + validItemNum(kindValue, "会員の種類", 1, 1); + if(hasInputError()) return false; // ここまででエラーチェック + + int iKindValue = AppUtils.toInteger(kindValue); + if(Org.KIND_PERSONAL != iKindValue) { + validItem(nameValue, "申請機関・団体", 1, 512); + validItem(adminnameValue, "担当者", 1, 512); + } else { + // 個人の場合は入力しない validItem(nameValue, "申請機関・団体", 1, 512); + validItem(adminnameValue, "氏名", 1, 512); + } + + validItem(adminnamekanaValue, "ふりがな", 1, 512); + validItemNum(postnumValue, "連絡先郵便番号", 7, 7); + validItem(addressValue, "連絡先住所", 1, 1024); + validItemTel(telnumValue, "連絡先電話番号", 1, 32); + validItemMail(mailValue, "連絡先メールアドレス", true); // フリーメールチェック + validItemMail(mail2Value, "メールアドレス確認用"); + + if(hasInputError()) return false; // ここまででエラーチェック + + + /* メールチェック */ + if(mailValue.equals(mail2Value) == false) { + error("連絡先メールアドレスが一致しません。"); + } + + if(mailAddressCheck.exist(mailValue)) { + error("この連絡先メールアドレスは既に使用されています。"); + } + + if(hasInputError()) return false; // ここまででエラーチェック + + if(agreeValue == false) { + error("利用規約に承諾しない場合は申請できません。"); + } + + if(hasInputError()) return false; // ここまででエラーチェック + + return true; + } + + @Override + void executeAfter(AjaxRequestTarget target) { + /* データアクセス 新規機関申請 */ + Org org = new Org(); + org.setKind(Integer.parseInt(kindValue)); + org.setName(nameValue); + org.setAdminname(adminnameValue); + org.setAdminnamekana(adminnamekanaValue); + org.setPostnum(postnumValue); + org.setTelnum(telnumValue); + org.setAddress(addressValue); + org.setMail(mailValue); + org.setEntrydate(AppUtils.createNowLong()); + org.setStatus(Org.STATUS_未処理); + + orgDao.add(org,AppDef.USERID_NONE); // 【データ更新】 + + /* + * 新着申請内容受信メール送信 + * + *・送信先 別紙参照 設定値一覧 新規機関申請通知先メールアドレス + *・申請画面URL http://~/orgentrydetail?orgid={機関ID} + */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.orgentry")); + setting.setMailTo(ResourceReader.getStringQuick("mailto.orgentry")); + String 申請画面URL = ResourceReader.getStringQuick("urlroot") + "orgentrydetail?orgid=" + org.getOrgid(); + setting.replace("申請画面URL", 申請画面URL); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + /* テスト自動化対応 */ + if (AppLogger.isDebug()) { + //info("メールに記載したURL【" + 本登録URL + "】"); + addDebugUrl(申請画面URL); + } + + /* メッセージ表示 */ + info("申請を行いました。申請の結果は連絡先メールアドレスへお送りします。しばらくお待ちください。"); + + /* 画面コンポーネントの再描画 */ + target.add(form); + + + /* 完了状態へ移行 */ + complete = true; + } + @Override + public boolean isVisible() { + if(completeKind == false) { + return false; + } + if(complete == true) { + return false; + } + return true; + } + }; + form.add(btnSubmit); + + + } + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgMemberListPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgMemberListPage.html new file mode 100644 index 0000000..bd314c2 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgMemberListPage.html @@ -0,0 +1,97 @@ + + + + + + + + + + 登録会員情報管理 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

登録会員情報管理

+ +
+

完了メッセージ

+ + 会員の種別:
+ 名称か氏名
+
+ +

登録会員

+
+
+ + + + + + + + + + + + + + + + +
登録会員名称会員種別状態会員数申請日時
○○中学校未処理 + 5(20) + 2015/3/28 XX:XX
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+ +

一括簡易登録

+
+
フィードバックメッセージ
+ ログインID:
+ パスワード:
+  連 番 : + ~
+
+ ※ 作成されるデータの例:ログインID:xxxx01 パスワード:xxxx01
+
+
+ +
+ +

データエクスポート

+ データエクスポートへ + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgMemberListPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgMemberListPage.java new file mode 100644 index 0000000..c7e04d9 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/OrgMemberListPage.java @@ -0,0 +1,477 @@ +package jp.co.y_net.amm.page; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.ChoiceElement; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.link.Link; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.PageableListView; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class OrgMemberListPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + // 無し + + /* + * 画面の状態 + */ + private boolean complete = true; + + /** + * ログインチェック定義 + * @see jp.co.y_net.amm.page.AppPage#validateLogin() + */ + @Override + public boolean validateLogin() { + if(AppSession.get().isLogin()) { + if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) { + return true; + } + } + return false; + } + + public OrgMemberListPage(PageParameters pageParams) { + + /* 戻るリンク */ + add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin"))); + + /* フィードバックメッセージ */ + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + + /* 入力フォーム */ + Form form = new Form("form"); + add(form); + + /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */ + form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。 + // なし + + if(hasInputError()) return; // ----------エラーがあれば中止 + form.setVisible(true); + + /* Form内の設定 ----------------------------------------------------------------------------------------------*/ + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(complete) { + return ""; + } + return ""; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + resutlMessage.setOutputMarkupId(true); + form.add(resutlMessage); + + /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/ + + /* 絞り込み */ + // 会員の種類 + List choiceKind = new ArrayList(); + choiceKind.add(new ChoiceElement(" ","(選択してください)")); + Map map = Org.getOrgkindMap(); + for(Entry e: map.entrySet()) { + choiceKind.add(new ChoiceElement(e.getKey(), e.getValue())); + } + final Model kindModel = new Model(); + ChoiceElement.setDropDownList(kindModel, choiceKind, " "); // 初期値設定 + final DropDownChoice filterKind = new DropDownChoice( + "filterKind", kindModel, choiceKind, new ChoiceElement.Renderer()); + filterKind.setOutputMarkupId(true); + form.add(filterKind); + + + // 名称|氏名での絞り込み + final TextField filterName = new TextField("filterName", Model.of("")); + filterName.setOutputMarkupId(true); + form.add(filterName); + // 名称|氏名のラベル + final Label labelFilterName = new Label("labelFilterName", new Model(){ + @Override + public String getObject() { + if(kindModel.getObject().getId().equals(" ")) { + return "名称か氏名"; + } else { + if(kindModel.getObject().getId().equals(Org.KIND_PERSONAL_STR)) { + return "会員の氏名"; + } else { + return "会員の名称"; + } + } + } + }); + labelFilterName.setOutputMarkupId(true); + form.add(labelFilterName); + // 会員の種類で表示するラベルを変更する。 + filterKind.add(new AjaxFormComponentUpdatingBehavior("onchange") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + target.add(labelFilterName); + } + }); + + + /* コンテナの設定 ------------------------------------------------------------------------------------------------*/ + /* + * 画面の部分更新の対象となるコンテナ + *  ページをインスタンス化するときに初期非表示としてはいけない。 + */ + final WebMarkupContainer orglistContainer = new WebMarkupContainer("orglistContainer"); + orglistContainer.setOutputMarkupId(true); + form.add(orglistContainer); + + final WebMarkupContainer orglistContainerData = new WebMarkupContainer("orglistContainerData"); + orglistContainer.add(orglistContainerData); + orglistContainerData.setOutputMarkupId(true); + + final WebMarkupContainer orglistContainerNoData = new WebMarkupContainer("orglistContainerNoData"); + orglistContainer.add(orglistContainerNoData); + + /* 一覧の設定 ------------------------------------------------------------------------------------------------*/ + + // LoadableDetachableModel は リクエストの最初に load にてデータを取得するモデル + final IModel> orgModel = new LoadableDetachableModel>() { + @Override + protected List load() { + + List list = new ArrayList(); + + if(kindModel.getObject().getId().equals(" ")) { + /* 「(選択してください)」のままなので、検索しない*/ + + } else { + String targetName = filterName.getValue(); + if(targetName != null) targetName = targetName.trim(); + + Org cnd = new Org(); + Integer kind = Integer.parseInt(kindModel.getObject().getId()); + cnd.setKind(kind); + List results = orgDao.get(cnd); + + if(StringUtils.isEmpty(targetName)) { + list.addAll(results); + } else { + for(Org result: results) { + if(result.getNameOrAdminname().contains(targetName)) { + list.add(result); + } + } + } + } + + /* 申請日付の新しい順でソート*/ + Collections.sort(list, new Org.EntryDateComparator(true)); + + return list; + } + }; + final PageableListView orglist = new PageableListView("orglist", orgModel, 20) { + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem item) { + final Org org = item.getModelObject(); + + /* 会員種別 */ + item.add(new Label("kind", org.getKind_Disp())); + + /* 名称とリンク */ + final PageParameters param = new PageParameters(); + param.add("orgid", org.getOrgid()); + //BookmarkablePageLink lnkName = new BookmarkablePageLink("lnkName", OrgDetailPage.class, param); + Link lnkName = new Link("lnkName") { + @Override + public void onClick() { + OrgDetailPage nextPage = new OrgDetailPage(param); + nextPage.setReturnPage(getPage()); + setResponsePage(nextPage); + } + + @Override + protected boolean isLinkEnabled() { + return Org.STATUS_本登録済み == org.getStatus(); + } + + }; + + String name = org.getNameOrAdminname(); + if(StringUtils.isEmpty(name)) { + name = "※"; // 仮に値が取得できない場合でも、リンクに使用されるため、疑似値を設定した。 + } + Label lnklblName = new Label("lnklblName", name); + lnkName.add(lnklblName); + item.add(lnkName); + + /* ステータス */ + item.add(new Label("status", org.getStatus_Disp())); + + /* 申請日時 */ + item.add(new Label("entrydate" , org.getEntrydate_Disp())); + + /* 子会員の情報を取得 */ + Usr usrCnd = new Usr(); + usrCnd.setOrgid(org.getOrgid()); + Usr usrCndNot = new Usr(); + usrCndNot.setStatus(Usr.STATUS_退会); + final List usrs = usrDao.get(usrCnd, usrCndNot); // 該当組織で退会していないデータのリスト + + /* 会員一覧へのリンク */ + Link lnkMemberlist = new Link("lnkMemberlist"){ + @Override + public void onClick() { + MemberListPage nextPage = new MemberListPage(param); + nextPage.setReturnPage(getPage()); + setResponsePage(nextPage); + } + @Override + public boolean isEnabled() { + return usrs.size() > 0; + } + }; + item.add(lnkMemberlist); + + /* 会員数(登録可能会員数)*/ + String 会員数と登録可能会員数 = String.valueOf(usrs.size()); + if(org.getLimitnum() != null && org.getLimitnum() >= 0) { + 会員数と登録可能会員数 += "(" + org.getLimitnum() + ")"; + } + lnkMemberlist.add(new Label("limitnum" , 会員数と登録可能会員数)); + + } + }; + orglistContainerData.add(orglist); + + /* ページングの部品 */ + final AjaxPagingNavigator pagingOrglist = new AjaxPagingNavigator("pagingOrglist", orglist){}; + orglistContainerData.add(pagingOrglist); + + + + /* コンテナ制御 */ + if(orgModel.getObject().isEmpty()) { + orglistContainerData.setVisible(false); + orglistContainerNoData.setVisible(true); + } else { + orglistContainerData.setVisible(true); + orglistContainerNoData.setVisible(false); + } + + + /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/ + AjaxButton btnSubmit = new AjaxButton("submitSelect") { + private static final long serialVersionUID = 1L; + @Override + protected void onSubmit(AjaxRequestTarget target, Form form){ + if(kindModel.getObject().getId().equals(" ")) { + /* 「(選択してください)」のままなので、検索しない*/ + error("会員の種別を選択してください。"); + target.add(feedbackPanel); + return; + } + /* コンテナ制御 */ + if(orgModel.getObject().isEmpty()) { + orglistContainerData.setVisible(false); + orglistContainerNoData.setVisible(true); + } else { + orglistContainerData.setVisible(true); + orglistContainerNoData.setVisible(false); + } + + target.add(orglistContainer); // 一覧再描画 + } + @Override + protected void onError(AjaxRequestTarget target, Form form) { + /* エラーハンドリングなし */ + } + }; + form.add(btnSubmit); + + + + /* 一括簡易登録 --------------------------------------------------------------------------------------------*/ + final WebMarkupContainer cntBachUsrCreate = new WebMarkupContainer("cntBachUsrCreate"); + form.add(cntBachUsrCreate); + + final FeedbackPanel fbBachUsrCreate = new FeedbackPanel("fbBachUsrCreate"); + fbBachUsrCreate.setOutputMarkupId(true); + cntBachUsrCreate.add(fbBachUsrCreate); + + final TextField idBase = new TextField("idBase", Model.of("")); + cntBachUsrCreate.add(idBase); + + final TextField pwBase = new TextField("pwBase", Model.of("")); + cntBachUsrCreate.add(pwBase); + + final TextField from = new TextField("from", Model.of("")); + cntBachUsrCreate.add(from); + + final TextField to = new TextField("to", Model.of("")); + cntBachUsrCreate.add(to); + + final WebMarkupContainer cntExample = new WebMarkupContainer("cntExample"); + cntExample.setOutputMarkupPlaceholderTag(true); + cntExample.setOutputMarkupId(true); + cntExample.setVisible(false); + cntBachUsrCreate.add(cntExample); + + /* 作成例のリアルタイム更新 */ + idBase.add(new AjaxFormComponentUpdatingBehavior("onchange") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + updateExample(fbBachUsrCreate, idBase, pwBase, from, to, cntExample, target); + } + }); + pwBase.add(new AjaxFormComponentUpdatingBehavior("onchange") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + updateExample(fbBachUsrCreate, idBase, pwBase, from, to, cntExample, target); + } + }); + from.add(new AjaxFormComponentUpdatingBehavior("onchange") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + updateExample(fbBachUsrCreate, idBase, pwBase, from, to, cntExample, target); + } + }); + to.add(new AjaxFormComponentUpdatingBehavior("onchange") { + @Override + protected void onUpdate(AjaxRequestTarget target) { + updateExample(fbBachUsrCreate, idBase, pwBase, from, to, cntExample, target); + } + }); + + Button submitBachUsrCreate = new ConfirmAjaxButton("submitBachUsrCreate"){ + @Override + boolean executeBefore() { + + /* 入力値検査 */ + String idBaseValue = idBase.getValue(); + String pwBaseValue = pwBase.getValue(); + String fromValue = from.getValue(); + String toValue = to.getValue(); + String errorMessage = batchUsrCreate.validInputs(idBaseValue, pwBaseValue, fromValue, toValue); + if (StringUtils.isEmpty(errorMessage) == false) { + error(errorMessage); + return false; + } + + return true; + } + @Override + protected String getConfirmMessage() { + return "一括登録を行います。"; + } + @Override + void executeAfter(AjaxRequestTarget target) { + + /* 入力値検査 */ + String idBaseValue = idBase.getValue(); + String pwBaseValue = pwBase.getValue(); + String fromValue = from.getValue(); + String toValue = to.getValue(); + + /* 一括作成実施 */ + String errorMessage = batchUsrCreate.execute(idBaseValue, pwBaseValue, fromValue, toValue); + + if (StringUtils.isEmpty(errorMessage) == false) { + fbBachUsrCreate.error(errorMessage); + target.add(fbBachUsrCreate); + return; + } + + /* 画面部品の更新 */ + filterKind.setDefaultModelObject(new ChoiceElement("9", "個人")); + filterName.setDefaultModel(Model.of(idBase.getValue())); + target.add(filterName); + target.add(filterKind); + + /* 画面部品の更新 一覧 */ + if(orgModel.getObject().isEmpty()) { + orglistContainerData.setVisible(false); + orglistContainerNoData.setVisible(true); + } else { + orglistContainerData.setVisible(true); + orglistContainerNoData.setVisible(false); + } + + target.add(orglistContainer); // 一覧再描画 + + } + }; + + cntBachUsrCreate.add(submitBachUsrCreate); + + /* データエクスポート-----------------------------------------------------------------------------------------*/ + form.add(new BookmarkablePageLink("goExport", ExportPage.class)); + } + + /** + * 一括簡易登録 即時検証メッセージの表示 + * @param fb + * @param idBase + * @param pwBase + * @param from + * @param to + * @param cntExample + * @param target + */ + private void updateExample(FeedbackPanel fb, final TextField idBase, final TextField pwBase, + final TextField from, final TextField to, final WebMarkupContainer cntExample, AjaxRequestTarget target) { + + String idBaseValue = idBase.getValue(); + String pwBaseValue = pwBase.getValue(); + String fromValue = from.getValue(); + String toValue = to.getValue(); + + /* 入力値検査 */ + String errorMessage = batchUsrCreate.validInputs(idBaseValue, pwBaseValue, fromValue, toValue); + if (StringUtils.isEmpty(errorMessage) == false) { + fb.error(errorMessage); + target.add(fb); + return; + } + + cntExample.setVisible(true); + cntExample.addOrReplace(new Label("example", + "[ログインID『"+ batchUsrCreate.combine(idBaseValue, fromValue) + "』" + + " パスワード『"+ batchUsrCreate.combine(pwBaseValue, fromValue) + "』]")); + + /* 表示用コンポーネント更新 */ + target.add(fb); + target.add(cntExample); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordInfoPanel.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordInfoPanel.html new file mode 100644 index 0000000..85c3b3b --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordInfoPanel.html @@ -0,0 +1,15 @@ + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx
+ 有効期限 2015/09/12 20:20:15
+ + 期限が切れています。
+
+
+
この管理者のパスワードは変更されていません。
+ +
+ \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordInfoPanel.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordInfoPanel.java new file mode 100644 index 0000000..14660ad --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordInfoPanel.java @@ -0,0 +1,115 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.CalcHash; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Pwtckt; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.service.PasswordTicketManager; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.spring.injection.annot.SpringBean; + +public class PasswordInfoPanel extends Panel { + private static final long serialVersionUID = 1L; + + @SpringBean(name="passwordTicketManager") + protected PasswordTicketManager passwordTicketManager; + + + public PasswordInfoPanel(String id, Usr usr, boolean isSystemAdmin) { + this(id, usr, isSystemAdmin, false); + } + public PasswordInfoPanel(String id, final Usr usr, boolean isSystemAdmin, boolean 有効期限を超過している場合も表示する) { + super(id); + + /* + * 運営管理者でなければパネルごと非表示 + */ + if(isSystemAdmin == false) { + this.setVisible(false); + return; + } + + /* 対象ユーザが指定sれていなければパネルごと非表示 */ + if(usr == null) { + this.setVisible(false); + return; + } + + + + Pwtckt pwtckt = passwordTicketManager.getユーザに紐づくチケット(usr.getUsrid()); + + String パスワード登録用のURL = ""; + if(pwtckt != null) { + パスワード登録用のURL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + pwtckt.getTicket(); + } + + String 有効期限 = "yyyy/MM/dd HH:mm:ss"; + if(pwtckt != null) { + 有効期限 = AppUtils.toStrYyyyMMdd_HHmmss(pwtckt.getTicketdate()); + } + + Long now = AppUtils.createNowLong(); + boolean is有効期限を超過している = false; + if(pwtckt != null) { + is有効期限を超過している = pwtckt.getTicketdate() < now; // 現在日付より過去のとき + } + + + + /* パスワード登録用URLの発行状況の領域 */ + WebMarkupContainer pwtcktInfo = new WebMarkupContainer("pwtcktInfo"); + add(pwtcktInfo); + + if(有効期限を超過している場合も表示する) { + pwtcktInfo.setVisible(pwtckt != null); + + } else { + pwtcktInfo.setVisible(pwtckt != null && is有効期限を超過している == false); + } + + + /* URL */ + Label url = new Label("url", パスワード登録用のURL); + pwtcktInfo.add(url); + + /* パスワードの有効期限 */ + Label pwtcktLabel = new Label("pwtckt", 有効期限); + pwtcktInfo.add(pwtcktLabel); + + /* 「期限が切れています。」 */ + Label msg = new Label("msg", "有効期限が切れています。"); + msg.setVisible(is有効期限を超過している); + pwtcktInfo.add(msg); + + + /* + * 管理者のDefaultパスワードチェック + */ + Label adminInfo = new Label("adminInfo", "この管理者のパスワードは初期値のままです。"){ + @Override + public boolean isVisible() { + if(usr.getKind() == Usr.KIND_運営管理者) { + String defaultPasshash = ""; + defaultPasshash = CalcHash.passowrdHash(Usr.管理者初期パスワード, usr.getLoginid()); // 初期パスワード + if(usr.getPwhash().equals(defaultPasshash)) { + return true; + } else { + return false; + } + } else { + return false; + } + } + }; + add(adminInfo); + } + + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordResetPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordResetPage.html new file mode 100644 index 0000000..c05017d --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordResetPage.html @@ -0,0 +1,45 @@ + + + + + + + + + + パスワードリセット + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+

パスワード再設定用のメールを送りました。ご確認ください。

+ + + + + +
メールアドレス
+ +
+ + +
+ +
+
+ +tml> \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordResetPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordResetPage.java new file mode 100644 index 0000000..3a258d6 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/PasswordResetPage.java @@ -0,0 +1,137 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppSendMail; +import jp.co.y_net.amm.common.AppSendMail.MailSetting; +import jp.co.y_net.amm.common.AppStringUtils; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.Usr; + +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; + +public class PasswordResetPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + + /* + * 画面入力値 + */ + public String mailValue; + + /* + * 画面の状態 + */ + private boolean complete = false; + + public PasswordResetPage() { + + /* トップへ戻る */ + add(new ExternalLink("lnkTop", ResourceReader.getStringQuick("url.back.top"))); + + add(new FeedbackPanel("feedback")); + + Form form = new Form("form"); + add(form); + + + + /* 完了メッセージ */ + Model resultMessageModel = new Model() { + @Override + public String getObject() { + if(complete) { + return "パスワード再設定用のメールを送りました。ご確認ください。"; + } + return "登録したメールアドレスを入力してください。
"+ +"入力されたメールアドレス宛てにメールをお送りします。
" + +"メール内のリンクからパスワードを再設定してください。
"; + } + }; + final Label resutlMessage = new Label("resutlMessage", resultMessageModel); + resutlMessage.setEscapeModelStrings(false); + form.add(resutlMessage); + + /* 入力コンポーネント定義 ---------------------------------------------------------------------------------*/ + TextField mail = new TextField("mail", new PropertyModel(this, "mailValue")); + form.add(mail); + + /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/ + final Button btnSubmit = new Button("btnSubmit"){ + @Override + public void onSubmit() { + + /* 入力値変換 */ + mailValue = AppStringUtils.trimHalf(mailValue); + + /* 入力値検査 */ + validItemMail(mailValue, "メールアドレス"); + + if(hasInputError()) return; // ここまででエラーチェック + + Usr usr = usrDao.getByLoginid(mailValue); + if(usr == null) { + error("このメールアドレスは登録されていません。"); + } + + if(hasInputError()) return; // ここまででエラーチェック + + if(usr.getStatus() == Usr.STATUS_退会) { + error("退会しています。"); + } + if(usr.isログイン停止()) { + error("ログイン停止中です。"); + } + Integer orgId = usr.getOrgid(); + Org org = orgDao.getByOrgid(orgId); + if(org==null) { + AppLogger.error(usr.getLoginid() + "に組織情報が紐づいていません。"); + error("エラーが発生しました。"); + } + if(org != null && org.is利用可能期間内() == false) { + error("利用可能期間外です。"); + } + + if(hasInputError()) return; // ここまででエラーチェック + + /* 共通機能:パスワード登録チケット発行 からチケットを取得する */ + String random = passwordTicketManager.executeパスワードリセット(usr.getUsrid()); + + /* パスワード再設定用メールを送信する */ + MailSetting setting = new MailSetting(); + setting.setTemplate(ResourceReader.getText("message/mail.resetpw")); + setting.setMailTo(mailValue); + String パスワード登録画面のURL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random; + setting.replace("パスワード登録画面のURL", パスワード登録画面のURL); + boolean sendmailrsult = AppSendMail.send(setting); + if(sendmailrsult == false) { + error("メールの送信に失敗しました。"); + } + + /* テスト自動化対応 */ + if (AppLogger.isDebug()) { + //info("メールに記載したURL【" + パスワード登録画面のURL + "】"); + addDebugUrl(パスワード登録画面のURL); + } + + /* 完了状態へ遷移 */ + complete = true; + } + @Override + public boolean isVisible() { + /* 完了後の状態ならボタンを表示しない */ + return complete == false; + } + }; + form.add(btnSubmit); + } + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/StubLogin.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/StubLogin.html new file mode 100644 index 0000000..3bd9f3f --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/StubLogin.html @@ -0,0 +1,70 @@ + + + + + + + + + + ログインのサンプル + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
チャレンジ値(A)
+ これは事前に /api/challengestring から取得する値です。
メールアドレス(B)
+ これはユーザに入力してもらう値です。 +
パスワード(C)
+ これはユーザに入力してもらう値です。 +
パスワードハッシュ(D)
+ これはログインボタンがクリックされた後にクライアントのブラウザで計算する値です。Hiddenで保持することを想定します。 +
チャレンジレスポンス(E)
+ これはログインボタンがクリックされた後にクライアントのブラウザで計算する値です。Hiddenで保持することを想定します。 +
+
+ + + +
+ +
+
+
+ログインボタンがクリックされたとき、次の結果が得られれば正しいです。
+パスワードハッシュ(D)=a4aab8fb4c4e0284197d07fe5f3106709b4015661ad9006cbb2f4f7304f0fa18
+チャレンジレスポンス(E)=98d2f4c10eb32bd82d66b86c36a89b9cf31b86065dfce40f6d334dc90d2b2262
+
+文書管理システムは、クライアントから「メールアドレス(B)」と「チャレンジレスポンス(E)」を受け取り、次のAPIで会員管理に問い合わせます。 +
+http://localhost:8080/AMM/api/logincheck?loginid=okita%40example.com&cres=98d2f4c10eb32bd82d66b86c36a89b9cf31b86065dfce40f6d334dc90d2b2262&cstr=YscDAWTcKVLykoXL +
+ + + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/TopPage.html b/AMM_web/src/main/java/jp/co/y_net/amm/page/TopPage.html new file mode 100644 index 0000000..db091d7 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/TopPage.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + ログイン + + + +
+
+ + +

+ + + +このページは表示できません。 + + + + + +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/TopPage.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/TopPage.java new file mode 100644 index 0000000..3cb295e --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/TopPage.java @@ -0,0 +1,11 @@ +package jp.co.y_net.amm.page; + + +/** + * トップページ + * @author k_inaba + */ +public class TopPage extends CommonFrameA { + private static final long serialVersionUID = 1L; + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/css/app.css b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/app.css new file mode 100644 index 0000000..1c2ade3 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/app.css @@ -0,0 +1,333 @@ +@charset "utf-8"; + +/* 全体構成 */ +body { + margin: 0; + padding: 0; + background-color: #FFF; +} +#base{ + margin: 0; + padding: 10px 2%; +} +#containts{ + margin: 0; + padding: 10px; + background-color: #FFF; +} +/* 標準化、リセット */ +*{ + line-height: 1.8em; + font-family: + 'Lucida Grande', + 'Hiragino Kaku Gothic ProN', + 'ヒラギノ角ゴ ProN W3', + Meiryo, メイリオ, sans-serif; + font-size: 1.0em; +} +h1, h2, h3, h4, h5, h6 { + margin: 10px; + padding: 2px; /* 上下 */ + /* border: solid 1px #f00; */ + color:#333; +} +h1 { + margin: 1.5em 0 20px 0; + border-left:5px solid #F19244; + background: #FDE9D9; + color:#333; +} +h2 { + border-left:5px solid #F19244; + border-bottom:2px double #F19244; + margin: 1em 0px 10px 0; + padding: 1px; /* 上下 */ +} +h3 { + border-bottom:2px double #F19244; + padding: 0px; /* 上下 */ + margin: 0.5em 0px 10px 0; +} +h4{ + border-bottom:1px solid #F19244; + margin: 1px; /* 上右下左 */ + padding: 0px; /* 上下 */ +} +h5 { + border-bottom:1px dotted #F19244; + margin: 0px; /* 上右下左 */ + padding: 0px; /* 上下 */ + +} +h6 { + margin: 0px; /* 上右下左 */ + padding: 0px; /* 上下 */ + +} + +/* 文章 */ +p, dl { + /* border: solid 1px #f00; */ + margin: 5px; + padding: 0; + line-heigh: 1.8em; +} +ul, ol { + /* border: solid 1px #f00; */ + margin: 5px; + /*padding: 0;*/ +} +p:first-letter { + /* 段落落とし + margin-left: 1.0em; + */ +} +p.notice { + border: 1px dotted #cccccc; +} + +/* table */ +table, +th, +td { + border-collapse: collapse; + border-spacing: 0; +} +table { + width: auto; + margin: 10px; + padding: 5px; + border: 1px solid #333333; +} + +table th, +table td { + padding: 3px; +} +th { + border-bottom: 1px solid #333333; + white-space: nowrap; +} +td { + border: 1px solid #333333; +} + +/* リンク先のURLを可視化する +a:after{ + content: " (" attr(href) ") "; + font-size: 0.8em; +} +*/ + +/* 囲み */ +.kakomi { + border: 2px dotted #333333; + margin: 5px; + padding: 5px; +} + +/* レスポンシブ対応 */ +#mobile{ + display:none; +} +/* @media screen and (max-width:320px){ +PC ⇒ 960px~1024px +タブレット ⇒ 640px~960px +スマホ ⇒ 320px~640px +*/ +@media screen and (max-width:320px){ + + * { + font-size: 98%; + } + ul, ol { + margin: 0; + padding: 0; + padding-left: 1.5em; + } + table { + width: 80%; + margin: 0 auto; + padding: 5px; + border: 0px solid #333333; + } + th, td { + display: block; + border: 1px solid #333333; + } + /* mobile用のリンク */ + a { + display: block; + position: relative; + border: 1px solid #ccc; + background: linear-gradient(#fff, #f0f0f0); + border-top: 1px solid #ccc; + padding: 10px; + padding-right: 30px; + margin: 1px; + text-decoration: none; + } + a:after { + display: block; + position: absolute; + top: 50%; + right: 10px; + width: 20px; + height: 20px; + margin-top: -15px; + content: "≫"; + font-size: 150%; + font-weight: bold; + } + /* mobile版であることを表すFotter */ + #mobile{ + display:block; + /*position: relative;*/ + position: fixed ; + width: 100%; + bottom: 0; + left: 0; + /*border: 1px solid #ccc;*/ + padding: 1px; + margin: 0; + background-color : #09C; + text-decoration: none; + font-size: 0.8em; + color: #FFF; + opacity: 0.30; + } +} +.clear { clear:both; } +.clear hr { display:none; } + +/*****************************************************************************************************************/ +/* AMM用記述 +/*****************************************************************************************************************/ +#head { + font-size: 150%; + border-bottom:5px double #09C; +} +#head a{ + text-decoration: none; +} +#divLoginUser{ + margin-top: 20px; + float: right; + font-size: 100%; +} +#divLoginUser form{ + + display: inline; +} +#buttonLogout{ + /*border-style: none;*/ + text-decoration: none; + font-weight: bold; + text-align: center; + + +} +#footer { + text-align: center; + margin-top: 20px; + font-size: 80%; + border-top:5px double #F19244; +} +.devnote { + display: block; + /*display:none;*/ + width:30em; + background-color: #FEE; + border: 1px dotted #333333; + margin:10px; +} +.devnoteIn { + /*display:none;*/ + background-color: #FEE; + border: 1px dotted #333333; + margin:10px; +} +/* 未訪問と訪問済みを同一色とする */ +a:link {color:#0000ff;} +a:visited {color:#0000ff;} +/* ただしお知らせは訪問済みを変更する */ +a.info:link {color:#2200C1;} +a.info:visited {color:#551A8B;} + +.linktop { + display: none; + position: fixed; + bottom:20px; + right: 0px; + text-indent:0px; + color:#fff + +} +table { + width: auto; + margin: 10px; + padding: 5px; + border: 1px solid #333333; +} + +table.border0, +table.border0 th, +table.border0 td { + border: 0; + margin:0; + padding:0; +} +.feedbackPanelERROR { + color:red; +} +.feedbackPanelINFO { + color:black; +} +.imeoff{ + ime-mode: inactive; +} +.imeon{ + ime-mode: active; +} +.strong { + color:red; +} +input[type="text"] { + border: 1px solid #333333; + border-radius: 0px; + font-size: 100%; + font-weight: bold; + height: 1.5em; + padding: 0 3px; + width: 300px; +} +input[type="text"].with50 { + width: 50px; +} +input[type="password"] { + border: 1px solid #333333; + border-radius: 0px; + font-size: 100%; + font-weight: bold; + height: 1.5em; + padding: 0 3px; + width: 300px; +} +select { + border: 1px solid #333333; + border-radius: 0px; + font-size: 100%; + font-weight: bold; + height: 1.5em; + padding: 0 3px; + width: 300px; +} +.selectYmd select{ + border: 1px solid #333333; + border-radius: 0px; + font-size: 100%; + font-weight: bold; + height: 1.5em; + padding: 0 3px; + width: 100px; +} \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/css/base.css b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/base.css new file mode 100644 index 0000000..0f218e4 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/base.css @@ -0,0 +1,91 @@ +@CHARSET "UTF-8"; + +/***********************/ +/* 全体構造とデザイン */ +/***********************/ +html { height:100% } + +body { + height:100%; + font-family: "Hiragino Kaku Gothic ProN", Meiryo, sans-serif; + background-image:url('../res/tile-canvas.png'); + color: #333; + background-color: #fafafa; + font-family : 'Hiragino Kaku Gothic Pro', Meiryo, san-serif; + font-size: 10.5pt; + line-height: 1.7; + position: relative; +} + + +div.cs_content_header { + width:100%; + height:70px; + min-width:930px; + background-image:url('../res/top-banner-back.png'); +} + +div.cs_content_main { + min-width:900px; +/* height:400px; */ + height: calc(100% - 100px); + margin:0 10px 10px 10px; + border:solid 1px #934200; + border-top:0; + background-color:#ffffff; + padding:3px; + border-radius: 5px / 5px; + position: relative; +} + +div.cs_content_footer { + height:10px; +} + +/***********************/ +/* ヘッダーのデザイン */ +/***********************/ +.cs_content_header_title { + width:100%; + height:70px; + background-image:url('../res/top-banner.png'); + background-repeat:no-repeat; +} + +.cs_content_header_title div.user_name { + height:30px; + padding:12px 11px 0 0; + text-align:right; +} + +.cs_content_header_title div.breadcrumb_bar { + height:35px; + padding:0 15px 0 0; + text-align:right; +} + +/* 標準ボタンのデザイン */ +input[type="button"] { + font-family : 'Hiragino Kaku Gothic Pro', Meiryo, san-serif; + padding:3px 0; + cursor:pointer; + font-weight:bold; + text-shadow: 1px 1px 1px #ffffff +} + +input[type="button"].logout_btn { + width:120px; + font-weight:bold; + font-family : 'Hiragino Kaku Gothic Pro', Meiryo, san-serif; + padding:0px; + cursor:pointer; +} + + +#title_bar {} +#title {} +#user_name {} +#breadcrumb_bar {} + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/css/css_ReadMe.txt b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/css_ReadMe.txt new file mode 100644 index 0000000..3af846f --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/css_ReadMe.txt @@ -0,0 +1,8 @@ +2016/03/26 k.inaba + +文書管理システムより以下を取得 +init.css +base.css +page.css + +以上 diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/css/init.css b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/init.css new file mode 100644 index 0000000..8856957 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/init.css @@ -0,0 +1,83 @@ +@CHARSET "UTF-8"; + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-style:normal; + font-weight: normal; + font-size: 100%; + vertical-align: baseline; +} + +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + +html{ + overflow-y: scroll; +} + +blockquote, q { + quotes: none; +} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +input, textarea,{ + margin: 0; + padding: 0; +} + +ol, ul{ + list-style:none; +} + +table{ + border-collapse: collapse; + border-spacing:0; +} + +th, td { + vertical-align:top; +} + +caption, th{ + text-align: left; +} + +a:focus { + outline:none; +} + +a { + color: #3C25A1; +} +a:visited { + color: #3C25A1; + text-decoration: none; +} +a:hover { + color: #66f; + text-decoration: underline; +} + + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/css/page.css b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/page.css new file mode 100644 index 0000000..17405d5 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/css/page.css @@ -0,0 +1,92 @@ +@CHARSET "UTF-8"; + +/**********************/ +/* ページのデザイン */ +/**********************/ + +div.content_main_div { + margin:0 auto; + width:50%; + position:relative; + top:100px; + background-image:url('../../res/tile.png'); + background-color:#ffffff; + border:1px solid #f79646; + border-radius: 5px / 5px; + padding:9px; +} + + +/* ログインテーブル */ + +table.content_main_table { + margin:0 auto; +} + +table.content_main_table td { + padding:6px 15px; + text-align:center; + vertical-align:middle; +} + +/* input のデザイン */ +input[type="button"] { + width:120px; +} + +input[type="text"] { + width:300px; + height:1.5em; + border:solid 1px #f79646; + border-radius: 5px / 5px; + font-size:1.3em; + font-weight:bold; + padding:0 3px; +} +input[type="password"] { + width:300px; + height:1.3em; + border:solid 1px #f79646; + font-size:1.3em; + font-weight:bold; + border-radius: 5px / 5px; + padding:0 3px; +} + +#content_pane {} +#content_table {} +#content_table td {} +#title_bar {} +#title {} +#user_name {} +#breadcrumb_bar {} +#content_table {} +#content_table td {} +.col1 {} +.col2 {} +.col2_input {} + + +/* お知らせテーブル */ + +div.info_div { + margin:1em auto; + width:50%; + position:relative; + top:100px; + background-image:url('../../res/tile.png'); + background-color:#ffffff; + border:1px solid #f79646; + border-radius: 5px / 5px; + padding:9px; +} + +talbe.info_table { + margin:0 auto; +} + +table.info_table td { + padding:6px 15px; + text-align:center; + vertical-align:middle; +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/js/CalcHash.js b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/CalcHash.js new file mode 100644 index 0000000..413095d --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/CalcHash.js @@ -0,0 +1,25 @@ +function eventLogin(ret){ + + var challengeA=document.form.textChallenge.value; + var loginidB=document.form.textLoginId.value; + var passwordC=document.form.textPassword.value; + var passwordHashD=passowrdHash(passwordC, loginidB); + document.form.textPasswordHash.value=passwordHashD; + document.form.textChallengeResponse.value=challengeResponse(passwordHashD, challengeA); + + if(ret == true) { + /* パスワード、パスワードハッシュは送信しないので消去 */ + document.form.textPassword.value=""; + document.form.textPasswordHash.value=""; + } + + + return ret; +} + +function passowrdHash(password, account){ + return CryptoJS.SHA256(account+":"+password); +} +function challengeResponse(phash, chvalue) { + return CryptoJS.SHA256(phash+":"+chvalue); +} \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/js/CalcHash.js.back b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/CalcHash.js.back new file mode 100644 index 0000000..df0f2f4 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/CalcHash.js.back @@ -0,0 +1,30 @@ +function eventLogin(ret){ + + var challengeA=document.form.textChallenge.value; + var loginidB=document.form.textLoginId.value; + var passwordC=document.form.textPassword.value; + var passwordHashD=passowrdHash(passwordC, loginidB); + document.form.textPasswordHash.value=passwordHashD; + document.form.textChallengeResponse.value=challengeResponse(passwordHashD, challengeA); + + if(ret == true) { + /* パスワード、パスワードハッシュは送信しないので消去 */ + document.form.textPassword.value=""; + document.form.textPasswordHash.value=""; + } + + + return ret; +} +var STRETCH_COUNT=500; +function passowrdHash(password, loginId){ + var salt = CryptoJS.SHA256(loginId); + var hash = ""; + for (var i = 0; i < STRETCH_COUNT; i = i +1){ + hash = CryptoJS.SHA256(hash + salt + password); + } + return hash; +} +function challengeResponse(passwordHash, challenge) { + return CryptoJS.SHA256(passwordHash + challenge); +} \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/js/app.js b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/app.js new file mode 100644 index 0000000..005d724 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/app.js @@ -0,0 +1,28 @@ +/* ページトップへ */ +$(document).ready(function(){ + + var pagetop = $('.linktop'); + $(window).scroll(function(){ + if ( $(this).scrollTop() > 100 ) { + pagetop.fadeIn(); + } else { + pagetop.fadeOut(); + } + }); + pagetop.click(function () { + $('body, html').animate({ scrollTop: 0 }, 600); + return false; + }); + +}); + +/* 確認ダイアログ */ +function confirmDisp(){ + if(window.confirm("処理を行います。")){ + return true; + } else{ + return false; + } +} + + diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js new file mode 100644 index 0000000..da41706 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("':""),a._keyEvent=!1,K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='
',m="";if(f||!i)m+=''+g[b]+"";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='"}k||(l+=m+(f||!i||!j?" ":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+=''+c+"";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='",l+=a.yearshtml,a.yearshtml=null}}return l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?" ":"")+m),l+="
",l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&bd?d:e,e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));return b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth())),this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");return b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10),{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);return typeof a!="string"||a!="isDisabled"&&a!="getDate"&&a!="widget"?a=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b)):this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)}):$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.24",window["DP_jQuery_"+dpuuid]=$})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.progressbar.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("
").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){return a===b?this._value():(this._setOption("value",a),this)},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;return typeof a!="number"&&(a=0),Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.24"})})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +jQuery.effects||function(a,b){function c(b){var c;return b&&b.constructor==Array&&b.length==3?b:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))?[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))?[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:(c=/rgba\(0, 0, 0, 0\)/.exec(b))?e.transparent:e[a.trim(b).toLowerCase()]}function d(b,d){var e;do{e=(a.curCSS||a.css)(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};return a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete,[b,c,d,e]}function l(b){return!b||typeof b=="number"||a.fx.speeds[b]?!0:typeof b=="string"&&!a.effects[b]?!0:!1}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){return a.isFunction(d)&&(e=d,d=null),this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class")||"";a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.24",save:function(a,b){for(var c=0;c").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;try{e.id}catch(f){e=document.body}return b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;return b.parent().is(".ui-effects-wrapper")?(c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus(),c):b},setTransition:function(b,c,d,e){return e=e||{},a.each(c,function(a,c){var f=b.cssUnit(c);f[0]>0&&(e[c]=f[0]*d+f[1])}),e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];return a.fx.off||!i?h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)}):i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="show",this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="hide",this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);return c[1].mode="toggle",this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];return a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])}),d}});var m={};a.each(["Quad","Cubic","Quart","Quint","Expo"],function(a,b){m[b]=function(b){return Math.pow(b,a+2)}}),a.extend(m,{Sine:function(a){return 1-Math.cos(a*Math.PI/2)},Circ:function(a){return 1-Math.sqrt(1-a*a)},Elastic:function(a){return a===0||a===1?a:-Math.pow(2,8*(a-1))*Math.sin(((a-1)*80-7.5)*Math.PI/15)},Back:function(a){return a*a*(3*a-2)},Bounce:function(a){var b,c=4;while(a<((b=Math.pow(2,--c))-1)/11);return 1/Math.pow(4,3-c)-7.5625*Math.pow((b*3-2)/22-a,2)}}),a.each(m,function(b,c){a.easing["easeIn"+b]=c,a.easing["easeOut"+b]=function(a){return 1-c(1-a)},a.easing["easeInOut"+b]=function(a){return a<.5?c(a*2)/2:c(a*-2+2)/-2+1}})}(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.blind.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.bounce.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight(!0)/3:c.outerWidth(!0)/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.fade.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.fold.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.highlight.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.pulsate.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show"),e=(b.options.times||5)*2-1,f=b.duration?b.duration/2:a.fx.speeds._default/2,g=c.is(":visible"),h=0;g||(c.css("opacity",0).show(),h=1),(d=="hide"&&g||d=="show"&&!g)&&e--;for(var i=0;i').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);; \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/js/sha256.js b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/sha256.js new file mode 100644 index 0000000..529db30 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/js/sha256.js @@ -0,0 +1,16 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}}, +q=t.WordArray=j.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||u).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<< +32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b, +2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}}, +x=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;mk;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]= +c[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes; +d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math); diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/package-info.java b/AMM_web/src/main/java/jp/co/y_net/amm/page/package-info.java new file mode 100644 index 0000000..f279b1a --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/package-info.java @@ -0,0 +1,7 @@ +/** + * ページクラスとそのリソース(主にHTML)を保存するパッケージ + * WEBOPAC開発では、HTMLを別のフォルダで管理していたが、 + * 開発効率向上の観点から、この配置を提案する。 + * 2015/04/22 k.inaba + */ +package jp.co.y_net.amm.page; \ No newline at end of file diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/res/css_ReadMe.txt b/AMM_web/src/main/java/jp/co/y_net/amm/page/res/css_ReadMe.txt new file mode 100644 index 0000000..ee6c952 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/res/css_ReadMe.txt @@ -0,0 +1,5 @@ +2016/03/26 k.inaba + +文書管理システムより画像を取得 + +以上 diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/res/top-banner-back.png b/AMM_web/src/main/java/jp/co/y_net/amm/page/res/top-banner-back.png new file mode 100644 index 0000000..fb11133 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/res/top-banner-back.png Binary files differ diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/page/res/top-banner.png b/AMM_web/src/main/java/jp/co/y_net/amm/page/res/top-banner.png new file mode 100644 index 0000000..260925c --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/page/res/top-banner.png Binary files differ diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/BatchUsrCreate.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/BatchUsrCreate.java new file mode 100644 index 0000000..0f327aa --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/BatchUsrCreate.java @@ -0,0 +1,205 @@ +package jp.co.y_net.amm.service; + +import java.util.List; + +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.CalcHash; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.spring.injection.annot.SpringBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.stereotype.Component; + +@Component("batchUsrCreate") +public class BatchUsrCreate { + + @Autowired(required = true) + @Qualifier("usrDao") + protected UsrDao usrDao; + + @Autowired(required = true) + @Qualifier("orgDao") + protected OrgDao orgDao; + + @Autowired(required = true) + @SpringBean(name="mailAddressCheck") + protected MailAddressCheck mailAddressCheck; + + public static void main(String[] args) { + + final ClassPathXmlApplicationContext context = + new ClassPathXmlApplicationContext("applicationContextBase.xml", "hibernateContextBase.xml"); + + final BatchUsrCreate me = (BatchUsrCreate)context.getBean("batchUsrCreate"); + me.execute("temp", "pass", "0", "8"); + + } + + public String validInputs(String idBase, String pwBase, String from, String to) { + if (StringUtils.isEmpty(idBase) || idBase.length() > 5) { + return "ログインIDの接頭文字を5文字以内で入力してください。"; + } + if (StringUtils.isEmpty(pwBase) || pwBase.length() > 5) { + return "パスワードの接頭文字を5文字以内で入力してください。"; + } + int iFrom = toInt(from); + int iTo = toInt(to); + if (iFrom == -1 || iTo == -1) { + return "連番を0~99で入力してください。"; + }; + if (iFrom > 99 || iTo > 99) { + return "連番を0~99で入力してください。"; + }; + if (iFrom > iTo) { + return "連番の大小関係が不正です。"; + } + return null; + } + + public String execute(String baseId, String basePw, String from, String to) { + int iFrom = toInt(from); + int iTo = toInt(to); + String errorMessage = validInputs(baseId, basePw, String.valueOf(from), String.valueOf(to)); + if (StringUtils.isEmpty(errorMessage) == false) { + return errorMessage; + } + for (int i = iFrom; i <= iTo; i++) { + + /* 既存データチェック */ + if(mailAddressCheck.exist(combine(baseId, i))) { + return "既に登録済みのデータがあります。"; + } + } + for (int i = iFrom; i <= iTo; i++) { + /* 手続き実施 */ + create(combine(baseId, i), combine(basePw, i)); + } + return null; + } + + private void create(String id, String pw) { + + int iOrgid; + int iUsrid; + int updateUserId = -1; + + /* + * 申請 + * OrgEntryPage相当 + */ + /* データアクセス 新規機関申請 */ + { + Org org = new Org(); + org.setKind(9); // 個人会員 + org.setName("ユーザー" + id); + org.setAdminname("ユーザー" + id); + org.setAdminnamekana("ユーザー" + id); + org.setPostnum("0000000"); + org.setTelnum("000-000-0000"); + org.setAddress("0000000000"); + org.setMail(id); + org.setEntrydate(AppUtils.createNowLong()); + org.setStatus(Org.STATUS_未処理); + orgDao.add(org,AppDef.USERID_NONE); // 【データ更新】 + + iOrgid = org.getOrgid(); + } + + + /* + * 承認 + * OrgEntryDetailPage#btnSubmitA(申請一覧.承認ボタン)相当 + */ + { + Org cond = new Org(); + cond.setOrgid(iOrgid); + List orgs = orgDao.get(cond); + final Org org = orgs.get(0); + + if(mailAddressCheck.existWithoutOrg(org.getAddress())) { + throw new RuntimeException("このメールアドレスは既に使用されています。"); + } + + org.setStatus(Org.STATUS_承認済み); + org.setApprovaldate(AppUtils.createNowLong()); + orgDao.update(org, updateUserId); // 【更新実施】 + + Usr usr = new Usr(); + usr.setLoginid(org.getMail()); + usr.setName(org.getAdminname()); + usr.setKind(Usr.KIND_機関管理者); + usr.setOrgid(org.getOrgid()); + usr.setOrgrole(Usr.ROLE_管理者); + usr.setStoplogin(AppDef.FLASE); + usr.setStatus(Usr.STATUS_仮登録); // 仮登録 + usr.setLoginerrorcount(0); + usrDao.add(usr, updateUserId); // 【更新実施】 + + iUsrid = usr.getUsrid(); + } + + + /* + * 本登録 + * EntryPasswordPage相当 + */ + { + Usr usr = usrDao.getByUsrid(iUsrid); + + /* ユーザ情報更新 */ + String pwhash = CalcHash.passowrdHash(pw, usr.getLoginid()); + usr.setPwhash(pwhash); + usr.setModpwdate(AppUtils.createNowLong()); + usr.setJoindate(AppUtils.createNowLong()); // 入会日時 + usr.setStatus(Usr.STATUS_登録済み); + + usrDao.update(usr, AppDef.USERID_NONE); // 【更新処理】 + + + /* 機関情報更新 */ + Org org = orgDao.getByOrgid(usr.getOrgid()); + if(org == null) { + throw new RuntimeException("組織情報が登録されていません。"); + } + org.setStatus(Org.STATUS_本登録済み); + org.setJoindate(AppUtils.createNowLong()); // 本登録日時 + + orgDao.update(org, AppDef.USERID_NONE); // 【更新処理】 + } + + } + + + public static int toInt(String value) { + if (StringUtils.isEmpty(value)) { + return -1; + } + int i; + try { + i = Integer.parseInt(value); + } catch (NumberFormatException e) { + return -1; + } + if (i < 0 || i > 99) { + return i; + } + return i; + } + + public String combine(String baseValue, int num) { + return combine(baseValue, String.valueOf(num)); + } + public String combine(String baseValue, String num) { + return baseValue + StringUtils.leftPad(num, 2, "0"); + } + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/Challengestring.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/Challengestring.java new file mode 100644 index 0000000..4f7e02b --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/Challengestring.java @@ -0,0 +1,13 @@ +package jp.co.y_net.amm.service; + +import org.apache.commons.lang.RandomStringUtils; +import org.springframework.stereotype.Component; + +@Component("challengestring") +public class Challengestring { + public String execute() { + String str = RandomStringUtils.randomAlphabetic(16); + return str; + } + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/DailyJobManager.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/DailyJobManager.java new file mode 100644 index 0000000..954141e --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/DailyJobManager.java @@ -0,0 +1,42 @@ +package jp.co.y_net.amm.service; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.dao.FreeDao; + +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +@Component("dailyJobManager") +public class DailyJobManager { + + @Autowired(required = true) + @Qualifier("freeDao") + private FreeDao freeDao; + + + @Autowired(required = true) + @Qualifier("sessionFactory_Amm") + private SessionFactory sessionFactory; + + /** + * 日時処理 + * このメソッドは applicationContextBase.xml にて定義されている。 + */ + public void tick(){ + AppLogger.info("日時処理実行開始"); + + // 現在処理なし + + //"C:/Program Files/MySQL/MySQL Server 5.6/bin/mysqldump" --defaults-file=C:/\AmmData/MysqldumpConf.txt ammdb > C:/\AmmData/dump + + + + AppLogger.info("日時処理実行終了"); + } + + public static void main(String[] args) { + new DailyJobManager().tick(); + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/DataInitializer.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/DataInitializer.java new file mode 100644 index 0000000..aad6bac --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/DataInitializer.java @@ -0,0 +1,48 @@ +package jp.co.y_net.amm.service; + +import jp.co.y_net.amm.common.CalcHash; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +@Component("dataInitializer") +public class DataInitializer { + + public static boolean DONE = false; + + @Autowired(required = true) + @Qualifier("usrDao") + private UsrDao usrDao; + + @Autowired(required = true) + @Qualifier("orgDao") + private OrgDao orgDao; + /** + * アプリケーションに必要最低限のレコードを作成する + */ + public void initializeData() { + + if(DONE) return; + DONE = true; + + /* アプリケーションに運営管理者が1人もいなければレコードを作成する */ + Usr sysAdminCond = new Usr(); + sysAdminCond.setKind(Usr.KIND_運営管理者); + if(usrDao.get(sysAdminCond).size() == 0) { + Usr usrRoot = new Usr(); + usrRoot.setLoginid("root"); + usrRoot.setKind(Usr.KIND_運営管理者); + String pwhash = CalcHash.passowrdHash("manager", usrRoot.getLoginid()); + usrRoot.setPwhash(pwhash); + } + + + + + + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/LocaleStringSearch.java.back b/AMM_web/src/main/java/jp/co/y_net/amm/service/LocaleStringSearch.java.back new file mode 100644 index 0000000..faec804 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/LocaleStringSearch.java.back @@ -0,0 +1,109 @@ +package jp.co.y_net.amm.service; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jp.co.y_net.amm.dao.Localestring; +import jp.co.y_net.amm.dao.LocalestringDao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +/** + * LocaleString : 表示文字列の管理 + * + * データベースのテーブル「localestring」から表示文字情報を取得する。 + * 2014/07/16 速度改善のため、キャッシュの仕組みを追加 K.Inaba + * + * @version 1.0.0 + * @author y.soga + */ +@Component("localeStringSearch") +public class LocaleStringSearch implements Serializable { + private static final long serialVersionUID = 7151445795383658463L; + + @Autowired(required = true) + @Qualifier("localestringDao") + private LocalestringDao localestringDao; + + /** + * 表示文字列をキャッシュするためのオブジェクト + */ + private Map strCash = new HashMap(); + + /** + * キャッシュをクリアする処理。 + * DashboardPageより呼び出されることを想定 + */ + public void clearCash() { + strCash = new HashMap(); + } + /** キャッシュサイズを返す */ + public int getCashCount() { + int size = strCash.keySet().size(); + return size; + } + + /** + * 画面ID、コントロールID、言語ID、メッセージ番号 に一致する表示文字情報を 1件取得する + * @version 1.0.0 + * @author y.soga + * @param screenId 画面ID + * @param controlId コントロールID + * @param languageId 言語ID + * @param String num メッセージ番具御 + * @return String 表示文字情報(1件) + */ + public String getDisplayString(String screenId, String controlId, Integer languageId, String num) { + + String key = createKey("lcl", screenId, controlId, String.valueOf(languageId), num); + + if (strCash.get(key) == null) { // キャッシュに無ければDBから取得する + Localestring ls = new Localestring(); + ls.setScreenid(screenId); + ls.setControlid(controlId); + ls.setLanguageid(languageId); + ls.setNum(num); + + if(localestringDao == null) { + return "***"; + } + List results = localestringDao.get(ls); + String strRet; + if (results.size() > 0) { + strRet = results.get(0).getPrintstring(); + } else { + /* 2015/04/25 "CM000"の取得を試みる */ + ls.setScreenid("CM000"); + results = localestringDao.get(ls); + if (results.size() > 0) { + strRet = results.get(0).getPrintstring(); + } else { + strRet = ""; + } + } + /* キャッシュに登録 */ + strCash.put(key, strRet); + } else { + // キャッシュにあれば処理なし。 + } + return strCash.get(key); + } + /** + * キャッシュのキーを生成するメソッド + * 書式: lcl$画面ID$コントロールID$言語ID$メッセージ番号 + * 書式(コントロールID、メッセージ番号が無い場合): lcl$画面ID$$言語ID$ + * @param type 表示文字情報の場合は "lcl" + * @param screenId 画面ID + * @param controlId コントロールID + * @param languageId 言語ID + * @param num メッセージ番号 + * @return 上記を連結したキー + */ + private static String createKey(String type, String screenId, String controlId, String languageId, String num) { + return type + "$" + screenId + "$" + controlId + "$" + languageId + "$" + num; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/Logincheck.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/Logincheck.java new file mode 100644 index 0000000..ec2dc5e --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/Logincheck.java @@ -0,0 +1,160 @@ +package jp.co.y_net.amm.service; + +import java.util.Map; +import java.util.TreeMap; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.common.CalcHash; +import jp.co.y_net.amm.common.ResourceReader; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +@Component("logincheck") +public class Logincheck { + + public static Map errorMemo; + public static Map errorMessage; + static { + /* システム内で使用する補足メッセージ */ + errorMemo = new TreeMap(); + errorMemo.put(0, "エラーなし"); + errorMemo.put(1, "ログインIDに該当するデータなし"); + errorMemo.put(2, "退会しているユーザー(パスワードは正しい)"); + // errorMemo.put(3, "仮登録のユーザーです"); + errorMemo.put(4, "ログイン停止のユーザー(パスワードは正しい)"); + errorMemo.put(5, "現在、使用期間外(パスワードは正しい)"); + errorMemo.put(10, "ログインIDかパスワードが正しくない"); + errorMemo.put(999, "その他のエラー"); + + /* 利用者へ表示するメッセージ */ + errorMessage = new TreeMap(); + errorMessage.put(0, ""); + errorMessage.put(1, "アカウントかパスワードが正しくありません。"); // アカウント自体がないことはセキュリティ上、明らかにしない + errorMessage.put(2, "退会しています。ログインできません。"); + errorMessage.put(4, "ログイン停止中です。ログインできません。"); + errorMessage.put(5, "使用期間外です。ログインできません。"); + errorMessage.put(10, "アカウントかパスワードが正しくありません。"); + errorMessage.put(999, "ログインできません。"); + } + + @Autowired(required = true) + @Qualifier("usrDao") + private UsrDao usrDao; + + @Autowired(required = true) + @Qualifier("orgDao") + private OrgDao orgDao; + + public LogincheckResult executeFromAmm(String loginidB, String cresE, String challengeA) { + return execute(loginidB, cresE, challengeA, false); + } + + public LogincheckResult executeFromApi(String loginidB, String cresE, String challengeA) { + /* 2016/02/22 戻り値にuseridを追加 */ + //return execute(loginidB, cresE, challengeA, true); + return execute(loginidB, cresE, challengeA, true); // 認証実施 + + } + + private LogincheckResult execute(String loginidB, String cresE, String challengeA, boolean チャレンジレスポンスの保存を行う) { + + LogincheckResult logincheckResult = new LogincheckResult(); + + Usr usr = usrDao.getByLoginid(loginidB); + if (usr == null) { + + logincheckResult.errorCode = 1; + return logincheckResult; // ログインIDが登録されていません + } + + String チャレンジレスポンス正解値 = CalcHash.challengeResponse(usr.getPwhash(), challengeA); + + if (cresE.equals(チャレンジレスポンス正解値)) { + + if (usr.getStatus() == Usr.STATUS_退会) { + + logincheckResult.errorCode = 2; + return logincheckResult; // 退会 + } + // if(usr.getStatus() == Usr.STATUS_仮登録) { 仮登録はパスワードを持っていないため、このブロックは取り下げ + // return 3; // 仮登録 + // } + if (usr.isログイン停止()) { + logincheckResult.errorCode = 4; + return logincheckResult; + } + Integer orgId = usr.getOrgid(); + Org org = orgDao.getByOrgid(orgId); + if (org == null) { + AppLogger.error(usr.getLoginid() + "に組織情報が紐づいていません。"); + logincheckResult.errorCode = 999; + return logincheckResult; + } + if (org != null && org.is利用可能期間内() == false) { + logincheckResult.errorCode = 5; + return logincheckResult; + } + + /* 認証成功 */ + + /* チャレンジレスポンスの有効期限を算出 */ + Long cresdate = -1L; + int offset = ResourceReader.getIntegerQuick("cresdate"); + cresdate = AppUtils.createNowLong(offset); + + /* データアクセス アカウント認証結果登録 */ + usr.setLastlogindate(AppUtils.createNowLong()); // 最終ログイン日付 + usr.setLastlogintrydate(AppUtils.createNowLong()); // 最終ログイン試行日付 + usr.setLoginerrorcount(0); // ログイン失敗回数 + + if (チャレンジレスポンスの保存を行う) { + usr.setCres(cresE); // チャレンジレスポンス + usr.setCresdate(cresdate); // チャレンジレスポンス有効期限 + } + + /* 2016/03/30 ログアウト要求日時をクリアする */ + usr.setRequestlogoutdate(-1L); + + usrDao.update(usr, AppDef.USERID_NONE); // 【更新処理】 + + logincheckResult.errorCode = 0; + logincheckResult.usrid = usr.getUsrid(); + return logincheckResult; + + } else { + /* 認証失敗 */ + + /* データアクセス アカウント認証結果登録 */ + usr.setLastlogintrydate(AppUtils.createNowLong()); // 最終ログイン試行日付 + if (usr.getLoginerrorcount() == null) { + usr.setLoginerrorcount(1); // ログイン失敗回数 + } else { + usr.setLoginerrorcount(usr.getLoginerrorcount() + 1); // ログイン失敗回数 + } + usr.setCres(null); // チャレンジレスポンス をクリア + usr.setCresdate(-1L); // チャレンジレスポンス有効期限 を無効化 + + /* 2016/03/30 ログアウト要求日時をクリアする */ + usr.setRequestlogoutdate(-1L); + + usrDao.update(usr, AppDef.USERID_NONE); // 【更新処理】 + + logincheckResult.errorCode = 10; + + return logincheckResult; + } + } + + public class LogincheckResult { + public Integer errorCode; + public Integer usrid; /* 2016/02/22 戻り値にuseridを追加 */ + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/Logout.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/Logout.java new file mode 100644 index 0000000..c1937f0 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/Logout.java @@ -0,0 +1,33 @@ +package jp.co.y_net.amm.service; + +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +@Component("logout") +public class Logout { + + @Autowired(required = true) + @Qualifier("usrDao") + private UsrDao usrDao; + + public boolean execute(String loginid) { + + Usr usr = usrDao.getByLoginid(loginid); + if(usr == null) { + return false; + } + + /* データアクセス ログアウト */ + usr.setCres(null); // チャレンジレスポンス をクリア + usr.setCresdate(-1L); // チャレンジレスポンス有効期限 を無効化 + + usrDao.update(usr, AppDef.USERID_NONE); // 【更新処理】 + + return true; + } +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/MailAddressCheck.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/MailAddressCheck.java new file mode 100644 index 0000000..dccfbad --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/MailAddressCheck.java @@ -0,0 +1,77 @@ +package jp.co.y_net.amm.service; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +@Component("mailAddressCheck") +public class MailAddressCheck { + + @Autowired(required = true) + @Qualifier("usrDao") + protected UsrDao usrDao; + + @Autowired(required = true) + @Qualifier("orgDao") + protected OrgDao orgDao; + + public boolean exist(String mail) { + return exist(mail, null, true); + } + + public boolean existWithoutOrg(String mail) { + return exist(mail, null, false); + } + /** + * @param mail + * @param myUsrid + * @param checkOrg 申請中のOrgもチェック対象に入れる場合はTrueを指定する。 + * @return + */ + private boolean exist(String mail, Integer myUsrid, boolean checkOrg) { + + boolean exist = false; + Usr cndUsr = new Usr(); + cndUsr.setLoginid(mail); + for(Usr u: usrDao.get(cndUsr)) { + if(u.getStatus().equals(Usr.STATUS_退会)) { + // 無視 + AppLogger.debug(u.getName() + "が同一のメールアドレスだが退会済み"); + continue; + } + + if (myUsrid != null && u.getUsrid() == myUsrid) { + AppLogger.debug(u.getName() + "自分自身のデータ"); + continue; + } + + AppLogger.debug(u.getName() + "が同一のメールアドレス"); + exist = true; + break; + } + + if(checkOrg) { + if(exist == false) { + /* 申請中の組織に同一のメールアドレスが存在指定はいけない */ + Org cndOrg = new Org(); + cndOrg.setMail(mail); + cndOrg.setStatus(Org.STATUS_未処理); + for(Org o: orgDao.get(cndOrg)) { + AppLogger.debug(o.getName() + "が同一のメールアドレス"); + exist = true; + break; + } + } + } + + return exist; + } + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/service/PasswordTicketManager.java b/AMM_web/src/main/java/jp/co/y_net/amm/service/PasswordTicketManager.java new file mode 100644 index 0000000..13007cd --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/service/PasswordTicketManager.java @@ -0,0 +1,103 @@ +package jp.co.y_net.amm.service; + +import java.util.List; + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.common.AppUtils; +import jp.co.y_net.amm.dao.AppDef; +import jp.co.y_net.amm.dao.Pwtckt; +import jp.co.y_net.amm.dao.PwtcktDao; + +import org.apache.commons.lang.RandomStringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +@Component("passwordTicketManager") +public class PasswordTicketManager { + + @Autowired(required = true) + @Qualifier("pwtcktDao") + private PwtcktDao pwtcktDao; + + public String execute新規パスワード発行(Integer usrid) { + return execute(usrid, 60*60* AppDef.新規パスワード発行の登録有効期間); + } + + public String executeパスワードリセット(Integer usrid) { + return execute(usrid, 60*60* AppDef.パスワードリセット後のパスワード登録有効期間); + } + + public String execute(Integer usrid, int ticketdateOffset) { + /*  同じユーザIDで「受付中」レコードを処理 */ + { + Pwtckt cnd = new Pwtckt(); + cnd.setUsrid(usrid); + cnd.setStatus(Pwtckt.STATUS_受付中); + + List tickets = pwtcktDao.get(cnd); + for(Pwtckt tiket: tickets) { + tiket.setStatus(Pwtckt.STATUS_中止); + tiket.setCanceldate(AppUtils.createNowLong()); + pwtcktDao.update(tiket, AppDef.USERID_NONE); // 【更新処理】 + /* 論理削除実施 */ + pwtcktDao.removeLogical(tiket, AppDef.USERID_NONE); // 【更新処理】 + } + } + /*  同じユーザIDで「有効期限切れ」レコードを処理 */ + { + Pwtckt cnd = new Pwtckt(); + cnd.setUsrid(usrid); + cnd.setStatus(Pwtckt.STATUS_有効期限切れ); + + List tickets = pwtcktDao.get(cnd); + for(Pwtckt tiket: tickets) { +// tiket.setStatus(Pwtckt.STATUS_XXX); // ステータス変更なし +// tiket.setCanceldate(AppUtils.createNowLong()); +// tiket.setDeleted(AppDef.TRUE); // 論理削除 +// pwtcktDao.update(tiket); + pwtcktDao.removeLogical(tiket, AppDef.USERID_NONE); // 【更新処理】 + } + } + /*  チケット発行(同一の値が存在する場合は再計算) */ + String random = null; + for (int i = 0; i < 100; i++) { + random = RandomStringUtils.randomAlphabetic(16); + Pwtckt cnd = new Pwtckt(); + cnd.setTicket(random); + if(pwtcktDao.get(cnd).isEmpty()) { + break; + } + } + if(random == null) { + throw new RuntimeException("チケットが決定しませんでした。無限ループ防止のため、処理を中止します。"); + } + Pwtckt ticket = new Pwtckt(); + ticket.setUsrid(usrid); + ticket.setTicket(random); + ticket.setCreatedate(AppUtils.createNowLong()); + ticket.setTicketdate(AppUtils.createNowLong(ticketdateOffset)); // x時間後 + ticket.setStatus(Pwtckt.STATUS_受付中); + pwtcktDao.add(ticket, AppDef.USERID_NONE); // 【更新処理】 + + return random; + } + + public Pwtckt getユーザに紐づくチケット(Integer usrid) { + Pwtckt ticket = new Pwtckt(); + ticket.setUsrid(usrid); + ticket.setStatus(Pwtckt.STATUS_受付中); + List results = pwtcktDao.get(ticket); + if(results.isEmpty()) { + return null; + } + if(results.size() != 1) { + AppLogger.error("1つのユーザに紐づく、受付中のチケットが複数件、検出されました。"); + return null; + } + return results.get(0); + } + + + +} diff --git a/AMM_web/src/main/java/jp/co/y_net/amm/tools/ResourceCopy.java b/AMM_web/src/main/java/jp/co/y_net/amm/tools/ResourceCopy.java new file mode 100644 index 0000000..1dda104 --- /dev/null +++ b/AMM_web/src/main/java/jp/co/y_net/amm/tools/ResourceCopy.java @@ -0,0 +1,148 @@ +package jp.co.y_net.amm.tools; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.channels.FileChannel; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +public class ResourceCopy { + public static void main(String[] args) { + + } + + /* + * 〓〓 以下、共通部品 〓〓 + */ + /** + * チャネルを利用したファイルのコピー処理 + * + * @param formFile コピー元 + * @param toFileName コピー先 + */ + public static void copy(File formFile, String toFileName) { + FileChannel ifc = null; + FileChannel ofc = null; + FileInputStream fis = null; + FileOutputStream fos = null; + try { + /* 入力元ファイルストリームからチャネル取得 */ + fis = new FileInputStream(formFile); + ifc = fis.getChannel(); + + /* 出力先ファイルチャネル取得 */ + File outFile = new File(toFileName); + fos = new FileOutputStream(outFile); + ofc = fos.getChannel(); + + /* バイト転送 */ + ifc.transferTo(0, ifc.size(), ofc); + + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if (ifc != null) + ifc.close(); + if (fis != null) + fis.close(); + if (ofc != null) + ofc.close(); + if (fos != null) + fos.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + /** + * テキストファイルを読み込む + * + * @param filepath + * @param charsetName 例:"UTF-8" + * @return List + */ + private static List readText(String filepath, String charsetName) { + List result = new ArrayList(); + FileInputStream is = null; + InputStreamReader r = null; + BufferedReader br = null; + try { + is = new FileInputStream(filepath); + r = new InputStreamReader(is, Charset.forName(charsetName)); + br = new BufferedReader(r); + // int ch; + // while ((ch = in.read()) != -1) { + String line; + while ((line = br.readLine()) != null) { + result.add(line); + } + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if (br != null) + br.close(); + if (r != null) + r.close(); + if (is != null) + is.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return result; + } + public static List readText(String filepath) { + return readText(filepath, "UTF-8"); + } + /** + * テキストファイルを書き出す + * + * @param filepath + * @param charsetName 例:"UTF-8" + * @param text + */ + private static void writeText(String filepath, String charsetName, List text) { + File f = new File(filepath); + OutputStream os = null; + Writer w = null; + BufferedWriter bw = null; + try { + os = new FileOutputStream(f); + w = new OutputStreamWriter(os, charsetName); + bw = new BufferedWriter(w); + for (String line : text) { + bw.write(line); + bw.newLine(); + // bw.flush(); + } + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + try { + if (bw != null) + bw.close(); + if (w != null) + w.close(); + if (os != null) + os.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + public static void writeText(String filepath, List string) { + writeText(filepath, "UTF-8", string); + } +} diff --git a/AMM_web/src/main/resources/App.properties b/AMM_web/src/main/resources/App.properties new file mode 100644 index 0000000..1351fc6 --- /dev/null +++ b/AMM_web/src/main/resources/App.properties @@ -0,0 +1,63 @@ +# +# App.properties +# +# ResourceReader.java \u3092\u4f7f\u7528\u3057\u3066\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002 +# ResourceReader#getStringQuick \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u518d\u8d77\u52d5\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u8aad\u307f\u53d6\u308a\u304c\u53ef\u80fd\u3067\u3059\u3002 +# + +# ----------------------------------------------------------------------------------------------------------- +# \u8a2d\u5b9a\u5024\u4e00\u89a7\u3088\u308a --- \u3053\u3053\u304b\u3089 + + +# \u958b\u767a\u62c5\u5f53\u8005\u306eOS\u30e6\u30fc\u30b6\u30fc\u540d +debug.users = soga, k_inaba, r_araki + +# \u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30e2\u30fc\u30c9 +debug.mode = yes + +# LoginPage\u304chttp\u3067\u547c\u3073\u51fa\u3055\u308c\u305f\u3068\u304d\u306b\u3001https\u3078\u5909\u66f4\u3059\u308b +#use.ssl = yes +use.ssl = no + +# \u7d44\u7e54.\u7a2e\u5225\u306e\u9078\u629e\u80a2 +orgkinds=1.\u6559\u80b2\u6a5f\u95a2, 2.\u65bd\u8a2d\u56e3\u4f53\uff08\u653f\u4ee4\u6307\u5b9a\uff09, 3.\u65bd\u8a2d\u56e3\u4f53\uff08\u975e\u653f\u4ee4\u6307\u5b9a\uff09, 9.\u500b\u4eba + +# \u7d44\u7e54.\u767b\u9332\u53ef\u80fd\u4f1a\u54e1\u6570\u306e\u9078\u629e\u80a2 +limitnums=1,5,10,20,30,40,50 ,100 + +# \u7d76\u5bfe\u30d1\u30b9\u6307\u5b9a\u306eURL +url.back.top=http://localhost:8080/AMM/#top +url.back.member=http://localhost:8080/AMM/#member +url.back.orgadmin=http://localhost:8080/AMM/#orgadmin +url.back.sysadmin=http://localhost:8080/AMM/#sysadmin +urlroot=http://localhost:8080/AMM/ + +# \u30c1\u30e3\u30ec\u30f3\u30b8\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6709\u52b9\u671f\u9650(\u79d2) +cresdate=1200 + +# \u30e1\u30fc\u30eb\u9001\u4fe1\u95a2\u9023 +Smtp = 192.168.10.149 +mailto.orgentry = sysadmin@example.com +MailFrom = ChattyInfty Online + + +# \u4f1a\u54e1\u524a\u9664\u901a\u77e5\u5148 +#api.deletenotice=http://chatty.chino-js.com:59924/Editor/api/deletenotice +api.deletenotice=http://localhost:8080/AMM/stub/api/deletenotice + + +# \u691c\u8a3c\u7528(\u73fe\u5728\u672a\u4f7f\u7528) +test.message=\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8 +errmsg.req=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req2=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req3=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length2=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\uff5e\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +# \u6a5f\u80fd\u5236\u5fa1 2016/10/18 k.inaba +enable.orgentry=YES +#enable.orgentry=NO +enable.grouplist=YES +#enable.grouplist=NO + +#EOF diff --git a/AMM_web/src/main/resources/applicationContextBase.xml b/AMM_web/src/main/resources/applicationContextBase.xml new file mode 100644 index 0000000..b85b510 --- /dev/null +++ b/AMM_web/src/main/resources/applicationContextBase.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception + + + + + + + + + + + + + + + + diff --git a/AMM_web/src/main/resources/for_sapietest/App.properties b/AMM_web/src/main/resources/for_sapietest/App.properties new file mode 100644 index 0000000..1b5fe4f --- /dev/null +++ b/AMM_web/src/main/resources/for_sapietest/App.properties @@ -0,0 +1,65 @@ +# +# App.properties +# +# ResourceReader.java \u3092\u4f7f\u7528\u3057\u3066\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002 +# ResourceReader#getStringQuick \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u518d\u8d77\u52d5\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u8aad\u307f\u53d6\u308a\u304c\u53ef\u80fd\u3067\u3059\u3002 +# + +# ----------------------------------------------------------------------------------------------------------- +# \u8a2d\u5b9a\u5024\u4e00\u89a7\u3088\u308a --- \u3053\u3053\u304b\u3089 + + +# \u958b\u767a\u62c5\u5f53\u8005\u306eOS\u30e6\u30fc\u30b6\u30fc\u540d +debug.users = soga, k_inaba, r_araki + +# \u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30e2\u30fc\u30c9 +debug.mode = yes + +# LoginPage\u304chttp\u3067\u547c\u3073\u51fa\u3055\u308c\u305f\u3068\u304d\u306b\u3001https\u3078\u5909\u66f4\u3059\u308b +#use.ssl = yes +use.ssl = no + +# \u7d44\u7e54.\u7a2e\u5225\u306e\u9078\u629e\u80a2 +orgkinds=1.\u6559\u80b2\u6a5f\u95a2, 2.\u65bd\u8a2d\u56e3\u4f53\uff08\u653f\u4ee4\u6307\u5b9a\uff09, 3.\u65bd\u8a2d\u56e3\u4f53\uff08\u975e\u653f\u4ee4\u6307\u5b9a\uff09, 9.\u500b\u4eba + +# \u7d44\u7e54.\u767b\u9332\u53ef\u80fd\u4f1a\u54e1\u6570\u306e\u9078\u629e\u80a2 +limitnums=1,5,10,20,30,40,50 ,100 + +# \u7d76\u5bfe\u30d1\u30b9\u6307\u5b9a\u306eURL +url.back.top=http://192.168.60.250:8080/AMM/dashboard +url.back.member=http://192.168.60.250:8080/AMM/dashboard#member +url.back.orgadmin=http://192.168.60.250:8080/AMM/dashboard#orgadmin +url.back.sysadmin=http://192.168.60.250:8080/AMM/dashboard#sysadmin +urlroot=http://192.168.60.250:8080/AMM/dashboard + +# \u30c1\u30e3\u30ec\u30f3\u30b8\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6709\u52b9\u671f\u9650(\u79d2) +cresdate=1200 + +# \u30e1\u30fc\u30eb\u9001\u4fe1\u95a2\u9023 +Smtp = localhost +mailto.orgentry = cio@example.com +MailFrom = ChattyInfty Online + + +# \u4f1a\u54e1\u524a\u9664\u901a\u77e5\u5148 +api.deletenotice=http://192.168.60.250:8080/AMM/api/deletenotice + + + + +# \u691c\u8a3c\u7528(\u73fe\u5728\u672a\u4f7f\u7528) +test.message=\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8 +errmsg.req=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req2=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req3=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length2=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\uff5e\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + + +# \u6a5f\u80fd\u5236\u5fa1 2016/10/18 k.inaba +#enable.orgentry=YES +enable.orgentry=NO +#enable.grouplist=YES +enable.grouplist=NO + +#EOF diff --git a/AMM_web/src/main/resources/for_sdcsv/App.properties b/AMM_web/src/main/resources/for_sdcsv/App.properties new file mode 100644 index 0000000..156b249 --- /dev/null +++ b/AMM_web/src/main/resources/for_sdcsv/App.properties @@ -0,0 +1,66 @@ +# +# App.properties +# +# ResourceReader.java \u3092\u4f7f\u7528\u3057\u3066\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002 +# ResourceReader#getStringQuick \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u518d\u8d77\u52d5\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u8aad\u307f\u53d6\u308a\u304c\u53ef\u80fd\u3067\u3059\u3002 +# + +# ----------------------------------------------------------------------------------------------------------- +# \u8a2d\u5b9a\u5024\u4e00\u89a7\u3088\u308a --- \u3053\u3053\u304b\u3089 + + +# \u958b\u767a\u62c5\u5f53\u8005\u306eOS\u30e6\u30fc\u30b6\u30fc\u540d +debug.users = soga, k_inaba, r_araki + +# \u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30e2\u30fc\u30c9 +debug.mode = no + +# LoginPage\u304chttp\u3067\u547c\u3073\u51fa\u3055\u308c\u305f\u3068\u304d\u306b\u3001https\u3078\u5909\u66f4\u3059\u308b +#use.ssl = yes +use.ssl = no + +# \u7d44\u7e54.\u7a2e\u5225\u306e\u9078\u629e\u80a2 +orgkinds=1.\u6559\u80b2\u6a5f\u95a2, 2.\u65bd\u8a2d\u56e3\u4f53\uff08\u653f\u4ee4\u6307\u5b9a\uff09, 3.\u65bd\u8a2d\u56e3\u4f53\uff08\u975e\u653f\u4ee4\u6307\u5b9a\uff09, 9.\u500b\u4eba + +# \u7d44\u7e54.\u767b\u9332\u53ef\u80fd\u4f1a\u54e1\u6570\u306e\u9078\u629e\u80a2 +limitnums=1,5,10,20,30,40,50 ,100 + +# \u7d76\u5bfe\u30d1\u30b9\u6307\u5b9a\u306eURL +url.back.top=https://infty2.nittento.or.jp/Editor/pages/login/index.html +url.back.member=https://infty2.nittento.or.jp/Editor/pages/menu/index.html#member +url.back.orgadmin=https://infty2.nittento.or.jp/Editor/pages/menu/index.html#orgadmin +url.back.sysadmin=https://infty2.nittento.or.jp/Editor/pages/menu/index.html#sysadmin +urlroot=https://infty3.nittento.or.jp/AMM/ + +# \u30c1\u30e3\u30ec\u30f3\u30b8\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6709\u52b9\u671f\u9650(\u79d2) +cresdate=1200 + +# \u30e1\u30fc\u30eb\u9001\u4fe1\u95a2\u9023 +Smtp = localhost +mailto.orgentry = cio@nittento.or.jp +MailFrom = ChattyInfty Online + + +# \u4f1a\u54e1\u524a\u9664\u901a\u77e5\u5148 +api.deletenotice=http://infty2.nittento.or.jp/Editor/api/deletenotice + + + + +# \u691c\u8a3c\u7528(\u73fe\u5728\u672a\u4f7f\u7528) +test.message=\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8 +errmsg.req=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req2=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req3=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length2=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\uff5e\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + + +# \u6a5f\u80fd\u5236\u5fa1 2016/10/18 k.inaba +enable.orgentry=YES +#enable.orgentry=NO +enable.grouplist=YES +#enable.grouplist=NO + + +#EOF diff --git a/AMM_web/src/main/resources/hibernateContextBase.xml b/AMM_web/src/main/resources/hibernateContextBase.xml new file mode 100644 index 0000000..4932063 --- /dev/null +++ b/AMM_web/src/main/resources/hibernateContextBase.xml @@ -0,0 +1,77 @@ + + + + + + + + ${jdbc.driverClassName} + ${jdbc.url} + ${jdbc.username} + ${jdbc.password} + + + 3 + 15 + + + + 60 + + + + + + + + + + + + + + jp/co/y_net/amm/dao/Usr.hbm.xml + jp/co/y_net/amm/dao/Org.hbm.xml + jp/co/y_net/amm/dao/Pwtckt.hbm.xml + jp/co/y_net/amm/dao/Inf.hbm.xml + jp/co/y_net/amm/dao/Grp.hbm.xml + jp/co/y_net/amm/dao/Grpusr.hbm.xml + + + + + org.hibernate.dialect.PostgreSQLDialect + false + ${jdbc.dbname} + + + + \ No newline at end of file diff --git a/AMM_web/src/main/resources/jdbc.properties b/AMM_web/src/main/resources/jdbc.properties new file mode 100644 index 0000000..fd8a3ea --- /dev/null +++ b/AMM_web/src/main/resources/jdbc.properties @@ -0,0 +1,18 @@ +# DB\u63a5\u7d9a\u8a2d\u5b9a +# hibernateContextBase.xml\u304b\u3089\u53c2\u7167\u3055\u308c\u308b\u3002 +# \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u969b\u3082\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u3002 +# \u203b \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u5834\u5408\u306f Hibernate \u3067\u4fdd\u969c\u3055\u308c\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u304c\u78ba\u4fdd\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u7559\u610f\u3059\u308b\u3053\u3068\u3002 + +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider + +# autoReconnect=true \u3067\u554f\u984c\u3042\u308a +#jdbc.url=jdbc:mysql://localhost:3306/ammdb?useUnicode=true&characterEncoding=utf-8&autoReconnect=true +jdbc.url=jdbc:mysql://localhost:3306/ammdb?useUnicode=true&characterEncoding=utf-8 + +jdbc.dbname=ammdb +jdbc.schema=ammdb + +jdbc.username=ammuser +jdbc.password=ammmanager + diff --git a/AMM_web/src/main/resources/logback.xml b/AMM_web/src/main/resources/logback.xml new file mode 100644 index 0000000..3a6e693 --- /dev/null +++ b/AMM_web/src/main/resources/logback.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + true + + INFO + + + ${catalina.base:-sdc}/logs/AMMLog.%d{yyyy-MM-dd}.%i.log + 14 + + 64MB + + + + UTF-8 + [%-5level] %d{yyyy-MM-dd HH:mm:ss} %marker %msg%n + + + + + + + + + true + + INFO + + + ${catalina.base:-sdc}/logs/mail/AMM_MAIL_Log.%d{yyyy-MM-dd}.%i.log + 365 + + 64MB + + + + UTF-8 + [%-5level] %d{yyyy-MM-dd HH:mm:ss} %marker %msg%n + + + + + + + + + + + + + ${LEVEL_CONSOLE_OTHER} + + + + return !logger.startsWith("jp.co.y_net"); + + + DENYNEUTRAL + + + ${PATTERN_CONSOLE} + + + + + + + diff --git a/AMM_web/src/main/resources/message/mail.addmember b/AMM_web/src/main/resources/message/mail.addmember new file mode 100644 index 0000000..55d1045 --- /dev/null +++ b/AMM_web/src/main/resources/message/mail.addmember @@ -0,0 +1,13 @@ +【ChattyInftyOnline】会員追加のご案内 + +@機関名称@ @氏名@ 様 + +会員の仮登録を行いました。 +下記URLを選択して、本登録を完了させてください。 + +@本登録URL@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/src/main/resources/message/mail.org.approval b/AMM_web/src/main/resources/message/mail.org.approval new file mode 100644 index 0000000..57b26d6 --- /dev/null +++ b/AMM_web/src/main/resources/message/mail.org.approval @@ -0,0 +1,13 @@ +【ChattyInfty Online】新規申請承認のお知らせ + +@機関名称@ @申請者氏名@ 様 + +申請内容を承認いたしました。 +下記URLを選択して、本登録を完了させてください。 + +@本登録URL@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/src/main/resources/message/mail.org.reject b/AMM_web/src/main/resources/message/mail.org.reject new file mode 100644 index 0000000..32bb912 --- /dev/null +++ b/AMM_web/src/main/resources/message/mail.org.reject @@ -0,0 +1,13 @@ +【ChattyInfty Online】新規申請否認のお知らせ + +@機関名称@ @申請者氏名@ 様 + +残念ながら以下の理由で申請内容を否認させていただきました。 +ご了承ください + +@否認理由@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/src/main/resources/message/mail.orgentry b/AMM_web/src/main/resources/message/mail.orgentry new file mode 100644 index 0000000..90ece20 --- /dev/null +++ b/AMM_web/src/main/resources/message/mail.orgentry @@ -0,0 +1,12 @@ +【ChattyInftyOnline】新規申請受信のお知らせ + +新規申請が届いています。 + +下記URLを選択して、申請内容を確認してください。 + +@申請画面URL@ + +--------------------------------------------------- +このメールは ChattyInfty Online会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/src/main/resources/message/mail.resetpw b/AMM_web/src/main/resources/message/mail.resetpw new file mode 100644 index 0000000..be8524f --- /dev/null +++ b/AMM_web/src/main/resources/message/mail.resetpw @@ -0,0 +1,10 @@ +【ChattyInftyOnline】パスワードリセットのお知らせ + +次の画面からパスワードを再設定してください。 + +@パスワード登録画面のURL@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/src/main/resources/message/mail.test b/AMM_web/src/main/resources/message/mail.test new file mode 100644 index 0000000..e34b472 --- /dev/null +++ b/AMM_web/src/main/resources/message/mail.test @@ -0,0 +1,8 @@ +【ChattyInftyOnline】テスト送信メール + +このメールはテスト用です。 + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/src/main/resources/message/termsofuse b/AMM_web/src/main/resources/message/termsofuse new file mode 100644 index 0000000..47a740f --- /dev/null +++ b/AMM_web/src/main/resources/message/termsofuse @@ -0,0 +1,40 @@ +ChattyInfty Online利用規約 + +本利用規約は、社会福祉法人日本点字図書館(以下「当館」)が試験的に限定された範囲内で無償提供するマルチメディアコンテンツ製作システム「ChattyInfty Online」(以下「本システム」)の利用条件をまとめたものです。本システムを利用される方(以下「会員」)は、これらの条件に同意いただく必要があります。 + +1.本システムの利用目的 +本システムは、会員に対し、発達障害・学習障害・視覚障害などにより読み書きが困難な者のために、著作権法が定める範囲内において、著作物を音声データ等デジタルデータに変換し、ダウンロードして使用させることを目的とします。 +会員は、本システムを非営利目的にのみ利用できるものとします。 + +2.禁止事項 +会員は、本システムを利用するに当たり、次の行為をしてはなりません。これらの行為によって故意に第三者に対し損害を与えた場合は、自己の責任と費用をもって解決するものとします。また、以下の行為により当館が何らかの損害を被った場合、当館はその行為者に対し損害賠償請求ができるものとします。 +(1)他者の著作権、商標権等の知的財産権を侵害する行為 +(2)他者の財産権、プライバシーもしくは肖像権を侵害する行為 +(3)本システムの運営を妨害する行為 +(4)本システムの商用利用 +(5)本システムアカウントの漏洩、譲渡、名義変更等 +(6)その他、法令、公序良俗に違反する行為 + +3.利用登録申請 +本システムの利用を希望する方は、本利用規約に同意することで、利用登録の申請をすることができます。 +ただし無償提供期間中は、申請できる方は当館が予め承認する方に限ります。 + +4.登録の抹消 +当館は、会員が本利用規約に違反した場合、もしくは登録事項に虚偽の事実があることが判明した場合は、本システムの利用を停止し、会員としての登録を抹消することができます。 +会員は、当館へ通知することにより、自己の登録を抹消することができます。 + +5.本システムの変更、提供終了 +当館は、当館の都合により、本システムを変更(提供方法の変更含む)、または提供を終了することができます。 + +6.免責事項 +(1)会員は、本システムを自己の責任において利用するものとします。 +(2)当館は、本システムの変更、停止、利用不能、提供終了、および会員が本システムで作成したデータの消失、その他本システムに関して会員が被った損害に対しては、一切の賠償責任を負いません。 +(3)当館は、法律上の瑕疵担保責任を含め、一切の明示的または黙示的な保証無しに、本システムを現状有姿でご提供します。これは知的財産権または他の専有権を侵害していないことに関する保証を含みますが、これらに限られません。 +(4)当館は、通常損害、直接的損害、特別損害、または間接的損害に対して一切責任を負いません。これらは、予見の有無を問わず、逸失利益、預金損失、偶発的損害、その他の経済的な結果的損害を含みますが、これらに限られません。 + +7.個人情報の保護 +当館は、会員の個人情報を、当館の「個人情報保護に対する基本方針」(http://www.nittento.or.jp/privacy/index.html)に従って取扱い、本システムの運営目的にのみ使用します。 +なお、本システムの利用状況に関する情報について記録を行うことがありますが、本システムの改善や学術利用の目的にのみ使用し、成果の発表などの際には個人が特定されるような情報は削除の上で参照します。 + +8.本利用規約の変更 +当館は、本利用規約を適宜変更することができるものとします。会員は、当該変更の通知を受領した後で本システムを使用し続けることにより、変更を承諾するものとします。 diff --git a/AMM_web/src/main/resources/omitmaildomains.properties b/AMM_web/src/main/resources/omitmaildomains.properties new file mode 100644 index 0000000..4cb812c --- /dev/null +++ b/AMM_web/src/main/resources/omitmaildomains.properties @@ -0,0 +1,22 @@ +#\u767b\u9332\u3092\u62d2\u5426\u3059\u308b\u30e1\u30fc\u30eb\u306edomain\u30ea\u30b9\u30c8 + +# \u30d5\u30ea\u30fc\u30e1\u30fc\u30eb\u306f\u8a31\u53ef\u3059\u308b +#msn.com +#gmail.com +#hotmail.co.jp +#hotmail.com +#yahoo.co.jp + +#\u643a\u5e2f\u96fb\u8a71\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u62d2\u5426\u3059\u308b 2016/06/02 +docomo.ne.jp +softbank.ne.jp +d.vodafone.ne.jp +h.vodafone.ne.jp +t.vodafone.ne.jp +c.vodafone.ne.jp +r.vodafone.ne.jp +k.vodafone.ne.jp +n.vodafone.ne.jp +s.vodafone.ne.jp +q.vodafone.ne.jp +ezweb.ne.jp diff --git a/AMM_web/src/main/webapp/WEB-INF/web.xml b/AMM_web/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..a23518d --- /dev/null +++ b/AMM_web/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,36 @@ + + + AMM_web + + wicket.amm + org.apache.wicket.protocol.http.WicketFilter + + applicationClassName + jp.co.y_net.amm.WicketApplication + + + + wicket.amm + /* + + + + contextConfigLocation + + + classpath:applicationContextBase.xml + classpath:hibernateContextBase.xml + + + + org.springframework.web.context.ContextLoaderListener + + + jp.co.y_net.amm.common.SessionUsageListener + + + 30 + + diff --git a/AMM_web/src/test/java/jp/co/y_net/amm/Test.java b/AMM_web/src/test/java/jp/co/y_net/amm/Test.java new file mode 100644 index 0000000..e848dcf --- /dev/null +++ b/AMM_web/src/test/java/jp/co/y_net/amm/Test.java @@ -0,0 +1,107 @@ +package jp.co.y_net.amm; + + +import jp.co.y_net.amm.common.AppLogger; +import jp.co.y_net.amm.dao.GrpDao; +import jp.co.y_net.amm.dao.GrpusrDao; +import jp.co.y_net.amm.dao.InfDao; +import jp.co.y_net.amm.dao.Org; +import jp.co.y_net.amm.dao.OrgDao; +import jp.co.y_net.amm.dao.PwtcktDao; +import jp.co.y_net.amm.dao.Usr; +import jp.co.y_net.amm.dao.UsrDao; + +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.mchange.v2.async.ThreadPoolAsynchronousRunner; + +public class Test { + public static void main(String[] args) { + System.setProperty("catalina.base", "C:\\tmp"); + + ClassPathXmlApplicationContext context = + new ClassPathXmlApplicationContext("applicationContextBase.xml", "hibernateContextBase.xml"); + + UsrDao usrDao = (UsrDao)context.getBean("usrDao"); + OrgDao orgDao = (OrgDao)context.getBean("orgDao"); + PwtcktDao pwtcktDao = (PwtcktDao)context.getBean("pwtcktDao"); + InfDao infDao = (InfDao)context.getBean("infDao"); + GrpDao grpDao = (GrpDao)context.getBean("grpDao"); + GrpusrDao grpusrDao = (GrpusrDao)context.getBean("grpusrDao"); + +// Pwtckt cnd = new Pwtckt(); +// pwtcktDao.get(cnd); + + //test1(usrDao, orgDao); + +// Integer nextId = orgDao.getNextOrgId(); +// System.out.println(nextId); +// + +// Usr usr = new Usr(); +// usr.setName("test"); +// usrDao.add(usr); + +// Grp grp = new Grp(); +// grp.setName("test"); +// grpDao.add(grp); + +// List grps = grpDao.get(); +// for(Grp g: grps) { +// System.out.println(g.getName()); +// } + + System.out.println(usrDao.getNextId("Usr", "usrid")); + System.out.println(orgDao.getNextId("Org", "orgid")); +// System.out.println(pwtcktDao.getNextId( +// System.out.println(infDao.getNextId( + System.out.println(grpDao.getNextId("Grp", "grpid")); + System.out.println(grpusrDao.getNextId("Grpusr", "grpusrid")); + + ThreadPoolAsynchronousRunner t = new ThreadPoolAsynchronousRunner(0, false); + } + + private static void test1(UsrDao usrDao, OrgDao orgDao) { + Usr usr = usrDao.getByUsrid(1); + System.out.println(usr.getName()); + + + /* まだ使用されていないメールアドレスであることをチェック */ + String mail = "other@example.com2"; + int usrId = 21; + + + + boolean exist = false; + Usr cndUsr = new Usr(); + cndUsr.setLoginid(mail); + for(Usr u: usrDao.get(cndUsr)) { + if(u.getStatus().equals(Usr.STATUS_退会)) { + // 無視 + AppLogger.debug(u.getName() + "が同一のメールアドレスだが退会済み"); + } else if (u.getUsrid() == usrId) { + AppLogger.debug(u.getName() + "自分自身のデータ"); + } else { + AppLogger.debug(u.getName() + "が同一のメールアドレス"); + exist = true; + } + } + + if(exist == false) { + Org cndOrg = new Org(); + cndOrg.setMail(mail); + for(Org o: orgDao.get(cndOrg)) { + + // TODO 機関管理者の場合、自分のメールアドレスがヒットする可能性が有ることを考慮 + + AppLogger.debug(o.getName() + "が同一のメールアドレス"); + exist = true; + } + } + + System.out.println(exist); + + + /* ログインIDが有効であることをチェック */ + } +} diff --git a/AMM_web/target/AMM.war b/AMM_web/target/AMM.war new file mode 100644 index 0000000..4d7dd5e --- /dev/null +++ b/AMM_web/target/AMM.war Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/App.properties b/AMM_web/target/AMM/WEB-INF/classes/App.properties new file mode 100644 index 0000000..69b9963 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/App.properties @@ -0,0 +1,56 @@ +# +# App.properties +# +# ResourceReader.java \u3092\u4f7f\u7528\u3057\u3066\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002 +# ResourceReader#getStringQuick \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u518d\u8d77\u52d5\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u8aad\u307f\u53d6\u308a\u304c\u53ef\u80fd\u3067\u3059\u3002 +# + +# ----------------------------------------------------------------------------------------------------------- +# \u8a2d\u5b9a\u5024\u4e00\u89a7\u3088\u308a --- \u3053\u3053\u304b\u3089 + + +# \u958b\u767a\u62c5\u5f53\u8005\u306eOS\u30e6\u30fc\u30b6\u30fc\u540d +debug.users = soga, k_inaba, r_araki + +# LoginPage\u304chttp\u3067\u547c\u3073\u51fa\u3055\u308c\u305f\u3068\u304d\u306b\u3001https\u3078\u5909\u66f4\u3059\u308b +#use.ssl = yes +use.ssl = no + +# \u7d44\u7e54.\u7a2e\u5225\u306e\u9078\u629e\u80a2 +orgkinds=1.\u6559\u80b2\u6a5f\u95a2, 2.\u65bd\u8a2d\u56e3\u4f53\uff08\u653f\u4ee4\u6307\u5b9a\uff09, 3.\u65bd\u8a2d\u56e3\u4f53\uff08\u975e\u653f\u4ee4\u6307\u5b9a\uff09, 9.\u500b\u4eba + +# \u7d44\u7e54.\u767b\u9332\u53ef\u80fd\u4f1a\u54e1\u6570\u306e\u9078\u629e\u80a2 +limitnums=1,5,10,20,30,40,50 ,100 + +# \u7d76\u5bfe\u30d1\u30b9\u6307\u5b9a\u306eURL +url.back.top=http://localhost:8080/AMM/#top +url.back.member=http://localhost:8080/AMM/#member +url.back.orgadmin=http://localhost:8080/AMM/#orgadmin +url.back.sysadmin=http://localhost:8080/AMM/#sysadmin +urlroot=http://localhost:8080/AMM/ + +# \u30c1\u30e3\u30ec\u30f3\u30b8\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6709\u52b9\u671f\u9650(\u79d2) +cresdate=1200 + +# \u30e1\u30fc\u30eb\u9001\u4fe1\u95a2\u9023 +Smtp = 192.168.10.149 +mailto.orgentry = sysadmin@example.com +MailFrom = ChattyInfty Online + + +# \u4f1a\u54e1\u524a\u9664\u901a\u77e5\u5148 +#api.deletecall=http://chatty.chino-js.com:59924/Editor/api/deletenotice +api.deletenotice=http://localhost:8080/AMM/stub/api/deletenotice + + + + +# \u691c\u8a3c\u7528(\u73fe\u5728\u672a\u4f7f\u7528) +test.message=\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8 +errmsg.req=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req2=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req3=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length2=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\uff5e\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +#EOF diff --git a/AMM_web/target/AMM/WEB-INF/classes/applicationContextBase.xml b/AMM_web/target/AMM/WEB-INF/classes/applicationContextBase.xml new file mode 100644 index 0000000..cb0bc86 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/applicationContextBase.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/App.properties b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/App.properties new file mode 100644 index 0000000..a2e22c3 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/App.properties @@ -0,0 +1,55 @@ +# +# App.properties +# +# ResourceReader.java \u3092\u4f7f\u7528\u3057\u3066\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002 +# ResourceReader#getStringQuick \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u518d\u8d77\u52d5\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u8aad\u307f\u53d6\u308a\u304c\u53ef\u80fd\u3067\u3059\u3002 +# + +# ----------------------------------------------------------------------------------------------------------- +# \u8a2d\u5b9a\u5024\u4e00\u89a7\u3088\u308a --- \u3053\u3053\u304b\u3089 + + +# \u958b\u767a\u62c5\u5f53\u8005\u306eOS\u30e6\u30fc\u30b6\u30fc\u540d +debug.users = soga, k_inaba, r_araki + +# LoginPage\u304chttp\u3067\u547c\u3073\u51fa\u3055\u308c\u305f\u3068\u304d\u306b\u3001https\u3078\u5909\u66f4\u3059\u308b +#use.ssl = yes +use.ssl = no + +# \u7d44\u7e54.\u7a2e\u5225\u306e\u9078\u629e\u80a2 +orgkinds=1.\u6559\u80b2\u6a5f\u95a2, 2.\u65bd\u8a2d\u56e3\u4f53\uff08\u653f\u4ee4\u6307\u5b9a\uff09, 3.\u65bd\u8a2d\u56e3\u4f53\uff08\u975e\u653f\u4ee4\u6307\u5b9a\uff09, 9.\u500b\u4eba + +# \u7d44\u7e54.\u767b\u9332\u53ef\u80fd\u4f1a\u54e1\u6570\u306e\u9078\u629e\u80a2 +limitnums=1,5,10,20,30,40,50 ,100 + +# \u7d76\u5bfe\u30d1\u30b9\u6307\u5b9a\u306eURL +url.back.top=http://chatty.chino-js.com:59924/Editor/#top +url.back.member=http://chatty.chino-js.com:59924/Editor/#member +url.back.orgadmin=http://chatty.chino-js.com:59924/Editor/#orgadmin +url.back.sysadmin=http://chatty.chino-js.com:59924/Editor/#sysadmin +urlroot=http://113.40.250.27:8080/AMM/ + +# \u30c1\u30e3\u30ec\u30f3\u30b8\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6709\u52b9\u671f\u9650(\u79d2) +cresdate=1200 + +# \u30e1\u30fc\u30eb\u9001\u4fe1\u95a2\u9023 +Smtp = localhost +mailto.orgentry = monkey.magic.2015.test@gmail.com +MailFrom = ChattyInfty Online + + +# \u4f1a\u54e1\u524a\u9664\u901a\u77e5\u5148 +api.deletecall=http://chatty.chino-js.com:59924/Editor/api/deletenotice + + + + +# \u691c\u8a3c\u7528(\u73fe\u5728\u672a\u4f7f\u7528) +test.message=\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8 +errmsg.req=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req2=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req3=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length2=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\uff5e\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +#EOF diff --git a/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/for_sdc.readme b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/for_sdc.readme new file mode 100644 index 0000000..dba03fb --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/for_sdc.readme @@ -0,0 +1 @@ +サン・データセンター 結合試験用サーバー向けプロパティファイル \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/jdbc.properties b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/jdbc.properties new file mode 100644 index 0000000..c38953c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/jdbc.properties @@ -0,0 +1,13 @@ +# DB\u63a5\u7d9a\u8a2d\u5b9a +# hibernateContextBase.xml\u304b\u3089\u53c2\u7167\u3055\u308c\u308b\u3002 +# \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u969b\u3082\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u3002 +# \u203b \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u5834\u5408\u306f Hibernate \u3067\u4fdd\u969c\u3055\u308c\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u304c\u78ba\u4fdd\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u7559\u610f\u3059\u308b\u3053\u3068\u3002 + +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider +jdbc.url=jdbc:mysql://localhost:3306/ammdb?useUnicode=true&characterEncoding=utf-8 +jdbc.schema=ammdb +jdbc.username=libgdc +jdbc.password=libgdcmanager +jdbc.dbname=ammdb + diff --git a/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/omitmaildomains.properties b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/omitmaildomains.properties new file mode 100644 index 0000000..e3822d2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/for_sdcsv/omitmaildomains.properties @@ -0,0 +1,6 @@ +#\u767b\u9332\u3092\u62d2\u5426\u3059\u308b\u30e1\u30fc\u30eb\u306edomain\u30ea\u30b9\u30c8 +msn.com +#gmail.com +hotmail.co.jp +#hotmail.com +yahoo.co.jp diff --git a/AMM_web/target/AMM/WEB-INF/classes/hibernateContextBase.xml b/AMM_web/target/AMM/WEB-INF/classes/hibernateContextBase.xml new file mode 100644 index 0000000..a81ce76 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/hibernateContextBase.xml @@ -0,0 +1,90 @@ + + + + + + + + + ${jdbc.driverClassName} + + + ${jdbc.url} + + + ${jdbc.username} + + + ${jdbc.password} + + + + + + + + + + + + + jp/co/y_net/amm/dao/Usr.hbm.xml + jp/co/y_net/amm/dao/Org.hbm.xml + jp/co/y_net/amm/dao/Pwtckt.hbm.xml + jp/co/y_net/amm/dao/Inf.hbm.xml + jp/co/y_net/amm/dao/Grp.hbm.xml + jp/co/y_net/amm/dao/Grpusr.hbm.xml + + + + + org.hibernate.dialect.PostgreSQLDialect + + true + ${jdbc.dbname} + + auto + ${jdbc.connection.provider_class} + 3 + 50 + + 30 + 1 + + + + + + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jdbc.properties b/AMM_web/target/AMM/WEB-INF/classes/jdbc.properties new file mode 100644 index 0000000..a4b8677 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jdbc.properties @@ -0,0 +1,18 @@ +# DB\u63a5\u7d9a\u8a2d\u5b9a +# hibernateContextBase.xml\u304b\u3089\u53c2\u7167\u3055\u308c\u308b\u3002 +# \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u969b\u3082\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u3002 +# \u203b \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u5834\u5408\u306f Hibernate \u3067\u4fdd\u969c\u3055\u308c\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u304c\u78ba\u4fdd\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u7559\u610f\u3059\u308b\u3053\u3068\u3002 + +#jdbc.driverClassName=org.postgresql.Driver +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider +#jdbc.url=jdbc:postgresql://172.16.12.61:5432/amm +jdbc.url=jdbc:mysql://localhost:3306/ammdb?useUnicode=true&characterEncoding=utf-8 +#jdbc.url=jdbc:mysql://localhost:3306/ammdb_20160222?useUnicode=true&characterEncoding=utf-8 +jdbc.schema=ammdb +jdbc.username=libgdc +jdbc.password=libgdcmanager +#jdbc.dbname=amm +jdbc.dbname=ammdb +#jdbc.dbname=ammdb_20160222 + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/TestLog.class b/AMM_web/target/AMM/WEB-INF/classes/jp/TestLog.class new file mode 100644 index 0000000..2aa82fa --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/TestLog.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppRequestCycleListener.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppRequestCycleListener.class new file mode 100644 index 0000000..7bab70d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppRequestCycleListener.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppSession$LoginUser.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppSession$LoginUser.class new file mode 100644 index 0000000..48dd744 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppSession$LoginUser.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppSession.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppSession.class new file mode 100644 index 0000000..e8e3982 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/AppSession.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/WicketApplication.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/WicketApplication.class new file mode 100644 index 0000000..53eaf03 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/WicketApplication.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/WicketApplication.properties b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/WicketApplication.properties new file mode 100644 index 0000000..faa9b19 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/WicketApplication.properties @@ -0,0 +1,7 @@ +# +# WicketApplication.properties +# +# App.properties\u3078\u79fb\u884c\u3057\u307e\u3057\u305f\u3002 +# +test = test.test +#EOF diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiChallengestring$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiChallengestring$Result.class new file mode 100644 index 0000000..1180811 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiChallengestring$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiChallengestring.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiChallengestring.class new file mode 100644 index 0000000..432d0fa --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiChallengestring.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiDatainitialize$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiDatainitialize$Result.class new file mode 100644 index 0000000..fd5184d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiDatainitialize$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiDatainitialize.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiDatainitialize.class new file mode 100644 index 0000000..fdd3c9b --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiDatainitialize.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiGroupmember$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiGroupmember$Result.class new file mode 100644 index 0000000..98007c2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiGroupmember$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiGroupmember.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiGroupmember.class new file mode 100644 index 0000000..9d598b1 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiGroupmember.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiInfo$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiInfo$Result.class new file mode 100644 index 0000000..28d6313 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiInfo$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiInfo.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiInfo.class new file mode 100644 index 0000000..bd16734 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiInfo.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogincheck$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogincheck$Result.class new file mode 100644 index 0000000..843f4c3 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogincheck$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogincheck.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogincheck.class new file mode 100644 index 0000000..9c27918 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogincheck.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogout$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogout$Result.class new file mode 100644 index 0000000..eca7940 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogout$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogout.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogout.class new file mode 100644 index 0000000..f79a9bc --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiLogout.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMember$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMember$Result.class new file mode 100644 index 0000000..4a00311 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMember$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMember.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMember.class new file mode 100644 index 0000000..2d52add --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMember.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMembergroup$Result.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMembergroup$Result.class new file mode 100644 index 0000000..c0e87d7 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMembergroup$Result.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMembergroup.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMembergroup.class new file mode 100644 index 0000000..b32b17c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiMembergroup.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage$ApiResult.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage$ApiResult.class new file mode 100644 index 0000000..c8be9b0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage$ApiResult.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage.class new file mode 100644 index 0000000..3521df0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage.html new file mode 100644 index 0000000..4ed4eef --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/api/ApiPage.html @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppLabel.java.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppLabel.java.back new file mode 100644 index 0000000..a3089f4 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppLabel.java.back @@ -0,0 +1,66 @@ +package jp.co.y_net.amm.common; + +import jp.co.y_net.amm.dao.Localestring; +import jp.co.y_net.amm.dao.LocalestringDao; +import jp.co.y_net.amm.service.LocaleStringSearch; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.Model; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * 運用中に変わる可能性のあるメッセージの取得を行う。 + * + * + * + * + * 通常の利用 + *  引数 initialString に画面に表示した文字列を設定する。 + *  プログラムは自動的に、このメッセージをデータベースへ登録する。 + *  二回目以降の呼び出しでは、initialString とは関係なく、データベースに登録された値を取得する。 + * + * メッセージの変更 + *  1.データベース(localestring)に登録されている値を修正する。 + *  2.ダッシュボードからキャッシュクリアを実行する。 + * + * @author k_inaba + */ +public class AppLabel extends Label{ + + @SpringBean(name="localestringDao") + private LocalestringDao localestringDao; + + @SpringBean(name="localeStringSearch") + private LocaleStringSearch ls; + + + public AppLabel(String id) { + super(id); + } + public AppLabel(String screenId, String id, String initialString) { + super(id); + String controlid = id; + String message = ls.getDisplayString(screenId, controlid, 0, ""); + if(StringUtils.isEmpty(message)) { + /* まだ登録されていない文字列なので 登録する */ + Localestring newItem = new Localestring(); + newItem.setScreenid(screenId); + newItem.setControlid(controlid); + newItem.setPrintstring(initialString); + newItem.setLanguageid(0); + newItem.setNum(""); + localestringDao.add(newItem); + /* LocaleStringSearchのキャッシュをクリアして再取得する */ + ls.clearCash(); + message = ls.getDisplayString("", controlid, 0, ""); + } + this.setDefaultModel(Model.of(message)); + } + + public static AppLabel of(String screenId, String id, String def) { + return new AppLabel(screenId, id, def); + } + + +} diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppLogger.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppLogger.class new file mode 100644 index 0000000..9627768 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppLogger.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppSendMail$MailSetting.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppSendMail$MailSetting.class new file mode 100644 index 0000000..7c66bfc --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppSendMail$MailSetting.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppSendMail.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppSendMail.class new file mode 100644 index 0000000..01919dd --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppSendMail.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppStringUtils.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppStringUtils.class new file mode 100644 index 0000000..9c9c87a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppStringUtils.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppUtils.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppUtils.class new file mode 100644 index 0000000..5df869c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/AppUtils.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/CalcHash.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/CalcHash.class new file mode 100644 index 0000000..875a85a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/CalcHash.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement$DropDownChoiceDate.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement$DropDownChoiceDate.class new file mode 100644 index 0000000..f57a5ef --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement$DropDownChoiceDate.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement$MyRenderer.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement$MyRenderer.class new file mode 100644 index 0000000..0fcc557 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement$MyRenderer.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement.class new file mode 100644 index 0000000..1014062 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceDateElement.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceElement$Renderer.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceElement$Renderer.class new file mode 100644 index 0000000..7d621b5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceElement$Renderer.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceElement.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceElement.class new file mode 100644 index 0000000..44987f2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ChoiceElement.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/CookieUtils.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/CookieUtils.class new file mode 100644 index 0000000..9250392 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/CookieUtils.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/InfoRenderer.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/InfoRenderer.class new file mode 100644 index 0000000..6ea0a68 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/InfoRenderer.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader$1.class new file mode 100644 index 0000000..1d20d51 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader$QuickeProperty.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader$QuickeProperty.class new file mode 100644 index 0000000..7261e9a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader$QuickeProperty.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader.class new file mode 100644 index 0000000..d36b72a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/ResourceReader.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/package-info.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/package-info.class new file mode 100644 index 0000000..6b34ac2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/common/package-info.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AbstractDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AbstractDao.class new file mode 100644 index 0000000..4de3972 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AbstractDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AppDef.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AppDef.class new file mode 100644 index 0000000..2ed2433 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AppDef.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AppDto.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AppDto.class new file mode 100644 index 0000000..aa26602 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/AppDto.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp$CreatedateComparator.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp$CreatedateComparator.class new file mode 100644 index 0000000..829095a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp$CreatedateComparator.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp.class new file mode 100644 index 0000000..626b00f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp.hbm.xml b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp.hbm.xml new file mode 100644 index 0000000..4ecc9a9 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grp.hbm.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/GrpDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/GrpDao.class new file mode 100644 index 0000000..9ba258e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/GrpDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr$JoindateComparator.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr$JoindateComparator.class new file mode 100644 index 0000000..cf1f0d2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr$JoindateComparator.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr.class new file mode 100644 index 0000000..d17e258 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr.hbm.xml b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr.hbm.xml new file mode 100644 index 0000000..6d28282 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Grpusr.hbm.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/GrpusrDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/GrpusrDao.class new file mode 100644 index 0000000..d20983e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/GrpusrDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Inf.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Inf.class new file mode 100644 index 0000000..1556ee3 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Inf.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Inf.hbm.xml b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Inf.hbm.xml new file mode 100644 index 0000000..11387c5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Inf.hbm.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/InfDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/InfDao.class new file mode 100644 index 0000000..0dfab46 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/InfDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Localestring.hbm.xml.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Localestring.hbm.xml.back new file mode 100644 index 0000000..c51fbb8 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Localestring.hbm.xml.back @@ -0,0 +1,33 @@ + + + + + + + + localestring_id_seq + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Localestring.java.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Localestring.java.back new file mode 100644 index 0000000..e9d8296 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Localestring.java.back @@ -0,0 +1,187 @@ +package jp.co.y_net.amm.dao; + + +/** + * Localestring + * + * @version 1.0.0 + * @author k_ohara + */ +public class Localestring implements java.io.Serializable { + + /** + * 表示文字クラス + */ + private static final long serialVersionUID = 1L; + + /** ID */ + private Integer id; + /** screenid */ + private String screenid; + /** languageid */ + private Integer languageid; + /** controlid */ + private String controlid; + /** num */ + private String num; + /** printstring */ + private String printstring; + + /** + * コンストラクタ + * + */ + public Localestring() { + } + + /** + * コンストラクタ + * + */ + public Localestring(String screenid, Integer languageid, String controlid, + String num, String printstring) { + + this.screenid = screenid; + this.languageid = languageid; + this.controlid = controlid; + this.num = num; + this.printstring = printstring; + } + + /** + * コピーコンストラクタ + * + */ + public Localestring(Localestring item) { + this.id = item.id; + this.screenid = item.screenid; + this.languageid = item.languageid; + this.controlid = item.controlid; + this.num = item.num; + this.printstring = item.printstring; + } + + /** + * IDを取得 + * + * @return ID + */ + public Integer getId() { + return this.id; + } + + /** + * IDを設定 + * + * @param id ID + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * screenidを取得 + * @return screenid + */ + public String getScreenid() { + return screenid; + } + + /** + * screenidを設定 + * @param screenid screenid + */ + public void setScreenid(String screenid) { + this.screenid = screenid; + } + + /** + * languageidを取得 + * @return languageid + */ + public Integer getLanguageid() { + return languageid; + } + + /** + * languageidを設定 + * @param languageid languageid + */ + public void setLanguageid(Integer languageid) { + this.languageid = languageid; + } + + /** + * controlidを取得 + * @return controlid + */ + public String getControlid() { + return controlid; + } + + /** + * controlidを設定 + * @param controlid controlid + */ + public void setControlid(String controlid) { + this.controlid = controlid; + } + + /** + * numを取得 + * @return num + */ + public String getNum() { + return num; + } + + /** + * numを設定 + * @param num num + */ + public void setNum(String num) { + this.num = num; + } + + /** + * printstringを取得 + * @return printstring + */ + public String getPrintstring() { + return printstring; + } + + /** + * printstringを設定 + * @param printstring printstring + */ + public void setPrintstring(String printstring) { + this.printstring = printstring; + } + +} +/* +CREATE TABLE ammdb.localestring +( + id serial NOT NULL, -- ID + screenid character varying(64), -- 画面ID + languageid integer, -- 言語 0=日本語/1=英語 + controlid character varying(64), -- 項目ID + num character varying(20), -- 枝番 + printstring character varying(1024), -- 表示文字列 + CONSTRAINT localestring_pkey PRIMARY KEY (id ) +) +WITH ( + OIDS=FALSE +); +ALTER TABLE ammdb.localestring + OWNER TO libgdc; +COMMENT ON TABLE ammdb.localestring + IS '表示文字列'; +COMMENT ON COLUMN ammdb.localestring.id IS 'ID'; +COMMENT ON COLUMN ammdb.localestring.screenid IS '画面ID'; +COMMENT ON COLUMN ammdb.localestring.languageid IS '言語 0=日本語/1=英語'; +COMMENT ON COLUMN ammdb.localestring.controlid IS '項目ID'; +COMMENT ON COLUMN ammdb.localestring.num IS '枝番'; +COMMENT ON COLUMN ammdb.localestring.printstring IS '表示文字列'; +*/ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/LocalestringDao.java.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/LocalestringDao.java.back new file mode 100644 index 0000000..ceb9c7e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/LocalestringDao.java.back @@ -0,0 +1,41 @@ +package jp.co.y_net.amm.dao; + +import java.util.List; + +/** + * LocalestringDao + * + * @version 1.0.0 + */ +public interface LocalestringDao { + + /** + * Localestringを取得
+ * + * @param item Localestring + * @return List + */ + List get(Localestring item); + + /** + * Localestringを追加 + * + * @param item Localestring + */ + void add(Localestring item); + + /** + * Localestringを更新 + * + * @param item Localestring + */ + void update(Localestring item); + + /** + * Localestringを削除 + * + * @param item Localestring + */ + void remove(Localestring item); + +} diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back new file mode 100644 index 0000000..93ee127 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back @@ -0,0 +1,61 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.hibernate.criterion.Order; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + +/** + * LocalestringDaoImpl + * + * @version 1.0.0 + */ +@Component("localestringDao") +public class LocalestringDaoImpl extends AbstractDao implements LocalestringDao { + + @Override + public List get(Localestring item) { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Localestring.class); + dc.add(Example.create(item)); + dc.addOrder(Order.asc("num")); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + + } + @Override + public void add(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.save(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override + public void update(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + + hibernateTemplate.update(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override + public void remove(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.delete(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org$EntryDateComparator.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org$EntryDateComparator.class new file mode 100644 index 0000000..bd2a620 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org$EntryDateComparator.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org.class new file mode 100644 index 0000000..1b86cdb --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org.hbm.xml b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org.hbm.xml new file mode 100644 index 0000000..0d05ac2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Org.hbm.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/OrgDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/OrgDao.class new file mode 100644 index 0000000..199729c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/OrgDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Pwtckt.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Pwtckt.class new file mode 100644 index 0000000..4020e4e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Pwtckt.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Pwtckt.hbm.xml b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Pwtckt.hbm.xml new file mode 100644 index 0000000..7d83892 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Pwtckt.hbm.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/PwtcktDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/PwtcktDao.class new file mode 100644 index 0000000..ab37d5e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/PwtcktDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao$1.class new file mode 100644 index 0000000..da2a63c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao$TextDBAccSampleDto.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao$TextDBAccSampleDto.class new file mode 100644 index 0000000..965b6f0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao$TextDBAccSampleDto.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao.class new file mode 100644 index 0000000..fb29e03 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/TextDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr$LastlogindateComparator.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr$LastlogindateComparator.class new file mode 100644 index 0000000..030d1b5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr$LastlogindateComparator.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr.class new file mode 100644 index 0000000..efd96c2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr.hbm.xml b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr.hbm.xml new file mode 100644 index 0000000..8c257d2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/Usr.hbm.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/UsrDao.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/UsrDao.class new file mode 100644 index 0000000..bf837e5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/UsrDao.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/package-info.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/package-info.class new file mode 100644 index 0000000..394d652 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/dao/package-info.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/AppPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/AppPage.class new file mode 100644 index 0000000..837cb4c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/AppPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$1.class new file mode 100644 index 0000000..4b6c351 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$2.class new file mode 100644 index 0000000..988613e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$3.class new file mode 100644 index 0000000..adffdb0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$Callback.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$Callback.class new file mode 100644 index 0000000..6057319 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$Callback.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$Executable.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$Executable.class new file mode 100644 index 0000000..b6f8e86 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage$Executable.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage.class new file mode 100644 index 0000000..e9ae321 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage.html new file mode 100644 index 0000000..59904b2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonConfirmPage.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + +
フィードバックメッセージ
+
+
+ +
+ 確認メッセージ + +
+ 本当によろしいですか? +
+
+
+
+ + +
+ +
+ + + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$1.class new file mode 100644 index 0000000..16e05d4 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$2.class new file mode 100644 index 0000000..a3a1cd1 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$3.class new file mode 100644 index 0000000..ca8ff28 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$4.class new file mode 100644 index 0000000..59a3548 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$5.class new file mode 100644 index 0000000..c0f01e9 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$6.class new file mode 100644 index 0000000..f9e1fd8 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$7.class new file mode 100644 index 0000000..8e91237 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$8.class new file mode 100644 index 0000000..c185f60 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$9.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$9.class new file mode 100644 index 0000000..7122b2b --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$9.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$1.class new file mode 100644 index 0000000..eb52c99 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$2.class new file mode 100644 index 0000000..2d04ce9 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1.class new file mode 100644 index 0000000..2379ea6 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$2.class new file mode 100644 index 0000000..597dd06 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton.class new file mode 100644 index 0000000..ed615f5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA.class new file mode 100644 index 0000000..970bdba --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA.html new file mode 100644 index 0000000..972da9a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/CommonFrameA.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + ChattyInftyOnline + + + + + +
+
+ + +

+ +
[各ページで記載] +














+
+ +
+ + + +
+
+ + + + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.class new file mode 100644 index 0000000..610ec69 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.html new file mode 100644 index 0000000..2bbfa9f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.html @@ -0,0 +1,43 @@ + + + + + + + + + + Dashboard + + + +
+
+ + +

+ + + +
フィードバックメッセージ
+ +
+ + + + + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.html.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.html.back new file mode 100644 index 0000000..6af6e28 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/DashboardPage.html.back @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + AMM + + + +
+
+ + +

+ + + +
フィードバックメッセージ
+ +アプリケーションダッシュボード 兼 動的な実装ガイドライン 兼 ソフトウェア仕様書 兼 TODOリスト として記述します。 + + + +

アプリケーションダッシュボード

+ +
メッセージ
+ キャッシュされているメッセージはX件です。 +
+ + + + + +

ソフトウェアアーキテクチャ仕様書

+ +

ミドルウェア

+画面プログラム、画面間連携は Apache Wicket を使用する。 +データベースアクセスは Hibernate を使用する。 +IDコンテナの仕組みを設ける場合は Spring を使用する。 + +

ライセンス記述

+本アプリケーションは Apache Software Foundation (http://www.apache.org)によって開発されたソフトウェアを含んでいる事をここに明記します。 + +

用語

+
+
AMM
+
日点ChattyInftyOnlineのサブプロジェクトである 【アカウント管理モジュール】の略称である。
+ なお、ドキュメントやモジュールを汎用化して管理するため、便宜上「本アプリケーション」や「App」として記述する場合がある。 +
+ +
+ +

機能について

+別紙「ChattyInftyOnline 会員管理要件定義書」を参照。
+記述内容は 1.システム導入の目的と目標/2.システム化の対象領域/3.機能要求(画面ごとの機能と項目の構成) + +

セキュリティ要件について

+以下のセキュリティ要件に対応する。 + +
    +
  • バッファオーバーフロー(Java)
  • +
  • クロスサイトスクリプティング(Wicket)
  • +
  • クロスサイトリクエストフォージェリー(Wicket)
  • +
  • セッション固定化攻撃(LoginPage)
  • +
  • SQLインジェクション(Hibernate)
  • +
+ +以下は、実装者への教育により達成すべき要件となります。 +
    +
  • 公開領域に機密情報が含まれるファイルを配置しないこと
  • +
+
+ +

非機能について ~キーメカニズム~

+ +

表示文字列の管理

+画面に表示するメッセージはアプリケーションを停止せずに変更できるものとする。 +データベースのテーブル(Localestring)を修正し、ダッシュボード画面で「キャッシュクリア」を指示することにより、 +変更が適用されるものとする。 + + + +

プログラム構成

+

ベース (jp.co.y_net.amm.base)

+アプリケーションの根幹となるプログラムで構成される。 +このパッケージのクラスは、「ページ」レイヤへの依存性を持たない +
    +
  • アプリケーション全体の挙動を定義するクラス
  • +
  • 画面の既定クラス
  • +
  • エラーハンドリングを行うクラス
  • +
  • ログ出力を行うクラス
  • +
  • セッション情報を管理するクラス
  • +
  • アプリケーション設定値を保持するプロパティファイル
  • +
+ + +

コモン~共通~ (jp.co.y_net.amm.common)

+共通実装の集約を目的としたパッケージ。『車輪の再発明』を防ぐ。 +実装量を軽減し、生産性の向上を図る。 +同一原因の不具合対策が発生したときに、修正漏れを防ぐ。
+このパッケージのクラスは、他レイヤへの依存性を持たない(他のプロジェクトへも容易に移植できる) + +

ページ (jp.co.y_net.amm.page)

+各画面のサービスを実現する。主に、JavaプログラムとHTMLファイルで構成される。 +リソースとしてcssや画像ファイルも配置される。 +このパッケージ配下のHTMLのみでデザイン開発が可能 + + + + +

実装ガイドライン

+

目的

+本アプリケーションの開発担当者における合意事項の集約とする。 +このドキュメントに記載されている範囲内のことにおいては設計プロセスを省略できる。 + +

開発環境構築手順

+統合開発環境Eclipseをセットアップし、SVNから本プロジェクトをインポートし、動的プロジェクトとして実行する。 + +

実装標準フロー

+
    +
  1. + HTMLファイルを作成する
    + 本HTMLをコピーし、画面定義書やデザイン定義書を参考にする。 +
  2. +
  3. + 各画面コンポーネントに wicket:id を付与する +
  4. +
  5. + 対応するJavaクラスを作成する。 +
  6. +
+ +

命名規約

+以下は、慣例に従い命名することを原則とし、厳格な規約は設定しない。 +効率的な命名が決定できないときに参照されることを想定する。
+

+たとえば、すでに標準化してデジタル化されている文字列がすでに存在するならば、 +そのままコピー&ペーストすればよい。 +そのまま使用した方が、効率化と共通化の観点からメリットが高いと考える。 +

+
+
HTML名
+
パスカル形式+"Page.html" ⇒ 例:UserLoginPage.html
+
WicketID
+
キャメル形式で種類と役割を示す。 ⇒ 例:labelUserName
+
プロパティファイルのkey
+
特筆なし
+
+その他
+

別途対応表などを参照しなくても理解可能な命名を行うこと。

+
+× ProgramName = "001";
+○ ProgramName = "UserLogin"
+
+ + +

出力コンポーネントのサンプル

+※ ソースコードも合わせて参照のこと。 +動的な文字列の表示【今日の日付を表示する部分
+静的な文字列の表示(プロパティファイルから文字列を取得)【メッセージ
+静的な文字列はアプリケーションを再起動せずに変更ができるようにするため、AppLabelクラスを利用する。 + + +

入力コンポーネントのサンプル

+ +

設定値の取得

+プロパティファイルから値を取得するためには、共通部品を使用する。詳細は本ページのJavaプログラムを参照。 +
+実装サンプル
+プロパティファイルからの値取得:メッセージ1
+サーバーを再起動せずに更新されたプロパティファイルからの取得:メッセージ2
+
+ +

エラーハンドリングのサンプル

+TOOD +

ログ出力のサンプル

+TODO + + +

TODOリスト

+
+・アクセス管理
+WicketのRoleを使う作戦は中止とする。3分岐以上でスマートで無い。
+
+http://d.hatena.ne.jp/n314/20110531/1306809192
+ ページクラスの表示権限がない場合はそれに対するリンクも表示しない
+
+・localestring管理のアーキテクチャ作成
+ 開発フロー
+  デバッグ
+   ・登録漏れを確認する
+   ・更新するためのSQLを生成する
+ 多言語データ追加フロー
+
+
+
+・エラーメッセージ管理のアーキテクチャ作成
+・DB操作のアーキテクチャ作成
+・Label#setEscapeModelString(false) を使いたいときの考慮
+
+
+
+・TopPageは開発モード以外のとき表示されてはいけない。
+
+
+ + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$1.class new file mode 100644 index 0000000..ecf863a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$2.class new file mode 100644 index 0000000..ee9e59f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$3.class new file mode 100644 index 0000000..0ba2269 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$4.class new file mode 100644 index 0000000..7473884 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage.class new file mode 100644 index 0000000..cb40f4a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage.html new file mode 100644 index 0000000..f1e79c3 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/EntryPasswordPage.html @@ -0,0 +1,58 @@ + + + + + + + + + + パスワード入力 + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+ +

+パスワードが登録されました。 +

+ + +
+ + + + + + + + + +
パスワード
パスワード(確認)
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage$1.class new file mode 100644 index 0000000..3ea29fe --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage.class new file mode 100644 index 0000000..7051916 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage.html new file mode 100644 index 0000000..d7081b5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/ErrorPage.html @@ -0,0 +1,24 @@ + + + + + + エラー + + +
+
+ +
フィードバックメッセージ
+ + +エラーが発生しました。
+
+ +
+トップへ + +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$1.class new file mode 100644 index 0000000..92112b7 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$10.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$10.class new file mode 100644 index 0000000..f456bf9 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$10.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$1.class new file mode 100644 index 0000000..480161f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$2.class new file mode 100644 index 0000000..1e2e408 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$3.class new file mode 100644 index 0000000..ea377dd --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$4.class new file mode 100644 index 0000000..aa54e83 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$5.class new file mode 100644 index 0000000..65274d1 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11.class new file mode 100644 index 0000000..e2a1b19 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$11.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$12.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$12.class new file mode 100644 index 0000000..5b9bc2f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$12.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$2.class new file mode 100644 index 0000000..de77238 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$3.class new file mode 100644 index 0000000..64ae130 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$4.class new file mode 100644 index 0000000..cca2d83 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$5.class new file mode 100644 index 0000000..f91cc45 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$6.class new file mode 100644 index 0000000..3dc8401 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$7.class new file mode 100644 index 0000000..6fb6aae --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$8$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$8$1.class new file mode 100644 index 0000000..46826a1 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$8$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$8.class new file mode 100644 index 0000000..498b03a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$9.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$9.class new file mode 100644 index 0000000..714d99c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage$9.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage.class new file mode 100644 index 0000000..3f7dc3d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage.html new file mode 100644 index 0000000..0fff569 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupListPage.html @@ -0,0 +1,113 @@ + + + + + + + + + + + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る + +
フィードバックメッセージ
+ + + +
+

完了メッセージ

+ +

管理グループ一覧

+
+

グループ作成

+ 名称: + +
+ + + + + + + + + + + + + + + +
グループ名称作成日参加人数管理者 
グループ名2015/3/285管理者 + メンバーリストへ + +
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+ +

参加グループ一覧

+
+
+ + + + + + + + + + + + + + + + + +
グループ名称メンバー数管理者参加日状態 
グループ名5管理者2015/3/28参加済み + + + + + +
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$1.class new file mode 100644 index 0000000..91914e5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$2.class new file mode 100644 index 0000000..f8b7330 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$3.class new file mode 100644 index 0000000..b84884a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$1.class new file mode 100644 index 0000000..6327a62 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$2.class new file mode 100644 index 0000000..1514a44 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$3.class new file mode 100644 index 0000000..732ba59 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$4.class new file mode 100644 index 0000000..b23b285 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$5.class new file mode 100644 index 0000000..ab7f74c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4.class new file mode 100644 index 0000000..61a5c02 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$5.class new file mode 100644 index 0000000..ace9af1 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage.class new file mode 100644 index 0000000..ac499d6 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage.html new file mode 100644 index 0000000..bb8aa32 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/GroupMemberListPage.html @@ -0,0 +1,86 @@ + + + + + + + + + + + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +
+

完了メッセージ

+ +

{グループ名}の参加者

+ + + + + + + + + + + + + +
メールアドレス
メールアドレス確認
+ +
+ +
+ + + + + + + + + + + + + +
メンバーの名前参加日状態 
メンバーの名前2015/3/28参加済み + + + + + このグループの管理者です +
+
<前へ 次へ>
+
+
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$1.class new file mode 100644 index 0000000..5f5e7f7 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$2.class new file mode 100644 index 0000000..b957d21 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$3.class new file mode 100644 index 0000000..83174f9 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$4.class new file mode 100644 index 0000000..119691c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$5.class new file mode 100644 index 0000000..78f3be7 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$6.class new file mode 100644 index 0000000..c9653da --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$7.class new file mode 100644 index 0000000..3fd7737 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage.class new file mode 100644 index 0000000..f1354cc --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage.html new file mode 100644 index 0000000..afa5869 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoEntryPage.html @@ -0,0 +1,74 @@ + + + + + + + + + + + お知らせ作成 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+

登録しました。

+
+タイトル +
+
+
+ +あとn文字入力できます。 + + + + +
+ +
+
+ プレビュー +
+
+
+
+ +
+ + + + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$1.class new file mode 100644 index 0000000..745fad6 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$2.class new file mode 100644 index 0000000..3bf7dc6 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$3.class new file mode 100644 index 0000000..ac50fc4 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4$1.class new file mode 100644 index 0000000..4819d8f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4$2.class new file mode 100644 index 0000000..2804c1d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4.class new file mode 100644 index 0000000..5180989 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage.class new file mode 100644 index 0000000..a9e329a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage.html new file mode 100644 index 0000000..94ea78e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoListPage.html @@ -0,0 +1,64 @@ + + + + + + + + + + + お知らせ管理 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

お知らせ管理

+ +

新規お知らせ作成

+ +新規お知らせ作成 + +

現在表示されているお知らせ

+
+

削除しました。

+ + + + + + + + + + +
お知らせタイトル掲載日時 
+ お知らせのタイトルをクリックすると「お知らせ本文ページ」へ遷移します + 2015/3/31 14:23
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoPage.class new file mode 100644 index 0000000..e8481b3 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoPage.html new file mode 100644 index 0000000..6278f96 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/InfoPage.html @@ -0,0 +1,55 @@ + + + + + + + + + + + お知らせ + + + +
+
+ + +

+ + + +トップへ戻る + +
フィードバックメッセージ
+ +
+ +

ChattyInftyの講習の日程が決まりました。

+

2015/3/31

+

+ ChattyInftyの講習の日程が決まりました。
+ 日時:2015年8月18日 10:00~12:00
+ 場所:日本点字図書館 本館3階
+ 内容:(1)ChattyInftyOnlineとは
+    (2)マルチメディアデイジーを作ろう
+    (3)質疑応答
+

+
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage$1.class new file mode 100644 index 0000000..bb08ef2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage.class new file mode 100644 index 0000000..7b8f037 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage.html new file mode 100644 index 0000000..746ea4e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/LoginPage.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + Login + + + + + + + + +

ログイン

+
フィードバックメッセージ
+
+ + + + + + + + + + + + + + + + +
メールアドレス
パスワード + + +
+
+ + +
+ +
+
+ + +
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$1.class new file mode 100644 index 0000000..a87623f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$10.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$10.class new file mode 100644 index 0000000..4c27613 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$10.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$2.class new file mode 100644 index 0000000..ca46970 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$3.class new file mode 100644 index 0000000..f6345d0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$4.class new file mode 100644 index 0000000..a11599b --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$5.class new file mode 100644 index 0000000..ee245ec --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$6.class new file mode 100644 index 0000000..c96178f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$7.class new file mode 100644 index 0000000..2f899fb --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$8.class new file mode 100644 index 0000000..64bea88 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$9.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$9.class new file mode 100644 index 0000000..843ba47 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage$9.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage.class new file mode 100644 index 0000000..90dccbe --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage.html new file mode 100644 index 0000000..4dd05fc --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberDetailPage.html @@ -0,0 +1,115 @@ + + + + + + + + + + 会員情報詳細 + + + +
+
+ + +

+ + + +3.2.9 会員情報編集画面 / 3.2.11.2 会員情報詳細画面 + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +

会員情報

+ +
+

完了メッセージ

+ +※ ・・・ 管理者、運営者のみ表示 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
所属○○○中学校
氏名
メールアドレス
メールアドレス確認用
(変更するときのみ入力)
新しいパスワード(※)
新しいパスワード確認用
(変更するときのみ入力)
状態2015/3/21 21:43
最終ログイン日 +2015/3/21 21:43
利用可能期間yyyy/MM/dd~yyyy/MM/dd
 
+ + + + ※ メールアドレスを変更するとパスワードがリセットされます。
+
+ + + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+ + +
+ + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$1.class new file mode 100644 index 0000000..df46dae --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$10.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$10.class new file mode 100644 index 0000000..a91303d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$10.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$2.class new file mode 100644 index 0000000..ae7990b --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$3.class new file mode 100644 index 0000000..30badaf --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$4.class new file mode 100644 index 0000000..a80e5ac --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$5.class new file mode 100644 index 0000000..9e54139 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$6.class new file mode 100644 index 0000000..66a32fb --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$7$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$7$1.class new file mode 100644 index 0000000..bc3b9ce --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$7$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$7.class new file mode 100644 index 0000000..f7915bf --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$8.class new file mode 100644 index 0000000..f3f9c5a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$9.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$9.class new file mode 100644 index 0000000..c3fd96b --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage$9.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage.class new file mode 100644 index 0000000..be909f5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage.html new file mode 100644 index 0000000..3f24a18 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MemberListPage.html @@ -0,0 +1,104 @@ + + + + + + + + + + 会員管理 + + + +
+
+ + +

+ + + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+ +

○○中学校

+ +

追加

+
+

仮登録を行い、登録したメールアドレスへ会員追加メールを送りました。

+ + + + + + + + + + + + + + + + +
氏名
メールアドレス
メールアドレス確認
+ +
このユーザはシステム管理者の追加はできません。
+
+
+ +
+

会員

+ +
+ + + + + + + + + + + + + + + + + + + + + +
氏名メールアドレス状態最終ログイン日時
○○ 太郎abcdefg.taro@example.com登録済み2015/3/28 XX:XX
○○ 次郎abcdefg.jiro@example.com仮登録 
+
+
<前へ 次へ>
+
+ +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MenuPage.html.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MenuPage.html.back new file mode 100644 index 0000000..22ba7f5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MenuPage.html.back @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + メニュー + + + +
+
+ + +

+ + + +ユーザによって異なるメニューが表示されます。 + +
+

機関会員メニュー(スタブ)

+3.2.8 機関会員メニュー + +
+ +
+

機関管理者メニュー(スタブ)

+ +
+ +
+

運営管理者メニュー(スタブ)

+ +
+ +
+

システム開発メニュー

+運用時にこのメニューは表示されません。 + +
+ + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MenuPage.java.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MenuPage.java.back new file mode 100644 index 0000000..daebbee --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/MenuPage.java.back @@ -0,0 +1,112 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppLogger; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.markup.html.link.Link; + + + +public class MenuPage extends CommonFrameA{ + + /** + * ページ利用可能Roleの設定 + */ + @Override + protected boolean okUser() { + return false + || AppSession.isLogin(AppSession.LoginUser.Role.USER) + || AppSession.isLogin(AppSession.LoginUser.Role.LEADER) + || AppSession.isLogin(AppSession.LoginUser.Role.ADMIN) + || AppSession.isLogin(AppSession.LoginUser.Role.DEV) + ; + } + public MenuPage() { + + /* + * 機関会員メニュー + */ + WebMarkupContainer contUser = new WebMarkupContainer("contUser"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.USER); + } + }; + add(contUser); + /* ・会員情報の編集 */ + contUser.add(new Link("goMemberDetail"){ + @Override + public void onClick() { + MemberDetailPage page = new MemberDetailPage(AppSession.getLoginUserId()); + setResponsePage(page); + } + }); + + /* + * 機関管理者メニュー + */ + WebMarkupContainer contLeader = new WebMarkupContainer("contLeader"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.LEADER); + } + }; + add(contLeader); + contLeader.add(new Link("goMemberList") { + @Override + public void onClick() { + MemberListPage page = new MemberListPage(AppSession.getLoginOrgId()); + setResponsePage(page); + } + }); + contLeader.add(new Link("goOrgDetail") { + @Override + public void onClick() { + OrgDetailPage page = new OrgDetailPage(AppSession.getLoginOrgId()); + setResponsePage(page); + } + }); + + /* + * 運営管理者メニュー + */ + WebMarkupContainer contAdmin = new WebMarkupContainer("contAdmin"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.ADMIN); + } + }; + add(contAdmin); + contAdmin.add(new Link("goOrgEntryList") { + @Override + public void onClick() { + OrgEntryListPage page = new OrgEntryListPage(); + setResponsePage(page); + } + }); + contAdmin.add(new Link("goOrgMemberList") { + @Override + public void onClick() { + OrgMemberListPage page = new OrgMemberListPage(); + setResponsePage(page); + } + }); + contAdmin.add(new BookmarkablePageLink("ogInfoList", InfoListPage.class)); + + /* + * システム開発者メニュー + */ + WebMarkupContainer contDev = new WebMarkupContainer("contDev"){ + @Override + public boolean isVisible() { + return AppLogger.isDebug(); + } + }; + add(contDev); + contDev.add(new BookmarkablePageLink("goDashboard", DashboardPage.class)); + + + } +} diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$1.class new file mode 100644 index 0000000..16637a0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$10.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$10.class new file mode 100644 index 0000000..0456a97 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$10.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$11.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$11.class new file mode 100644 index 0000000..6bd4046 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$11.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$12.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$12.class new file mode 100644 index 0000000..75c8919 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$12.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$2.class new file mode 100644 index 0000000..114fffc --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$3.class new file mode 100644 index 0000000..cc2b403 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$4.class new file mode 100644 index 0000000..c1dc4ca --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$5.class new file mode 100644 index 0000000..aa2b994 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$6.class new file mode 100644 index 0000000..db94888 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$7.class new file mode 100644 index 0000000..506ba83 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$8.class new file mode 100644 index 0000000..f66c56b --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$9.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$9.class new file mode 100644 index 0000000..3f5f4f5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$9.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$DateDropDownOnchangeBehavior.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$DateDropDownOnchangeBehavior.class new file mode 100644 index 0000000..184ffeb --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage$DateDropDownOnchangeBehavior.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage.class new file mode 100644 index 0000000..f018510 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage.html new file mode 100644 index 0000000..d6b1536 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgDetailPage.html @@ -0,0 +1,175 @@ + + + + + + + + + + 登録情報 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +

登録会員情報

+ +
+

(更新する)機関・団体情報情報を更新しました。 + / (削除する)機関・団体情報情報を削除しました。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDxxx
会員の種別教育機関
機関・団体名称 +
代表者|氏名
ふりがな
連絡先郵便番号
連絡先住所
連絡先電話番号
連絡先メールアドレス
連絡先メールアドレス確認用
(変更するときのみ入力)
パスワード
(変更するときのみ入力)
パスワード確認用
(変更するときのみ入力)
利用可能期間 + + + + +
+ ~ + + + +
+ 日付が正しくありません。 +
登録可能会員数 + + + +
+ + + ※ メールアドレスを変更するとパスワードがリセットされます。
+
+ + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+ +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$1.class new file mode 100644 index 0000000..55759ad --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$2.class new file mode 100644 index 0000000..7e874c4 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$3.class new file mode 100644 index 0000000..0114aa0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$4.class new file mode 100644 index 0000000..5d748b8 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$5.class new file mode 100644 index 0000000..50da325 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$6.class new file mode 100644 index 0000000..e0ac418 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$7.class new file mode 100644 index 0000000..e4fbab4 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$8.class new file mode 100644 index 0000000..b75ecba --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage.class new file mode 100644 index 0000000..28cc3f2 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage.html new file mode 100644 index 0000000..7aee237 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryDetailPage.html @@ -0,0 +1,126 @@ + + + + + + + + + + 申請内容表示 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+

+ 承認しました。連絡先メールアドレスへ申請内容承認メールを送りました。/拒否しました。連絡先メールアドレスへ申請内容拒否メールを送りました。 +

+ +

申請内容詳細

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
会員の種別教育機関
申請機関・団体○○中学校
担当者|氏名○○太郎
ふりがなまるまるたろう
連絡先郵便番号999-9999
連絡先住所東京都新宿区高田馬場1-1-1
連絡先電話番号03-9999-9999
連絡先メールアドレスabcd.taro@example.com
拒否理由 + +
+ +
+ +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+
+
+ ※ 有効期限が残っている場合でも、リセットされます。
+
フィードバックメッセージ
+
+ + + + +
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$1.class new file mode 100644 index 0000000..2b0e453 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$2$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$2$1.class new file mode 100644 index 0000000..63ab2df --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$2$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$2.class new file mode 100644 index 0000000..bbd9142 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$3.class new file mode 100644 index 0000000..694b9f8 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$4.class new file mode 100644 index 0000000..8b3b117 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$5.class new file mode 100644 index 0000000..55540cc --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage.class new file mode 100644 index 0000000..75147d3 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage.html new file mode 100644 index 0000000..a731c55 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryListPage.html @@ -0,0 +1,71 @@ + + + + + + + + + + 申請一覧 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

申請一覧

+ + + +表示順序:
+絞り込み:
+ + + + + + + + + + + + + + + + + + + + + + +
会員種別登録会員名称状態申請日時
教育機関○○中学校未処理2015/3/28 XX:XX
施設団体(政令指定)○○市教育委員会承認済み2015/3/28 XX:XX
+
<前へ 次へ>
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$1.class new file mode 100644 index 0000000..18b07a6 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$10.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$10.class new file mode 100644 index 0000000..c091c51 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$10.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$2.class new file mode 100644 index 0000000..8577f8c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$3.class new file mode 100644 index 0000000..00348bb --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$4.class new file mode 100644 index 0000000..60803b9 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$5.class new file mode 100644 index 0000000..2c3a4d6 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$6.class new file mode 100644 index 0000000..a7e2b07 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$7.class new file mode 100644 index 0000000..b807f1a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$8.class new file mode 100644 index 0000000..0e7c619 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$9.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$9.class new file mode 100644 index 0000000..8dd3856 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage$9.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage.class new file mode 100644 index 0000000..fb3b988 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage.html new file mode 100644 index 0000000..729aa8a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgEntryPage.html @@ -0,0 +1,128 @@ + + + + + + + + + + 新規申請 + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+

+ 申請を行いました。申請の結果は連絡先メールアドレスへお送りします。しばらくお待ちください。 +

+ + + + + +
会員の種別 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
会員の種別 + 選択された種別 + +
申請機関・団体
担当者|氏名
ふりがな
連絡先郵便番号
連絡先住所
連絡先電話番号
連絡先メールアドレス
メールアドレス確認用
※メールアドレスはログインIDとして使用します。
利用規約 +
+ +
+ + + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$1.class new file mode 100644 index 0000000..31103e5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$2.class new file mode 100644 index 0000000..9974ebc --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$3.class new file mode 100644 index 0000000..f234b8c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$4.class new file mode 100644 index 0000000..9c44f11 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$5.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$5.class new file mode 100644 index 0000000..8a8a35a --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$5.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6$1.class new file mode 100644 index 0000000..7c3b52e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6$2.class new file mode 100644 index 0000000..a93af0d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6.class new file mode 100644 index 0000000..500aaf4 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$6.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$7.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$7.class new file mode 100644 index 0000000..292bbf5 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$7.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$8.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$8.class new file mode 100644 index 0000000..7491769 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage$8.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage.class new file mode 100644 index 0000000..12ae929 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage.html new file mode 100644 index 0000000..e30cd90 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/OrgMemberListPage.html @@ -0,0 +1,104 @@ + + + + + + + + + + 登録会員情報管理 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

登録会員情報管理

+ +
+

完了メッセージ

+ + 会員の種別:
+
+ +

登録会員

+
+
+ + + + + + + + + + + + + + + + +
登録会員名称会員種別状態会員数申請日時
○○中学校未処理 + 5(20) + 2015/3/28 XX:XX
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+ + + + + + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel$1.class new file mode 100644 index 0000000..a22a11d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel.class new file mode 100644 index 0000000..d493e5c --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel.html new file mode 100644 index 0000000..85c3b3b --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordInfoPanel.html @@ -0,0 +1,15 @@ + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx
+ 有効期限 2015/09/12 20:20:15
+ + 期限が切れています。
+
+
+
この管理者のパスワードは変更されていません。
+ +
+ \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage$1.class new file mode 100644 index 0000000..3f118fb --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage$2.class new file mode 100644 index 0000000..e207529 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage.class new file mode 100644 index 0000000..5a32ca1 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage.html new file mode 100644 index 0000000..c05017d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/PasswordResetPage.html @@ -0,0 +1,45 @@ + + + + + + + + + + パスワードリセット + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+

パスワード再設定用のメールを送りました。ご確認ください。

+ + + + + +
メールアドレス
+ +
+ + +
+ +
+
+ +tml> \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/StubLogin.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/StubLogin.html new file mode 100644 index 0000000..3bd9f3f --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/StubLogin.html @@ -0,0 +1,70 @@ + + + + + + + + + + ログインのサンプル + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
チャレンジ値(A)
+ これは事前に /api/challengestring から取得する値です。
メールアドレス(B)
+ これはユーザに入力してもらう値です。 +
パスワード(C)
+ これはユーザに入力してもらう値です。 +
パスワードハッシュ(D)
+ これはログインボタンがクリックされた後にクライアントのブラウザで計算する値です。Hiddenで保持することを想定します。 +
チャレンジレスポンス(E)
+ これはログインボタンがクリックされた後にクライアントのブラウザで計算する値です。Hiddenで保持することを想定します。 +
+
+ + + +
+ +
+
+
+ログインボタンがクリックされたとき、次の結果が得られれば正しいです。
+パスワードハッシュ(D)=a4aab8fb4c4e0284197d07fe5f3106709b4015661ad9006cbb2f4f7304f0fa18
+チャレンジレスポンス(E)=98d2f4c10eb32bd82d66b86c36a89b9cf31b86065dfce40f6d334dc90d2b2262
+
+文書管理システムは、クライアントから「メールアドレス(B)」と「チャレンジレスポンス(E)」を受け取り、次のAPIで会員管理に問い合わせます。 +
+http://localhost:8080/AMM/api/logincheck?loginid=okita%40example.com&cres=98d2f4c10eb32bd82d66b86c36a89b9cf31b86065dfce40f6d334dc90d2b2262&cstr=YscDAWTcKVLykoXL +
+ + + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$1.class new file mode 100644 index 0000000..79fac4e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$2.class new file mode 100644 index 0000000..dda15d0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3$1.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3$1.class new file mode 100644 index 0000000..9b29476 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3$1.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3$2.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3$2.class new file mode 100644 index 0000000..cdfb3ce --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3$2.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3.class new file mode 100644 index 0000000..97492b9 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$3.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$4.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$4.class new file mode 100644 index 0000000..3f802b3 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage$4.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage.class b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage.class new file mode 100644 index 0000000..c33ea1e --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage.class Binary files differ diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage.html b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage.html new file mode 100644 index 0000000..0836495 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/TopPage.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + ログイン + + + +
+
+ + +

+ + + + +この書式で記述するコメントは詳細設計の記述です。実際には画面に表示されません。 + +2016/02/28 更新 +

インターフェース一覧

+ + + + + + +

ログイン(スタブ)

+
フィードバックメッセージ
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
チャレンジ値(A)
メールアドレス(B)
パスワード(C)
パスワードハッシュ(D)
チャレンジレスポンス(E)
+
+ + + +
+ +
+
+ +
+ + + +

エラーログ

+ +ログ
+
+
<前へ 次へ>
+ + + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/css/app.css b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/css/app.css new file mode 100644 index 0000000..a6107a0 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/css/app.css @@ -0,0 +1,292 @@ +@charset "utf-8"; + +/* 全体構成 */ +body { + margin: 0; + padding: 0; + background-color: #EEE; +} +#base{ + margin: 0; + padding: 10px 2%; +} +#containts{ + margin: 0; + padding: 10px; + background-color: #FFF; +} +/* 標準化、リセット */ +*{ + line-height: 1.8em; + font-family: + 'Lucida Grande', + 'Hiragino Kaku Gothic ProN', + 'ヒラギノ角ゴ ProN W3', + Meiryo, メイリオ, sans-serif; + font-size: 1.0em; +} +h1, h2, h3, h4, h5, h6 { + margin: 10px; + padding: 2px; /* 上下 */ + /* border: solid 1px #f00; */ + color:#333; +} +h1 { + margin: 1.5em 0 20px 0; + border-left:5px solid #09C; + background: #09C; + color:#FFF; +} +h2 { + border-left:5px solid #09C; + border-bottom:2px double #09C; + margin: 1em 0px 10px 0; + padding: 1px; /* 上下 */ +} +h3 { + border-bottom:2px double #09C; + padding: 0px; /* 上下 */ + margin: 0.5em 0px 10px 0; +} +h4{ + border-bottom:1px solid #09C; + margin: 1px; /* 上右下左 */ + padding: 0px; /* 上下 */ +} +h5 { + border-bottom:1px dotted #09C; + margin: 0px; /* 上右下左 */ + padding: 0px; /* 上下 */ + +} +h6 { + margin: 0px; /* 上右下左 */ + padding: 0px; /* 上下 */ + +} + +/* 文章 */ +p, dl { + /* border: solid 1px #f00; */ + margin: 5px; + padding: 0; + line-heigh: 1.8em; +} +ul, ol { + /* border: solid 1px #f00; */ + margin: 5px; + /*padding: 0;*/ +} +p:first-letter { + /* 段落落とし + margin-left: 1.0em; + */ +} +p.notice { + border: 1px dotted #cccccc; +} + +/* table */ +table, +th, +td { + border-collapse: collapse; + border-spacing: 0; +} +table { + width: auto; + margin: 10px; + padding: 5px; + border: 1px solid #333333; +} + +table th, +table td { + padding: 3px; +} +th { + border-bottom: 1px dotted #333333; + white-space: nowrap; +} +td { + border: 1px dotted #333333; +} + +/* リンク先のURLを可視化する +a:after{ + content: " (" attr(href) ") "; + font-size: 0.8em; +} +*/ + +/* 囲み */ +.kakomi { + border: 2px dotted #333333; + margin: 5px; + padding: 5px; +} + +/* レスポンシブ対応 */ +#mobile{ + display:none; +} +/* @media screen and (max-width:320px){ +PC ⇒ 960px~1024px +タブレット ⇒ 640px~960px +スマホ ⇒ 320px~640px +*/ +@media screen and (max-width:320px){ + + * { + font-size: 98%; + } + ul, ol { + margin: 0; + padding: 0; + padding-left: 1.5em; + } + table { + width: 80%; + margin: 0 auto; + padding: 5px; + border: 0px solid #333333; + } + th, td { + display: block; + border: 1px solid #333333; + } + /* mobile用のリンク */ + a { + display: block; + position: relative; + border: 1px solid #ccc; + background: linear-gradient(#fff, #f0f0f0); + border-top: 1px solid #ccc; + padding: 10px; + padding-right: 30px; + margin: 1px; + text-decoration: none; + } + a:after { + display: block; + position: absolute; + top: 50%; + right: 10px; + width: 20px; + height: 20px; + margin-top: -15px; + content: "≫"; + font-size: 150%; + font-weight: bold; + } + /* mobile版であることを表すFotter */ + #mobile{ + display:block; + /*position: relative;*/ + position: fixed ; + width: 100%; + bottom: 0; + left: 0; + /*border: 1px solid #ccc;*/ + padding: 1px; + margin: 0; + background-color : #09C; + text-decoration: none; + font-size: 0.8em; + color: #FFF; + opacity: 0.30; + } +} +.clear { clear:both; } +.clear hr { display:none; } + +/*****************************************************************************************************************/ +/* AMM用記述 +/*****************************************************************************************************************/ +#head { + font-size: 150%; + border-bottom:5px double #09C; +} +#head a{ + text-decoration: none; +} +#head #divLoginUser{ + float: right; + font-size: 75%; +} +#divLoginUser form{ + display: inline; +} +#buttonLogout{ + border-style: none; + text-decoration: none; + font-weight: bold; + text-align: center; + font-size: 10px; + +} +#footer { + text-align: center; + margin-top: 20px; + font-size: 80%; + border-top:5px double #09C; +} +.devnote { + display: block; + /*display:none;*/ + width:30em; + background-color: #FEE; + border: 1px dotted #333333; + margin:10px; +} +.devnoteIn { + /*display:none;*/ + background-color: #FEE; + border: 1px dotted #333333; + margin:10px; +} +/* 未訪問と訪問済みを同一色とする */ +a:link {color:#0000ff;} +a:visited {color:#0000ff;} +/* ただしお知らせは訪問済みを変更する */ +a.info:link {color:#2200C1;} +a.info:visited {color:#551A8B;} + +.linktop { + display: none; + position: fixed; + bottom:20px; + right: 0px; + text-indent:0px; + color:#fff + +} +table { + width: auto; + margin: 10px; + padding: 5px; + border: 1px solid #333333; +} + +table.border0, +table.border0 th, +table.border0 td { + border: 0; + margin:0; + padding:0; +} +.feedbackPanelERROR { + color:red; +} +.feedbackPanelINFO { + color:black; +} +.imeoff{ + ime-mode: inactive; +} +.imeon{ + ime-mode: active; +} +.strong { + color:red; +} diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/CalcHash.js b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/CalcHash.js new file mode 100644 index 0000000..413095d --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/CalcHash.js @@ -0,0 +1,25 @@ +function eventLogin(ret){ + + var challengeA=document.form.textChallenge.value; + var loginidB=document.form.textLoginId.value; + var passwordC=document.form.textPassword.value; + var passwordHashD=passowrdHash(passwordC, loginidB); + document.form.textPasswordHash.value=passwordHashD; + document.form.textChallengeResponse.value=challengeResponse(passwordHashD, challengeA); + + if(ret == true) { + /* パスワード、パスワードハッシュは送信しないので消去 */ + document.form.textPassword.value=""; + document.form.textPasswordHash.value=""; + } + + + return ret; +} + +function passowrdHash(password, account){ + return CryptoJS.SHA256(account+":"+password); +} +function challengeResponse(phash, chvalue) { + return CryptoJS.SHA256(phash+":"+chvalue); +} \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/CalcHash.js.back b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/CalcHash.js.back new file mode 100644 index 0000000..df0f2f4 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/CalcHash.js.back @@ -0,0 +1,30 @@ +function eventLogin(ret){ + + var challengeA=document.form.textChallenge.value; + var loginidB=document.form.textLoginId.value; + var passwordC=document.form.textPassword.value; + var passwordHashD=passowrdHash(passwordC, loginidB); + document.form.textPasswordHash.value=passwordHashD; + document.form.textChallengeResponse.value=challengeResponse(passwordHashD, challengeA); + + if(ret == true) { + /* パスワード、パスワードハッシュは送信しないので消去 */ + document.form.textPassword.value=""; + document.form.textPasswordHash.value=""; + } + + + return ret; +} +var STRETCH_COUNT=500; +function passowrdHash(password, loginId){ + var salt = CryptoJS.SHA256(loginId); + var hash = ""; + for (var i = 0; i < STRETCH_COUNT; i = i +1){ + hash = CryptoJS.SHA256(hash + salt + password); + } + return hash; +} +function challengeResponse(passwordHash, challenge) { + return CryptoJS.SHA256(passwordHash + challenge); +} \ No newline at end of file diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/app.js b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/app.js new file mode 100644 index 0000000..005d724 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/app.js @@ -0,0 +1,28 @@ +/* ページトップへ */ +$(document).ready(function(){ + + var pagetop = $('.linktop'); + $(window).scroll(function(){ + if ( $(this).scrollTop() > 100 ) { + pagetop.fadeIn(); + } else { + pagetop.fadeOut(); + } + }); + pagetop.click(function () { + $('body, html').animate({ scrollTop: 0 }, 600); + return false; + }); + +}); + +/* 確認ダイアログ */ +function confirmDisp(){ + if(window.confirm("処理を行います。")){ + return true; + } else{ + return false; + } +} + + diff --git a/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js new file mode 100644 index 0000000..da41706 --- /dev/null +++ b/AMM_web/target/AMM/WEB-INF/classes/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("':""),a._keyEvent=!1,K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='
',m="";if(f||!i)m+=''+g[b]+"";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='"}k||(l+=m+(f||!i||!j?" ":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+=''+c+"";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='",l+=a.yearshtml,a.yearshtml=null}}return l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?" ":"")+m),l+="
",l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&bd?d:e,e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));return b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth())),this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");return b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10),{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);return typeof a!="string"||a!="isDisabled"&&a!="getDate"&&a!="widget"?a=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b)):this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)}):$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.24",window["DP_jQuery_"+dpuuid]=$})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.progressbar.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("
").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){return a===b?this._value():(this._setOption("value",a),this)},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;return typeof a!="number"&&(a=0),Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.24"})})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +jQuery.effects||function(a,b){function c(b){var c;return b&&b.constructor==Array&&b.length==3?b:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))?[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))?[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:(c=/rgba\(0, 0, 0, 0\)/.exec(b))?e.transparent:e[a.trim(b).toLowerCase()]}function d(b,d){var e;do{e=(a.curCSS||a.css)(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};return a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete,[b,c,d,e]}function l(b){return!b||typeof b=="number"||a.fx.speeds[b]?!0:typeof b=="string"&&!a.effects[b]?!0:!1}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){return a.isFunction(d)&&(e=d,d=null),this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class")||"";a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.24",save:function(a,b){for(var c=0;c").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;try{e.id}catch(f){e=document.body}return b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;return b.parent().is(".ui-effects-wrapper")?(c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus(),c):b},setTransition:function(b,c,d,e){return e=e||{},a.each(c,function(a,c){var f=b.cssUnit(c);f[0]>0&&(e[c]=f[0]*d+f[1])}),e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];return a.fx.off||!i?h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)}):i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="show",this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="hide",this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);return c[1].mode="toggle",this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];return a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])}),d}});var m={};a.each(["Quad","Cubic","Quart","Quint","Expo"],function(a,b){m[b]=function(b){return Math.pow(b,a+2)}}),a.extend(m,{Sine:function(a){return 1-Math.cos(a*Math.PI/2)},Circ:function(a){return 1-Math.sqrt(1-a*a)},Elastic:function(a){return a===0||a===1?a:-Math.pow(2,8*(a-1))*Math.sin(((a-1)*80-7.5)*Math.PI/15)},Back:function(a){return a*a*(3*a-2)},Bounce:function(a){var b,c=4;while(a<((b=Math.pow(2,--c))-1)/11);return 1/Math.pow(4,3-c)-7.5625*Math.pow((b*3-2)/22-a,2)}}),a.each(m,function(b,c){a.easing["easeIn"+b]=c,a.easing["easeOut"+b]=function(a){return 1-c(1-a)},a.easing["easeInOut"+b]=function(a){return a<.5?c(a*2)/2:c(a*-2+2)/-2+1}})}(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.blind.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.bounce.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight(!0)/3:c.outerWidth(!0)/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.fade.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.fold.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.highlight.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.pulsate.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show"),e=(b.options.times||5)*2-1,f=b.duration?b.duration/2:a.fx.speeds._default/2,g=c.is(":visible"),h=0;g||(c.css("opacity",0).show(),h=1),(d=="hide"&&g||d=="show"&&!g)&&e--;for(var i=0;i').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);; \ No newline at end of file diff --git a/AMM_web/target/classes/jp/co/y_net/amm/page/js/sha256.js b/AMM_web/target/classes/jp/co/y_net/amm/page/js/sha256.js new file mode 100644 index 0000000..529db30 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/page/js/sha256.js @@ -0,0 +1,16 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}}, +q=t.WordArray=j.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||u).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<< +32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b, +2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}}, +x=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;mk;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]= +c[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes; +d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math); diff --git a/AMM_web/target/classes/jp/co/y_net/amm/page/package-info.class b/AMM_web/target/classes/jp/co/y_net/amm/page/package-info.class new file mode 100644 index 0000000..4cc8004 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/page/package-info.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/page/res/css_ReadMe.txt b/AMM_web/target/classes/jp/co/y_net/amm/page/res/css_ReadMe.txt new file mode 100644 index 0000000..ee6c952 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/page/res/css_ReadMe.txt @@ -0,0 +1,5 @@ +2016/03/26 k.inaba + +文書管理システムより画像を取得 + +以上 diff --git a/AMM_web/target/classes/jp/co/y_net/amm/page/res/top-banner-back.png b/AMM_web/target/classes/jp/co/y_net/amm/page/res/top-banner-back.png new file mode 100644 index 0000000..fb11133 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/page/res/top-banner-back.png Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/page/res/top-banner.png b/AMM_web/target/classes/jp/co/y_net/amm/page/res/top-banner.png new file mode 100644 index 0000000..260925c --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/page/res/top-banner.png Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/BatchUsrCreate.class b/AMM_web/target/classes/jp/co/y_net/amm/service/BatchUsrCreate.class new file mode 100644 index 0000000..c2ed854 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/BatchUsrCreate.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/Challengestring.class b/AMM_web/target/classes/jp/co/y_net/amm/service/Challengestring.class new file mode 100644 index 0000000..06cdb6d --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/Challengestring.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/DailyJobManager.class b/AMM_web/target/classes/jp/co/y_net/amm/service/DailyJobManager.class new file mode 100644 index 0000000..eb01fa8 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/DailyJobManager.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/DataInitializer.class b/AMM_web/target/classes/jp/co/y_net/amm/service/DataInitializer.class new file mode 100644 index 0000000..f10a906 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/DataInitializer.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/LocaleStringSearch.java.back b/AMM_web/target/classes/jp/co/y_net/amm/service/LocaleStringSearch.java.back new file mode 100644 index 0000000..faec804 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/LocaleStringSearch.java.back @@ -0,0 +1,109 @@ +package jp.co.y_net.amm.service; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jp.co.y_net.amm.dao.Localestring; +import jp.co.y_net.amm.dao.LocalestringDao; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +/** + * LocaleString : 表示文字列の管理 + * + * データベースのテーブル「localestring」から表示文字情報を取得する。 + * 2014/07/16 速度改善のため、キャッシュの仕組みを追加 K.Inaba + * + * @version 1.0.0 + * @author y.soga + */ +@Component("localeStringSearch") +public class LocaleStringSearch implements Serializable { + private static final long serialVersionUID = 7151445795383658463L; + + @Autowired(required = true) + @Qualifier("localestringDao") + private LocalestringDao localestringDao; + + /** + * 表示文字列をキャッシュするためのオブジェクト + */ + private Map strCash = new HashMap(); + + /** + * キャッシュをクリアする処理。 + * DashboardPageより呼び出されることを想定 + */ + public void clearCash() { + strCash = new HashMap(); + } + /** キャッシュサイズを返す */ + public int getCashCount() { + int size = strCash.keySet().size(); + return size; + } + + /** + * 画面ID、コントロールID、言語ID、メッセージ番号 に一致する表示文字情報を 1件取得する + * @version 1.0.0 + * @author y.soga + * @param screenId 画面ID + * @param controlId コントロールID + * @param languageId 言語ID + * @param String num メッセージ番具御 + * @return String 表示文字情報(1件) + */ + public String getDisplayString(String screenId, String controlId, Integer languageId, String num) { + + String key = createKey("lcl", screenId, controlId, String.valueOf(languageId), num); + + if (strCash.get(key) == null) { // キャッシュに無ければDBから取得する + Localestring ls = new Localestring(); + ls.setScreenid(screenId); + ls.setControlid(controlId); + ls.setLanguageid(languageId); + ls.setNum(num); + + if(localestringDao == null) { + return "***"; + } + List results = localestringDao.get(ls); + String strRet; + if (results.size() > 0) { + strRet = results.get(0).getPrintstring(); + } else { + /* 2015/04/25 "CM000"の取得を試みる */ + ls.setScreenid("CM000"); + results = localestringDao.get(ls); + if (results.size() > 0) { + strRet = results.get(0).getPrintstring(); + } else { + strRet = ""; + } + } + /* キャッシュに登録 */ + strCash.put(key, strRet); + } else { + // キャッシュにあれば処理なし。 + } + return strCash.get(key); + } + /** + * キャッシュのキーを生成するメソッド + * 書式: lcl$画面ID$コントロールID$言語ID$メッセージ番号 + * 書式(コントロールID、メッセージ番号が無い場合): lcl$画面ID$$言語ID$ + * @param type 表示文字情報の場合は "lcl" + * @param screenId 画面ID + * @param controlId コントロールID + * @param languageId 言語ID + * @param num メッセージ番号 + * @return 上記を連結したキー + */ + private static String createKey(String type, String screenId, String controlId, String languageId, String num) { + return type + "$" + screenId + "$" + controlId + "$" + languageId + "$" + num; + } +} diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/Logincheck$LogincheckResult.class b/AMM_web/target/classes/jp/co/y_net/amm/service/Logincheck$LogincheckResult.class new file mode 100644 index 0000000..bbd7cd1 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/Logincheck$LogincheckResult.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/Logincheck.class b/AMM_web/target/classes/jp/co/y_net/amm/service/Logincheck.class new file mode 100644 index 0000000..a887341 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/Logincheck.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/Logout.class b/AMM_web/target/classes/jp/co/y_net/amm/service/Logout.class new file mode 100644 index 0000000..1faa8a1 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/Logout.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/MailAddressCheck.class b/AMM_web/target/classes/jp/co/y_net/amm/service/MailAddressCheck.class new file mode 100644 index 0000000..6d8289a --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/MailAddressCheck.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/service/PasswordTicketManager.class b/AMM_web/target/classes/jp/co/y_net/amm/service/PasswordTicketManager.class new file mode 100644 index 0000000..b3159e7 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/service/PasswordTicketManager.class Binary files differ diff --git a/AMM_web/target/classes/jp/co/y_net/amm/tools/ResourceCopy.class b/AMM_web/target/classes/jp/co/y_net/amm/tools/ResourceCopy.class new file mode 100644 index 0000000..60fbfa0 --- /dev/null +++ b/AMM_web/target/classes/jp/co/y_net/amm/tools/ResourceCopy.class Binary files differ diff --git a/AMM_web/target/classes/logback.xml b/AMM_web/target/classes/logback.xml new file mode 100644 index 0000000..3a6e693 --- /dev/null +++ b/AMM_web/target/classes/logback.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + true + + INFO + + + ${catalina.base:-sdc}/logs/AMMLog.%d{yyyy-MM-dd}.%i.log + 14 + + 64MB + + + + UTF-8 + [%-5level] %d{yyyy-MM-dd HH:mm:ss} %marker %msg%n + + + + + + + + + true + + INFO + + + ${catalina.base:-sdc}/logs/mail/AMM_MAIL_Log.%d{yyyy-MM-dd}.%i.log + 365 + + 64MB + + + + UTF-8 + [%-5level] %d{yyyy-MM-dd HH:mm:ss} %marker %msg%n + + + + + + + + + + + + + ${LEVEL_CONSOLE_OTHER} + + + + return !logger.startsWith("jp.co.y_net"); + + + DENYNEUTRAL + + + ${PATTERN_CONSOLE} + + + + + + + diff --git a/AMM_web/target/classes/message/mail.addmember b/AMM_web/target/classes/message/mail.addmember new file mode 100644 index 0000000..55d1045 --- /dev/null +++ b/AMM_web/target/classes/message/mail.addmember @@ -0,0 +1,13 @@ +【ChattyInftyOnline】会員追加のご案内 + +@機関名称@ @氏名@ 様 + +会員の仮登録を行いました。 +下記URLを選択して、本登録を完了させてください。 + +@本登録URL@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/target/classes/message/mail.org.approval b/AMM_web/target/classes/message/mail.org.approval new file mode 100644 index 0000000..57b26d6 --- /dev/null +++ b/AMM_web/target/classes/message/mail.org.approval @@ -0,0 +1,13 @@ +【ChattyInfty Online】新規申請承認のお知らせ + +@機関名称@ @申請者氏名@ 様 + +申請内容を承認いたしました。 +下記URLを選択して、本登録を完了させてください。 + +@本登録URL@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/target/classes/message/mail.org.reject b/AMM_web/target/classes/message/mail.org.reject new file mode 100644 index 0000000..32bb912 --- /dev/null +++ b/AMM_web/target/classes/message/mail.org.reject @@ -0,0 +1,13 @@ +【ChattyInfty Online】新規申請否認のお知らせ + +@機関名称@ @申請者氏名@ 様 + +残念ながら以下の理由で申請内容を否認させていただきました。 +ご了承ください + +@否認理由@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/target/classes/message/mail.orgentry b/AMM_web/target/classes/message/mail.orgentry new file mode 100644 index 0000000..90ece20 --- /dev/null +++ b/AMM_web/target/classes/message/mail.orgentry @@ -0,0 +1,12 @@ +【ChattyInftyOnline】新規申請受信のお知らせ + +新規申請が届いています。 + +下記URLを選択して、申請内容を確認してください。 + +@申請画面URL@ + +--------------------------------------------------- +このメールは ChattyInfty Online会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/target/classes/message/mail.resetpw b/AMM_web/target/classes/message/mail.resetpw new file mode 100644 index 0000000..be8524f --- /dev/null +++ b/AMM_web/target/classes/message/mail.resetpw @@ -0,0 +1,10 @@ +【ChattyInftyOnline】パスワードリセットのお知らせ + +次の画面からパスワードを再設定してください。 + +@パスワード登録画面のURL@ + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/target/classes/message/mail.test b/AMM_web/target/classes/message/mail.test new file mode 100644 index 0000000..e34b472 --- /dev/null +++ b/AMM_web/target/classes/message/mail.test @@ -0,0 +1,8 @@ +【ChattyInftyOnline】テスト送信メール + +このメールはテスト用です。 + +--------------------------------------------------- +このメールは ChattyInftyOnline会員管理システムより +自動送信しています。 +--------------------------------------------------- \ No newline at end of file diff --git a/AMM_web/target/classes/message/termsofuse b/AMM_web/target/classes/message/termsofuse new file mode 100644 index 0000000..47a740f --- /dev/null +++ b/AMM_web/target/classes/message/termsofuse @@ -0,0 +1,40 @@ +ChattyInfty Online利用規約 + +本利用規約は、社会福祉法人日本点字図書館(以下「当館」)が試験的に限定された範囲内で無償提供するマルチメディアコンテンツ製作システム「ChattyInfty Online」(以下「本システム」)の利用条件をまとめたものです。本システムを利用される方(以下「会員」)は、これらの条件に同意いただく必要があります。 + +1.本システムの利用目的 +本システムは、会員に対し、発達障害・学習障害・視覚障害などにより読み書きが困難な者のために、著作権法が定める範囲内において、著作物を音声データ等デジタルデータに変換し、ダウンロードして使用させることを目的とします。 +会員は、本システムを非営利目的にのみ利用できるものとします。 + +2.禁止事項 +会員は、本システムを利用するに当たり、次の行為をしてはなりません。これらの行為によって故意に第三者に対し損害を与えた場合は、自己の責任と費用をもって解決するものとします。また、以下の行為により当館が何らかの損害を被った場合、当館はその行為者に対し損害賠償請求ができるものとします。 +(1)他者の著作権、商標権等の知的財産権を侵害する行為 +(2)他者の財産権、プライバシーもしくは肖像権を侵害する行為 +(3)本システムの運営を妨害する行為 +(4)本システムの商用利用 +(5)本システムアカウントの漏洩、譲渡、名義変更等 +(6)その他、法令、公序良俗に違反する行為 + +3.利用登録申請 +本システムの利用を希望する方は、本利用規約に同意することで、利用登録の申請をすることができます。 +ただし無償提供期間中は、申請できる方は当館が予め承認する方に限ります。 + +4.登録の抹消 +当館は、会員が本利用規約に違反した場合、もしくは登録事項に虚偽の事実があることが判明した場合は、本システムの利用を停止し、会員としての登録を抹消することができます。 +会員は、当館へ通知することにより、自己の登録を抹消することができます。 + +5.本システムの変更、提供終了 +当館は、当館の都合により、本システムを変更(提供方法の変更含む)、または提供を終了することができます。 + +6.免責事項 +(1)会員は、本システムを自己の責任において利用するものとします。 +(2)当館は、本システムの変更、停止、利用不能、提供終了、および会員が本システムで作成したデータの消失、その他本システムに関して会員が被った損害に対しては、一切の賠償責任を負いません。 +(3)当館は、法律上の瑕疵担保責任を含め、一切の明示的または黙示的な保証無しに、本システムを現状有姿でご提供します。これは知的財産権または他の専有権を侵害していないことに関する保証を含みますが、これらに限られません。 +(4)当館は、通常損害、直接的損害、特別損害、または間接的損害に対して一切責任を負いません。これらは、予見の有無を問わず、逸失利益、預金損失、偶発的損害、その他の経済的な結果的損害を含みますが、これらに限られません。 + +7.個人情報の保護 +当館は、会員の個人情報を、当館の「個人情報保護に対する基本方針」(http://www.nittento.or.jp/privacy/index.html)に従って取扱い、本システムの運営目的にのみ使用します。 +なお、本システムの利用状況に関する情報について記録を行うことがありますが、本システムの改善や学術利用の目的にのみ使用し、成果の発表などの際には個人が特定されるような情報は削除の上で参照します。 + +8.本利用規約の変更 +当館は、本利用規約を適宜変更することができるものとします。会員は、当該変更の通知を受領した後で本システムを使用し続けることにより、変更を承諾するものとします。 diff --git a/AMM_web/target/classes/omitmaildomains.properties b/AMM_web/target/classes/omitmaildomains.properties new file mode 100644 index 0000000..4cb812c --- /dev/null +++ b/AMM_web/target/classes/omitmaildomains.properties @@ -0,0 +1,22 @@ +#\u767b\u9332\u3092\u62d2\u5426\u3059\u308b\u30e1\u30fc\u30eb\u306edomain\u30ea\u30b9\u30c8 + +# \u30d5\u30ea\u30fc\u30e1\u30fc\u30eb\u306f\u8a31\u53ef\u3059\u308b +#msn.com +#gmail.com +#hotmail.co.jp +#hotmail.com +#yahoo.co.jp + +#\u643a\u5e2f\u96fb\u8a71\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u62d2\u5426\u3059\u308b 2016/06/02 +docomo.ne.jp +softbank.ne.jp +d.vodafone.ne.jp +h.vodafone.ne.jp +t.vodafone.ne.jp +c.vodafone.ne.jp +r.vodafone.ne.jp +k.vodafone.ne.jp +n.vodafone.ne.jp +s.vodafone.ne.jp +q.vodafone.ne.jp +ezweb.ne.jp diff --git a/AMM_web/target/cobertura/cobertura.ser b/AMM_web/target/cobertura/cobertura.ser new file mode 100644 index 0000000..99c32eb --- /dev/null +++ b/AMM_web/target/cobertura/cobertura.ser Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/App.properties b/AMM_web/target/generated-classes/cobertura/App.properties new file mode 100644 index 0000000..69b9963 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/App.properties @@ -0,0 +1,56 @@ +# +# App.properties +# +# ResourceReader.java \u3092\u4f7f\u7528\u3057\u3066\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002 +# ResourceReader#getStringQuick \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u518d\u8d77\u52d5\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u8aad\u307f\u53d6\u308a\u304c\u53ef\u80fd\u3067\u3059\u3002 +# + +# ----------------------------------------------------------------------------------------------------------- +# \u8a2d\u5b9a\u5024\u4e00\u89a7\u3088\u308a --- \u3053\u3053\u304b\u3089 + + +# \u958b\u767a\u62c5\u5f53\u8005\u306eOS\u30e6\u30fc\u30b6\u30fc\u540d +debug.users = soga, k_inaba, r_araki + +# LoginPage\u304chttp\u3067\u547c\u3073\u51fa\u3055\u308c\u305f\u3068\u304d\u306b\u3001https\u3078\u5909\u66f4\u3059\u308b +#use.ssl = yes +use.ssl = no + +# \u7d44\u7e54.\u7a2e\u5225\u306e\u9078\u629e\u80a2 +orgkinds=1.\u6559\u80b2\u6a5f\u95a2, 2.\u65bd\u8a2d\u56e3\u4f53\uff08\u653f\u4ee4\u6307\u5b9a\uff09, 3.\u65bd\u8a2d\u56e3\u4f53\uff08\u975e\u653f\u4ee4\u6307\u5b9a\uff09, 9.\u500b\u4eba + +# \u7d44\u7e54.\u767b\u9332\u53ef\u80fd\u4f1a\u54e1\u6570\u306e\u9078\u629e\u80a2 +limitnums=1,5,10,20,30,40,50 ,100 + +# \u7d76\u5bfe\u30d1\u30b9\u6307\u5b9a\u306eURL +url.back.top=http://localhost:8080/AMM/#top +url.back.member=http://localhost:8080/AMM/#member +url.back.orgadmin=http://localhost:8080/AMM/#orgadmin +url.back.sysadmin=http://localhost:8080/AMM/#sysadmin +urlroot=http://localhost:8080/AMM/ + +# \u30c1\u30e3\u30ec\u30f3\u30b8\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6709\u52b9\u671f\u9650(\u79d2) +cresdate=1200 + +# \u30e1\u30fc\u30eb\u9001\u4fe1\u95a2\u9023 +Smtp = 192.168.10.149 +mailto.orgentry = sysadmin@example.com +MailFrom = ChattyInfty Online + + +# \u4f1a\u54e1\u524a\u9664\u901a\u77e5\u5148 +#api.deletecall=http://chatty.chino-js.com:59924/Editor/api/deletenotice +api.deletenotice=http://localhost:8080/AMM/stub/api/deletenotice + + + + +# \u691c\u8a3c\u7528(\u73fe\u5728\u672a\u4f7f\u7528) +test.message=\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8 +errmsg.req=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req2=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req3=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length2=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\uff5e\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +#EOF diff --git a/AMM_web/target/generated-classes/cobertura/applicationContextBase.xml b/AMM_web/target/generated-classes/cobertura/applicationContextBase.xml new file mode 100644 index 0000000..cb0bc86 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/applicationContextBase.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/cobertura.properties b/AMM_web/target/generated-classes/cobertura/cobertura.properties new file mode 100644 index 0000000..177ac12 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/cobertura.properties @@ -0,0 +1,3 @@ +#Generated by maven-cobertura-plugin for project jp.co.y_net:AMM_web:war:1.4.2 +#Mon Mar 07 21:28:31 JST 2016 +net.sourceforge.cobertura.datafile=D\:\\eclipseWS2014_amm\\AMM_web\\target\\cobertura\\cobertura.ser diff --git a/AMM_web/target/generated-classes/cobertura/for_sdcsv/App.properties b/AMM_web/target/generated-classes/cobertura/for_sdcsv/App.properties new file mode 100644 index 0000000..a2e22c3 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/for_sdcsv/App.properties @@ -0,0 +1,55 @@ +# +# App.properties +# +# ResourceReader.java \u3092\u4f7f\u7528\u3057\u3066\u53c2\u7167\u3059\u308b\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059\u3002 +# ResourceReader#getStringQuick \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u518d\u8d77\u52d5\u3092\u5fc5\u8981\u3068\u3057\u306a\u3044\u8aad\u307f\u53d6\u308a\u304c\u53ef\u80fd\u3067\u3059\u3002 +# + +# ----------------------------------------------------------------------------------------------------------- +# \u8a2d\u5b9a\u5024\u4e00\u89a7\u3088\u308a --- \u3053\u3053\u304b\u3089 + + +# \u958b\u767a\u62c5\u5f53\u8005\u306eOS\u30e6\u30fc\u30b6\u30fc\u540d +debug.users = soga, k_inaba, r_araki + +# LoginPage\u304chttp\u3067\u547c\u3073\u51fa\u3055\u308c\u305f\u3068\u304d\u306b\u3001https\u3078\u5909\u66f4\u3059\u308b +#use.ssl = yes +use.ssl = no + +# \u7d44\u7e54.\u7a2e\u5225\u306e\u9078\u629e\u80a2 +orgkinds=1.\u6559\u80b2\u6a5f\u95a2, 2.\u65bd\u8a2d\u56e3\u4f53\uff08\u653f\u4ee4\u6307\u5b9a\uff09, 3.\u65bd\u8a2d\u56e3\u4f53\uff08\u975e\u653f\u4ee4\u6307\u5b9a\uff09, 9.\u500b\u4eba + +# \u7d44\u7e54.\u767b\u9332\u53ef\u80fd\u4f1a\u54e1\u6570\u306e\u9078\u629e\u80a2 +limitnums=1,5,10,20,30,40,50 ,100 + +# \u7d76\u5bfe\u30d1\u30b9\u6307\u5b9a\u306eURL +url.back.top=http://chatty.chino-js.com:59924/Editor/#top +url.back.member=http://chatty.chino-js.com:59924/Editor/#member +url.back.orgadmin=http://chatty.chino-js.com:59924/Editor/#orgadmin +url.back.sysadmin=http://chatty.chino-js.com:59924/Editor/#sysadmin +urlroot=http://113.40.250.27:8080/AMM/ + +# \u30c1\u30e3\u30ec\u30f3\u30b8\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u6709\u52b9\u671f\u9650(\u79d2) +cresdate=1200 + +# \u30e1\u30fc\u30eb\u9001\u4fe1\u95a2\u9023 +Smtp = localhost +mailto.orgentry = monkey.magic.2015.test@gmail.com +MailFrom = ChattyInfty Online + + +# \u4f1a\u54e1\u524a\u9664\u901a\u77e5\u5148 +api.deletecall=http://chatty.chino-js.com:59924/Editor/api/deletenotice + + + + +# \u691c\u8a3c\u7528(\u73fe\u5728\u672a\u4f7f\u7528) +test.message=\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8 +errmsg.req=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req2=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.req3=\uff5b\u9805\u76ee\u540d\uff5d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +errmsg.length2=\uff5b\u9805\u76ee\u540d\uff5d\u306f\uff5b\u6841\u6570\uff5d\uff5e\uff5b\u6841\u6570\uff5d\u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 + +#EOF diff --git a/AMM_web/target/generated-classes/cobertura/for_sdcsv/for_sdc.readme b/AMM_web/target/generated-classes/cobertura/for_sdcsv/for_sdc.readme new file mode 100644 index 0000000..dba03fb --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/for_sdcsv/for_sdc.readme @@ -0,0 +1 @@ +サン・データセンター 結合試験用サーバー向けプロパティファイル \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/for_sdcsv/jdbc.properties b/AMM_web/target/generated-classes/cobertura/for_sdcsv/jdbc.properties new file mode 100644 index 0000000..c38953c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/for_sdcsv/jdbc.properties @@ -0,0 +1,13 @@ +# DB\u63a5\u7d9a\u8a2d\u5b9a +# hibernateContextBase.xml\u304b\u3089\u53c2\u7167\u3055\u308c\u308b\u3002 +# \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u969b\u3082\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u3002 +# \u203b \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u5834\u5408\u306f Hibernate \u3067\u4fdd\u969c\u3055\u308c\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u304c\u78ba\u4fdd\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u7559\u610f\u3059\u308b\u3053\u3068\u3002 + +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider +jdbc.url=jdbc:mysql://localhost:3306/ammdb?useUnicode=true&characterEncoding=utf-8 +jdbc.schema=ammdb +jdbc.username=libgdc +jdbc.password=libgdcmanager +jdbc.dbname=ammdb + diff --git a/AMM_web/target/generated-classes/cobertura/for_sdcsv/omitmaildomains.properties b/AMM_web/target/generated-classes/cobertura/for_sdcsv/omitmaildomains.properties new file mode 100644 index 0000000..e3822d2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/for_sdcsv/omitmaildomains.properties @@ -0,0 +1,6 @@ +#\u767b\u9332\u3092\u62d2\u5426\u3059\u308b\u30e1\u30fc\u30eb\u306edomain\u30ea\u30b9\u30c8 +msn.com +#gmail.com +hotmail.co.jp +#hotmail.com +yahoo.co.jp diff --git a/AMM_web/target/generated-classes/cobertura/hibernateContextBase.xml b/AMM_web/target/generated-classes/cobertura/hibernateContextBase.xml new file mode 100644 index 0000000..a81ce76 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/hibernateContextBase.xml @@ -0,0 +1,90 @@ + + + + + + + + + ${jdbc.driverClassName} + + + ${jdbc.url} + + + ${jdbc.username} + + + ${jdbc.password} + + + + + + + + + + + + + jp/co/y_net/amm/dao/Usr.hbm.xml + jp/co/y_net/amm/dao/Org.hbm.xml + jp/co/y_net/amm/dao/Pwtckt.hbm.xml + jp/co/y_net/amm/dao/Inf.hbm.xml + jp/co/y_net/amm/dao/Grp.hbm.xml + jp/co/y_net/amm/dao/Grpusr.hbm.xml + + + + + org.hibernate.dialect.PostgreSQLDialect + + true + ${jdbc.dbname} + + auto + ${jdbc.connection.provider_class} + 3 + 50 + + 30 + 1 + + + + + + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jdbc.properties b/AMM_web/target/generated-classes/cobertura/jdbc.properties new file mode 100644 index 0000000..a4b8677 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jdbc.properties @@ -0,0 +1,18 @@ +# DB\u63a5\u7d9a\u8a2d\u5b9a +# hibernateContextBase.xml\u304b\u3089\u53c2\u7167\u3055\u308c\u308b\u3002 +# \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u969b\u3082\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u3002 +# \u203b \u72ec\u81ea\u306bJDBC\u63a5\u7d9a\u3092\u884c\u3046\u5834\u5408\u306f Hibernate \u3067\u4fdd\u969c\u3055\u308c\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u304c\u78ba\u4fdd\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u7559\u610f\u3059\u308b\u3053\u3068\u3002 + +#jdbc.driverClassName=org.postgresql.Driver +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider +#jdbc.url=jdbc:postgresql://172.16.12.61:5432/amm +jdbc.url=jdbc:mysql://localhost:3306/ammdb?useUnicode=true&characterEncoding=utf-8 +#jdbc.url=jdbc:mysql://localhost:3306/ammdb_20160222?useUnicode=true&characterEncoding=utf-8 +jdbc.schema=ammdb +jdbc.username=libgdc +jdbc.password=libgdcmanager +#jdbc.dbname=amm +jdbc.dbname=ammdb +#jdbc.dbname=ammdb_20160222 + diff --git a/AMM_web/target/generated-classes/cobertura/jp/TestLog.class b/AMM_web/target/generated-classes/cobertura/jp/TestLog.class new file mode 100644 index 0000000..54f3966 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/TestLog.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppRequestCycleListener.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppRequestCycleListener.class new file mode 100644 index 0000000..ebdc05a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppRequestCycleListener.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppSession$LoginUser.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppSession$LoginUser.class new file mode 100644 index 0000000..5381588 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppSession$LoginUser.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppSession.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppSession.class new file mode 100644 index 0000000..c0e9b16 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/AppSession.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/WicketApplication.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/WicketApplication.class new file mode 100644 index 0000000..644a3c5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/WicketApplication.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/WicketApplication.properties b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/WicketApplication.properties new file mode 100644 index 0000000..faa9b19 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/WicketApplication.properties @@ -0,0 +1,7 @@ +# +# WicketApplication.properties +# +# App.properties\u3078\u79fb\u884c\u3057\u307e\u3057\u305f\u3002 +# +test = test.test +#EOF diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiChallengestring$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiChallengestring$Result.class new file mode 100644 index 0000000..3e32345 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiChallengestring$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiChallengestring.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiChallengestring.class new file mode 100644 index 0000000..b2afacb --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiChallengestring.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiDatainitialize$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiDatainitialize$Result.class new file mode 100644 index 0000000..8fd3341 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiDatainitialize$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiDatainitialize.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiDatainitialize.class new file mode 100644 index 0000000..5e77027 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiDatainitialize.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiGroupmember$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiGroupmember$Result.class new file mode 100644 index 0000000..463a6d8 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiGroupmember$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiGroupmember.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiGroupmember.class new file mode 100644 index 0000000..19fa6b2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiGroupmember.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiInfo$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiInfo$Result.class new file mode 100644 index 0000000..9cc6541 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiInfo$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiInfo.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiInfo.class new file mode 100644 index 0000000..5f7e40a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiInfo.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogincheck$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogincheck$Result.class new file mode 100644 index 0000000..b911861 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogincheck$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogincheck.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogincheck.class new file mode 100644 index 0000000..0b35b00 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogincheck.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogout$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogout$Result.class new file mode 100644 index 0000000..c0ad748 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogout$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogout.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogout.class new file mode 100644 index 0000000..fc11bec --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiLogout.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMember$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMember$Result.class new file mode 100644 index 0000000..db78ee2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMember$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMember.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMember.class new file mode 100644 index 0000000..9ee654a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMember.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMembergroup$Result.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMembergroup$Result.class new file mode 100644 index 0000000..099733c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMembergroup$Result.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMembergroup.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMembergroup.class new file mode 100644 index 0000000..3da3087 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiMembergroup.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage$ApiResult.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage$ApiResult.class new file mode 100644 index 0000000..a362974 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage$ApiResult.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage.class new file mode 100644 index 0000000..72a527c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage.html new file mode 100644 index 0000000..4ed4eef --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/api/ApiPage.html @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppLabel.java.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppLabel.java.back new file mode 100644 index 0000000..a3089f4 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppLabel.java.back @@ -0,0 +1,66 @@ +package jp.co.y_net.amm.common; + +import jp.co.y_net.amm.dao.Localestring; +import jp.co.y_net.amm.dao.LocalestringDao; +import jp.co.y_net.amm.service.LocaleStringSearch; + +import org.apache.commons.lang.StringUtils; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.Model; +import org.apache.wicket.spring.injection.annot.SpringBean; + +/** + * 運用中に変わる可能性のあるメッセージの取得を行う。 + * + * + * + * + * 通常の利用 + *  引数 initialString に画面に表示した文字列を設定する。 + *  プログラムは自動的に、このメッセージをデータベースへ登録する。 + *  二回目以降の呼び出しでは、initialString とは関係なく、データベースに登録された値を取得する。 + * + * メッセージの変更 + *  1.データベース(localestring)に登録されている値を修正する。 + *  2.ダッシュボードからキャッシュクリアを実行する。 + * + * @author k_inaba + */ +public class AppLabel extends Label{ + + @SpringBean(name="localestringDao") + private LocalestringDao localestringDao; + + @SpringBean(name="localeStringSearch") + private LocaleStringSearch ls; + + + public AppLabel(String id) { + super(id); + } + public AppLabel(String screenId, String id, String initialString) { + super(id); + String controlid = id; + String message = ls.getDisplayString(screenId, controlid, 0, ""); + if(StringUtils.isEmpty(message)) { + /* まだ登録されていない文字列なので 登録する */ + Localestring newItem = new Localestring(); + newItem.setScreenid(screenId); + newItem.setControlid(controlid); + newItem.setPrintstring(initialString); + newItem.setLanguageid(0); + newItem.setNum(""); + localestringDao.add(newItem); + /* LocaleStringSearchのキャッシュをクリアして再取得する */ + ls.clearCash(); + message = ls.getDisplayString("", controlid, 0, ""); + } + this.setDefaultModel(Model.of(message)); + } + + public static AppLabel of(String screenId, String id, String def) { + return new AppLabel(screenId, id, def); + } + + +} diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppLogger.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppLogger.class new file mode 100644 index 0000000..445c607 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppLogger.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppSendMail$MailSetting.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppSendMail$MailSetting.class new file mode 100644 index 0000000..64a3ac6 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppSendMail$MailSetting.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppSendMail.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppSendMail.class new file mode 100644 index 0000000..3ac5b9f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppSendMail.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppStringUtils.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppStringUtils.class new file mode 100644 index 0000000..be73c1f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppStringUtils.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppUtils.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppUtils.class new file mode 100644 index 0000000..ea1d6d8 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/AppUtils.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/CalcHash.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/CalcHash.class new file mode 100644 index 0000000..4c0fa53 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/CalcHash.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement$DropDownChoiceDate.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement$DropDownChoiceDate.class new file mode 100644 index 0000000..ba562d3 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement$DropDownChoiceDate.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement$MyRenderer.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement$MyRenderer.class new file mode 100644 index 0000000..d059c9b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement$MyRenderer.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement.class new file mode 100644 index 0000000..41b9854 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceDateElement.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceElement$Renderer.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceElement$Renderer.class new file mode 100644 index 0000000..d4ba63e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceElement$Renderer.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceElement.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceElement.class new file mode 100644 index 0000000..ee732cd --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ChoiceElement.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/CookieUtils.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/CookieUtils.class new file mode 100644 index 0000000..85aed49 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/CookieUtils.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/InfoRenderer.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/InfoRenderer.class new file mode 100644 index 0000000..78aed7b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/InfoRenderer.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader$1.class new file mode 100644 index 0000000..759df98 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader$QuickeProperty.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader$QuickeProperty.class new file mode 100644 index 0000000..973d73e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader$QuickeProperty.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader.class new file mode 100644 index 0000000..4f2c472 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/ResourceReader.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/package-info.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/package-info.class new file mode 100644 index 0000000..6b34ac2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/common/package-info.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AbstractDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AbstractDao.class new file mode 100644 index 0000000..9ccbbba --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AbstractDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AppDef.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AppDef.class new file mode 100644 index 0000000..fc5dd33 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AppDef.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AppDto.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AppDto.class new file mode 100644 index 0000000..8c005f1 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/AppDto.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp$CreatedateComparator.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp$CreatedateComparator.class new file mode 100644 index 0000000..f76575d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp$CreatedateComparator.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp.class new file mode 100644 index 0000000..3b2c48b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp.hbm.xml b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp.hbm.xml new file mode 100644 index 0000000..4ecc9a9 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grp.hbm.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/GrpDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/GrpDao.class new file mode 100644 index 0000000..c9b4c36 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/GrpDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr$JoindateComparator.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr$JoindateComparator.class new file mode 100644 index 0000000..a3f379e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr$JoindateComparator.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr.class new file mode 100644 index 0000000..f3e851f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr.hbm.xml b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr.hbm.xml new file mode 100644 index 0000000..6d28282 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Grpusr.hbm.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/GrpusrDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/GrpusrDao.class new file mode 100644 index 0000000..ec1bcc1 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/GrpusrDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Inf.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Inf.class new file mode 100644 index 0000000..c6469ad --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Inf.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Inf.hbm.xml b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Inf.hbm.xml new file mode 100644 index 0000000..11387c5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Inf.hbm.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/InfDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/InfDao.class new file mode 100644 index 0000000..17c8675 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/InfDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Localestring.hbm.xml.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Localestring.hbm.xml.back new file mode 100644 index 0000000..c51fbb8 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Localestring.hbm.xml.back @@ -0,0 +1,33 @@ + + + + + + + + localestring_id_seq + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Localestring.java.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Localestring.java.back new file mode 100644 index 0000000..e9d8296 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Localestring.java.back @@ -0,0 +1,187 @@ +package jp.co.y_net.amm.dao; + + +/** + * Localestring + * + * @version 1.0.0 + * @author k_ohara + */ +public class Localestring implements java.io.Serializable { + + /** + * 表示文字クラス + */ + private static final long serialVersionUID = 1L; + + /** ID */ + private Integer id; + /** screenid */ + private String screenid; + /** languageid */ + private Integer languageid; + /** controlid */ + private String controlid; + /** num */ + private String num; + /** printstring */ + private String printstring; + + /** + * コンストラクタ + * + */ + public Localestring() { + } + + /** + * コンストラクタ + * + */ + public Localestring(String screenid, Integer languageid, String controlid, + String num, String printstring) { + + this.screenid = screenid; + this.languageid = languageid; + this.controlid = controlid; + this.num = num; + this.printstring = printstring; + } + + /** + * コピーコンストラクタ + * + */ + public Localestring(Localestring item) { + this.id = item.id; + this.screenid = item.screenid; + this.languageid = item.languageid; + this.controlid = item.controlid; + this.num = item.num; + this.printstring = item.printstring; + } + + /** + * IDを取得 + * + * @return ID + */ + public Integer getId() { + return this.id; + } + + /** + * IDを設定 + * + * @param id ID + */ + public void setId(Integer id) { + this.id = id; + } + + /** + * screenidを取得 + * @return screenid + */ + public String getScreenid() { + return screenid; + } + + /** + * screenidを設定 + * @param screenid screenid + */ + public void setScreenid(String screenid) { + this.screenid = screenid; + } + + /** + * languageidを取得 + * @return languageid + */ + public Integer getLanguageid() { + return languageid; + } + + /** + * languageidを設定 + * @param languageid languageid + */ + public void setLanguageid(Integer languageid) { + this.languageid = languageid; + } + + /** + * controlidを取得 + * @return controlid + */ + public String getControlid() { + return controlid; + } + + /** + * controlidを設定 + * @param controlid controlid + */ + public void setControlid(String controlid) { + this.controlid = controlid; + } + + /** + * numを取得 + * @return num + */ + public String getNum() { + return num; + } + + /** + * numを設定 + * @param num num + */ + public void setNum(String num) { + this.num = num; + } + + /** + * printstringを取得 + * @return printstring + */ + public String getPrintstring() { + return printstring; + } + + /** + * printstringを設定 + * @param printstring printstring + */ + public void setPrintstring(String printstring) { + this.printstring = printstring; + } + +} +/* +CREATE TABLE ammdb.localestring +( + id serial NOT NULL, -- ID + screenid character varying(64), -- 画面ID + languageid integer, -- 言語 0=日本語/1=英語 + controlid character varying(64), -- 項目ID + num character varying(20), -- 枝番 + printstring character varying(1024), -- 表示文字列 + CONSTRAINT localestring_pkey PRIMARY KEY (id ) +) +WITH ( + OIDS=FALSE +); +ALTER TABLE ammdb.localestring + OWNER TO libgdc; +COMMENT ON TABLE ammdb.localestring + IS '表示文字列'; +COMMENT ON COLUMN ammdb.localestring.id IS 'ID'; +COMMENT ON COLUMN ammdb.localestring.screenid IS '画面ID'; +COMMENT ON COLUMN ammdb.localestring.languageid IS '言語 0=日本語/1=英語'; +COMMENT ON COLUMN ammdb.localestring.controlid IS '項目ID'; +COMMENT ON COLUMN ammdb.localestring.num IS '枝番'; +COMMENT ON COLUMN ammdb.localestring.printstring IS '表示文字列'; +*/ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/LocalestringDao.java.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/LocalestringDao.java.back new file mode 100644 index 0000000..ceb9c7e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/LocalestringDao.java.back @@ -0,0 +1,41 @@ +package jp.co.y_net.amm.dao; + +import java.util.List; + +/** + * LocalestringDao + * + * @version 1.0.0 + */ +public interface LocalestringDao { + + /** + * Localestringを取得
+ * + * @param item Localestring + * @return List + */ + List get(Localestring item); + + /** + * Localestringを追加 + * + * @param item Localestring + */ + void add(Localestring item); + + /** + * Localestringを更新 + * + * @param item Localestring + */ + void update(Localestring item); + + /** + * Localestringを削除 + * + * @param item Localestring + */ + void remove(Localestring item); + +} diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back new file mode 100644 index 0000000..93ee127 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/LocalestringDaoImpl.java.back @@ -0,0 +1,61 @@ +package jp.co.y_net.amm.dao; +import java.util.List; + +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Example; +import org.hibernate.criterion.Order; +import org.springframework.orm.hibernate3.HibernateTemplate; +import org.springframework.stereotype.Component; + +/** + * LocalestringDaoImpl + * + * @version 1.0.0 + */ +@Component("localestringDao") +public class LocalestringDaoImpl extends AbstractDao implements LocalestringDao { + + @Override + public List get(Localestring item) { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + DetachedCriteria dc = DetachedCriteria.forClass(Localestring.class); + dc.add(Example.create(item)); + dc.addOrder(Order.asc("num")); + @SuppressWarnings("unchecked") + List list = (List) hibernateTemplate.findByCriteria(dc); + hibernateTemplate.clear(); + return list; + + } + @Override + public void add(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.save(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override + public void update(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + + hibernateTemplate.update(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + @Override + public void remove(Localestring item) { + try { + HibernateTemplate hibernateTemplate = getHibernateTemplate(); + hibernateTemplate.delete(item); + hibernateTemplate.flush(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org$EntryDateComparator.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org$EntryDateComparator.class new file mode 100644 index 0000000..5b4c5d5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org$EntryDateComparator.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org.class new file mode 100644 index 0000000..24945a2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org.hbm.xml b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org.hbm.xml new file mode 100644 index 0000000..0d05ac2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Org.hbm.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/OrgDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/OrgDao.class new file mode 100644 index 0000000..1542c3b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/OrgDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Pwtckt.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Pwtckt.class new file mode 100644 index 0000000..bdc5bd1 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Pwtckt.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Pwtckt.hbm.xml b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Pwtckt.hbm.xml new file mode 100644 index 0000000..7d83892 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Pwtckt.hbm.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/PwtcktDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/PwtcktDao.class new file mode 100644 index 0000000..b23e779 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/PwtcktDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao$1.class new file mode 100644 index 0000000..aa2036e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao$TextDBAccSampleDto.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao$TextDBAccSampleDto.class new file mode 100644 index 0000000..2cb1904 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao$TextDBAccSampleDto.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao.class new file mode 100644 index 0000000..cb7cc75 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/TextDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr$LastlogindateComparator.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr$LastlogindateComparator.class new file mode 100644 index 0000000..66d5d1b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr$LastlogindateComparator.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr.class new file mode 100644 index 0000000..76da74b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr.hbm.xml b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr.hbm.xml new file mode 100644 index 0000000..8c257d2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/Usr.hbm.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/UsrDao.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/UsrDao.class new file mode 100644 index 0000000..e7162d4 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/UsrDao.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/package-info.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/package-info.class new file mode 100644 index 0000000..394d652 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/dao/package-info.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/AppPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/AppPage.class new file mode 100644 index 0000000..85dc19a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/AppPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$1.class new file mode 100644 index 0000000..bb213b2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$2.class new file mode 100644 index 0000000..f2a0e37 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$3.class new file mode 100644 index 0000000..d7d509a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$Callback.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$Callback.class new file mode 100644 index 0000000..90527b4 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$Callback.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$Executable.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$Executable.class new file mode 100644 index 0000000..39ac19f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage$Executable.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage.class new file mode 100644 index 0000000..f094137 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage.html new file mode 100644 index 0000000..59904b2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonConfirmPage.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + +
フィードバックメッセージ
+
+
+ +
+ 確認メッセージ + +
+ 本当によろしいですか? +
+
+
+
+ + +
+ +
+ + + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$1.class new file mode 100644 index 0000000..ca35353 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$2.class new file mode 100644 index 0000000..c9a74c7 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$3.class new file mode 100644 index 0000000..6d8da44 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$4.class new file mode 100644 index 0000000..fde7822 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$5.class new file mode 100644 index 0000000..cebeff6 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$6.class new file mode 100644 index 0000000..199d9a8 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$7.class new file mode 100644 index 0000000..c1818ee --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$8.class new file mode 100644 index 0000000..13d7592 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$9.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$9.class new file mode 100644 index 0000000..a75fdcd --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$9.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$1.class new file mode 100644 index 0000000..9ba9dea --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$2.class new file mode 100644 index 0000000..671d197 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1.class new file mode 100644 index 0000000..18c5281 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$2.class new file mode 100644 index 0000000..718a2b1 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton.class new file mode 100644 index 0000000..feb0aea --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA$ConfirmAjaxButton.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA.class new file mode 100644 index 0000000..30f7419 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA.html new file mode 100644 index 0000000..972da9a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/CommonFrameA.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + ChattyInftyOnline + + + + + +
+
+ + +

+ +
[各ページで記載] +














+
+ +
+ + + +
+
+ + + + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.class new file mode 100644 index 0000000..a53d31d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.html new file mode 100644 index 0000000..2bbfa9f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.html @@ -0,0 +1,43 @@ + + + + + + + + + + Dashboard + + + +
+
+ + +

+ + + +
フィードバックメッセージ
+ +
+ + + + + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.html.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.html.back new file mode 100644 index 0000000..6af6e28 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/DashboardPage.html.back @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + AMM + + + +
+
+ + +

+ + + +
フィードバックメッセージ
+ +アプリケーションダッシュボード 兼 動的な実装ガイドライン 兼 ソフトウェア仕様書 兼 TODOリスト として記述します。 + + + +

アプリケーションダッシュボード

+ +
メッセージ
+ キャッシュされているメッセージはX件です。 +
+ + + + + +

ソフトウェアアーキテクチャ仕様書

+ +

ミドルウェア

+画面プログラム、画面間連携は Apache Wicket を使用する。 +データベースアクセスは Hibernate を使用する。 +IDコンテナの仕組みを設ける場合は Spring を使用する。 + +

ライセンス記述

+本アプリケーションは Apache Software Foundation (http://www.apache.org)によって開発されたソフトウェアを含んでいる事をここに明記します。 + +

用語

+
+
AMM
+
日点ChattyInftyOnlineのサブプロジェクトである 【アカウント管理モジュール】の略称である。
+ なお、ドキュメントやモジュールを汎用化して管理するため、便宜上「本アプリケーション」や「App」として記述する場合がある。 +
+ +
+ +

機能について

+別紙「ChattyInftyOnline 会員管理要件定義書」を参照。
+記述内容は 1.システム導入の目的と目標/2.システム化の対象領域/3.機能要求(画面ごとの機能と項目の構成) + +

セキュリティ要件について

+以下のセキュリティ要件に対応する。 + +
    +
  • バッファオーバーフロー(Java)
  • +
  • クロスサイトスクリプティング(Wicket)
  • +
  • クロスサイトリクエストフォージェリー(Wicket)
  • +
  • セッション固定化攻撃(LoginPage)
  • +
  • SQLインジェクション(Hibernate)
  • +
+ +以下は、実装者への教育により達成すべき要件となります。 +
    +
  • 公開領域に機密情報が含まれるファイルを配置しないこと
  • +
+
+ +

非機能について ~キーメカニズム~

+ +

表示文字列の管理

+画面に表示するメッセージはアプリケーションを停止せずに変更できるものとする。 +データベースのテーブル(Localestring)を修正し、ダッシュボード画面で「キャッシュクリア」を指示することにより、 +変更が適用されるものとする。 + + + +

プログラム構成

+

ベース (jp.co.y_net.amm.base)

+アプリケーションの根幹となるプログラムで構成される。 +このパッケージのクラスは、「ページ」レイヤへの依存性を持たない +
    +
  • アプリケーション全体の挙動を定義するクラス
  • +
  • 画面の既定クラス
  • +
  • エラーハンドリングを行うクラス
  • +
  • ログ出力を行うクラス
  • +
  • セッション情報を管理するクラス
  • +
  • アプリケーション設定値を保持するプロパティファイル
  • +
+ + +

コモン~共通~ (jp.co.y_net.amm.common)

+共通実装の集約を目的としたパッケージ。『車輪の再発明』を防ぐ。 +実装量を軽減し、生産性の向上を図る。 +同一原因の不具合対策が発生したときに、修正漏れを防ぐ。
+このパッケージのクラスは、他レイヤへの依存性を持たない(他のプロジェクトへも容易に移植できる) + +

ページ (jp.co.y_net.amm.page)

+各画面のサービスを実現する。主に、JavaプログラムとHTMLファイルで構成される。 +リソースとしてcssや画像ファイルも配置される。 +このパッケージ配下のHTMLのみでデザイン開発が可能 + + + + +

実装ガイドライン

+

目的

+本アプリケーションの開発担当者における合意事項の集約とする。 +このドキュメントに記載されている範囲内のことにおいては設計プロセスを省略できる。 + +

開発環境構築手順

+統合開発環境Eclipseをセットアップし、SVNから本プロジェクトをインポートし、動的プロジェクトとして実行する。 + +

実装標準フロー

+
    +
  1. + HTMLファイルを作成する
    + 本HTMLをコピーし、画面定義書やデザイン定義書を参考にする。 +
  2. +
  3. + 各画面コンポーネントに wicket:id を付与する +
  4. +
  5. + 対応するJavaクラスを作成する。 +
  6. +
+ +

命名規約

+以下は、慣例に従い命名することを原則とし、厳格な規約は設定しない。 +効率的な命名が決定できないときに参照されることを想定する。
+

+たとえば、すでに標準化してデジタル化されている文字列がすでに存在するならば、 +そのままコピー&ペーストすればよい。 +そのまま使用した方が、効率化と共通化の観点からメリットが高いと考える。 +

+
+
HTML名
+
パスカル形式+"Page.html" ⇒ 例:UserLoginPage.html
+
WicketID
+
キャメル形式で種類と役割を示す。 ⇒ 例:labelUserName
+
プロパティファイルのkey
+
特筆なし
+
+その他
+

別途対応表などを参照しなくても理解可能な命名を行うこと。

+
+× ProgramName = "001";
+○ ProgramName = "UserLogin"
+
+ + +

出力コンポーネントのサンプル

+※ ソースコードも合わせて参照のこと。 +動的な文字列の表示【今日の日付を表示する部分
+静的な文字列の表示(プロパティファイルから文字列を取得)【メッセージ
+静的な文字列はアプリケーションを再起動せずに変更ができるようにするため、AppLabelクラスを利用する。 + + +

入力コンポーネントのサンプル

+ +

設定値の取得

+プロパティファイルから値を取得するためには、共通部品を使用する。詳細は本ページのJavaプログラムを参照。 +
+実装サンプル
+プロパティファイルからの値取得:メッセージ1
+サーバーを再起動せずに更新されたプロパティファイルからの取得:メッセージ2
+
+ +

エラーハンドリングのサンプル

+TOOD +

ログ出力のサンプル

+TODO + + +

TODOリスト

+
+・アクセス管理
+WicketのRoleを使う作戦は中止とする。3分岐以上でスマートで無い。
+
+http://d.hatena.ne.jp/n314/20110531/1306809192
+ ページクラスの表示権限がない場合はそれに対するリンクも表示しない
+
+・localestring管理のアーキテクチャ作成
+ 開発フロー
+  デバッグ
+   ・登録漏れを確認する
+   ・更新するためのSQLを生成する
+ 多言語データ追加フロー
+
+
+
+・エラーメッセージ管理のアーキテクチャ作成
+・DB操作のアーキテクチャ作成
+・Label#setEscapeModelString(false) を使いたいときの考慮
+
+
+
+・TopPageは開発モード以外のとき表示されてはいけない。
+
+
+ + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$1.class new file mode 100644 index 0000000..48346a6 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$2.class new file mode 100644 index 0000000..e747afc --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$3.class new file mode 100644 index 0000000..2930faf --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$4.class new file mode 100644 index 0000000..6934135 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage.class new file mode 100644 index 0000000..dbf74f0 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage.html new file mode 100644 index 0000000..f1e79c3 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/EntryPasswordPage.html @@ -0,0 +1,58 @@ + + + + + + + + + + パスワード入力 + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+ +

+パスワードが登録されました。 +

+ + +
+ + + + + + + + + +
パスワード
パスワード(確認)
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage$1.class new file mode 100644 index 0000000..b4ab511 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage.class new file mode 100644 index 0000000..c0a4b20 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage.html new file mode 100644 index 0000000..d7081b5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/ErrorPage.html @@ -0,0 +1,24 @@ + + + + + + エラー + + +
+
+ +
フィードバックメッセージ
+ + +エラーが発生しました。
+
+ +
+トップへ + +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$1.class new file mode 100644 index 0000000..9efecd3 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$10.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$10.class new file mode 100644 index 0000000..1894eb9 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$10.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$1.class new file mode 100644 index 0000000..31f3c3d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$2.class new file mode 100644 index 0000000..19dd726 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$3.class new file mode 100644 index 0000000..8b47597 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$4.class new file mode 100644 index 0000000..f15cc2a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$5.class new file mode 100644 index 0000000..f7fdf44 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11.class new file mode 100644 index 0000000..a9ab100 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$11.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$12.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$12.class new file mode 100644 index 0000000..95f14d8 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$12.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$2.class new file mode 100644 index 0000000..55a04ed --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$3.class new file mode 100644 index 0000000..ed9e19d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$4.class new file mode 100644 index 0000000..d17ff1f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$5.class new file mode 100644 index 0000000..d1e6fc3 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$6.class new file mode 100644 index 0000000..22e07e0 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$7.class new file mode 100644 index 0000000..59d1b9d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$8$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$8$1.class new file mode 100644 index 0000000..02c53d6 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$8$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$8.class new file mode 100644 index 0000000..f4b41e8 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$9.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$9.class new file mode 100644 index 0000000..c6b5ec3 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage$9.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage.class new file mode 100644 index 0000000..46ef5c0 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage.html new file mode 100644 index 0000000..0fff569 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupListPage.html @@ -0,0 +1,113 @@ + + + + + + + + + + + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る + +
フィードバックメッセージ
+ + + +
+

完了メッセージ

+ +

管理グループ一覧

+
+

グループ作成

+ 名称: + +
+ + + + + + + + + + + + + + + +
グループ名称作成日参加人数管理者 
グループ名2015/3/285管理者 + メンバーリストへ + +
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+ +

参加グループ一覧

+
+
+ + + + + + + + + + + + + + + + + +
グループ名称メンバー数管理者参加日状態 
グループ名5管理者2015/3/28参加済み + + + + + +
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$1.class new file mode 100644 index 0000000..2739349 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$2.class new file mode 100644 index 0000000..b7feb1c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$3.class new file mode 100644 index 0000000..04d2bd5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$1.class new file mode 100644 index 0000000..c02cd04 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$2.class new file mode 100644 index 0000000..869c0b9 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$3.class new file mode 100644 index 0000000..bc596dc --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$4.class new file mode 100644 index 0000000..1934f99 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$5.class new file mode 100644 index 0000000..e29a447 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4.class new file mode 100644 index 0000000..a647da6 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$5.class new file mode 100644 index 0000000..00a4e70 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage.class new file mode 100644 index 0000000..1ae165d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage.html new file mode 100644 index 0000000..bb8aa32 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/GroupMemberListPage.html @@ -0,0 +1,86 @@ + + + + + + + + + + + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +
+

完了メッセージ

+ +

{グループ名}の参加者

+ + + + + + + + + + + + + +
メールアドレス
メールアドレス確認
+ +
+ +
+ + + + + + + + + + + + + +
メンバーの名前参加日状態 
メンバーの名前2015/3/28参加済み + + + + + このグループの管理者です +
+
<前へ 次へ>
+
+
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$1.class new file mode 100644 index 0000000..9234493 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$2.class new file mode 100644 index 0000000..c7fdd62 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$3.class new file mode 100644 index 0000000..3c9a23e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$4.class new file mode 100644 index 0000000..5ef3960 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$5.class new file mode 100644 index 0000000..4e3b7f8 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$6.class new file mode 100644 index 0000000..12fcdf1 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$7.class new file mode 100644 index 0000000..bfd27f9 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage.class new file mode 100644 index 0000000..0af7d13 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage.html new file mode 100644 index 0000000..afa5869 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoEntryPage.html @@ -0,0 +1,74 @@ + + + + + + + + + + + お知らせ作成 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+

登録しました。

+
+タイトル +
+
+
+ +あとn文字入力できます。 + + + + +
+ +
+
+ プレビュー +
+
+
+
+ +
+ + + + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$1.class new file mode 100644 index 0000000..aaef45f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$2.class new file mode 100644 index 0000000..309a6ab --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$3.class new file mode 100644 index 0000000..58a9390 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4$1.class new file mode 100644 index 0000000..6bbd680 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4$2.class new file mode 100644 index 0000000..0f99b1a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4.class new file mode 100644 index 0000000..a0d4b10 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage.class new file mode 100644 index 0000000..5c8d92a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage.html new file mode 100644 index 0000000..94ea78e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoListPage.html @@ -0,0 +1,64 @@ + + + + + + + + + + + お知らせ管理 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

お知らせ管理

+ +

新規お知らせ作成

+ +新規お知らせ作成 + +

現在表示されているお知らせ

+
+

削除しました。

+ + + + + + + + + + +
お知らせタイトル掲載日時 
+ お知らせのタイトルをクリックすると「お知らせ本文ページ」へ遷移します + 2015/3/31 14:23
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoPage.class new file mode 100644 index 0000000..e1f1b1f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoPage.html new file mode 100644 index 0000000..6278f96 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/InfoPage.html @@ -0,0 +1,55 @@ + + + + + + + + + + + お知らせ + + + +
+
+ + +

+ + + +トップへ戻る + +
フィードバックメッセージ
+ +
+ +

ChattyInftyの講習の日程が決まりました。

+

2015/3/31

+

+ ChattyInftyの講習の日程が決まりました。
+ 日時:2015年8月18日 10:00~12:00
+ 場所:日本点字図書館 本館3階
+ 内容:(1)ChattyInftyOnlineとは
+    (2)マルチメディアデイジーを作ろう
+    (3)質疑応答
+

+
+
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage$1.class new file mode 100644 index 0000000..0ce3834 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage.class new file mode 100644 index 0000000..794207c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage.html new file mode 100644 index 0000000..746ea4e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/LoginPage.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + Login + + + + + + + + +

ログイン

+
フィードバックメッセージ
+
+ + + + + + + + + + + + + + + + +
メールアドレス
パスワード + + +
+
+ + +
+ +
+
+ + +
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$1.class new file mode 100644 index 0000000..ffc1398 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$10.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$10.class new file mode 100644 index 0000000..b282cfb --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$10.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$2.class new file mode 100644 index 0000000..d12c8de --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$3.class new file mode 100644 index 0000000..830df05 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$4.class new file mode 100644 index 0000000..b99a555 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$5.class new file mode 100644 index 0000000..8ab944c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$6.class new file mode 100644 index 0000000..f6d3fc9 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$7.class new file mode 100644 index 0000000..d51c846 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$8.class new file mode 100644 index 0000000..c05e0b3 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$9.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$9.class new file mode 100644 index 0000000..4a02659 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage$9.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage.class new file mode 100644 index 0000000..55fbb08 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage.html new file mode 100644 index 0000000..4dd05fc --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberDetailPage.html @@ -0,0 +1,115 @@ + + + + + + + + + + 会員情報詳細 + + + +
+
+ + +

+ + + +3.2.9 会員情報編集画面 / 3.2.11.2 会員情報詳細画面 + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +

会員情報

+ +
+

完了メッセージ

+ +※ ・・・ 管理者、運営者のみ表示 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
所属○○○中学校
氏名
メールアドレス
メールアドレス確認用
(変更するときのみ入力)
新しいパスワード(※)
新しいパスワード確認用
(変更するときのみ入力)
状態2015/3/21 21:43
最終ログイン日 +2015/3/21 21:43
利用可能期間yyyy/MM/dd~yyyy/MM/dd
 
+ + + + ※ メールアドレスを変更するとパスワードがリセットされます。
+
+ + + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+ + +
+ + + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$1.class new file mode 100644 index 0000000..2961b1b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$10.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$10.class new file mode 100644 index 0000000..953a1c1 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$10.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$2.class new file mode 100644 index 0000000..fffc08c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$3.class new file mode 100644 index 0000000..5ccaafd --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$4.class new file mode 100644 index 0000000..9455ff5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$5.class new file mode 100644 index 0000000..dcd6d50 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$6.class new file mode 100644 index 0000000..faef654 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$7$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$7$1.class new file mode 100644 index 0000000..9633f5b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$7$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$7.class new file mode 100644 index 0000000..4efef9c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$8.class new file mode 100644 index 0000000..468dc57 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$9.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$9.class new file mode 100644 index 0000000..c840623 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage$9.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage.class new file mode 100644 index 0000000..498c98d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage.html new file mode 100644 index 0000000..3f24a18 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MemberListPage.html @@ -0,0 +1,104 @@ + + + + + + + + + + 会員管理 + + + +
+
+ + +

+ + + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+ +

○○中学校

+ +

追加

+
+

仮登録を行い、登録したメールアドレスへ会員追加メールを送りました。

+ + + + + + + + + + + + + + + + +
氏名
メールアドレス
メールアドレス確認
+ +
このユーザはシステム管理者の追加はできません。
+
+
+ +
+

会員

+ +
+ + + + + + + + + + + + + + + + + + + + + +
氏名メールアドレス状態最終ログイン日時
○○ 太郎abcdefg.taro@example.com登録済み2015/3/28 XX:XX
○○ 次郎abcdefg.jiro@example.com仮登録 
+
+
<前へ 次へ>
+
+ +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MenuPage.html.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MenuPage.html.back new file mode 100644 index 0000000..22ba7f5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MenuPage.html.back @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + メニュー + + + +
+
+ + +

+ + + +ユーザによって異なるメニューが表示されます。 + +
+

機関会員メニュー(スタブ)

+3.2.8 機関会員メニュー + +
+ +
+

機関管理者メニュー(スタブ)

+ +
+ +
+

運営管理者メニュー(スタブ)

+ +
+ +
+

システム開発メニュー

+運用時にこのメニューは表示されません。 + +
+ + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MenuPage.java.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MenuPage.java.back new file mode 100644 index 0000000..daebbee --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/MenuPage.java.back @@ -0,0 +1,112 @@ +package jp.co.y_net.amm.page; + +import jp.co.y_net.amm.AppSession; +import jp.co.y_net.amm.common.AppLogger; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.markup.html.link.Link; + + + +public class MenuPage extends CommonFrameA{ + + /** + * ページ利用可能Roleの設定 + */ + @Override + protected boolean okUser() { + return false + || AppSession.isLogin(AppSession.LoginUser.Role.USER) + || AppSession.isLogin(AppSession.LoginUser.Role.LEADER) + || AppSession.isLogin(AppSession.LoginUser.Role.ADMIN) + || AppSession.isLogin(AppSession.LoginUser.Role.DEV) + ; + } + public MenuPage() { + + /* + * 機関会員メニュー + */ + WebMarkupContainer contUser = new WebMarkupContainer("contUser"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.USER); + } + }; + add(contUser); + /* ・会員情報の編集 */ + contUser.add(new Link("goMemberDetail"){ + @Override + public void onClick() { + MemberDetailPage page = new MemberDetailPage(AppSession.getLoginUserId()); + setResponsePage(page); + } + }); + + /* + * 機関管理者メニュー + */ + WebMarkupContainer contLeader = new WebMarkupContainer("contLeader"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.LEADER); + } + }; + add(contLeader); + contLeader.add(new Link("goMemberList") { + @Override + public void onClick() { + MemberListPage page = new MemberListPage(AppSession.getLoginOrgId()); + setResponsePage(page); + } + }); + contLeader.add(new Link("goOrgDetail") { + @Override + public void onClick() { + OrgDetailPage page = new OrgDetailPage(AppSession.getLoginOrgId()); + setResponsePage(page); + } + }); + + /* + * 運営管理者メニュー + */ + WebMarkupContainer contAdmin = new WebMarkupContainer("contAdmin"){ + @Override + public boolean isVisible() { + return AppSession.isLogin(AppSession.LoginUser.Role.ADMIN); + } + }; + add(contAdmin); + contAdmin.add(new Link("goOrgEntryList") { + @Override + public void onClick() { + OrgEntryListPage page = new OrgEntryListPage(); + setResponsePage(page); + } + }); + contAdmin.add(new Link("goOrgMemberList") { + @Override + public void onClick() { + OrgMemberListPage page = new OrgMemberListPage(); + setResponsePage(page); + } + }); + contAdmin.add(new BookmarkablePageLink("ogInfoList", InfoListPage.class)); + + /* + * システム開発者メニュー + */ + WebMarkupContainer contDev = new WebMarkupContainer("contDev"){ + @Override + public boolean isVisible() { + return AppLogger.isDebug(); + } + }; + add(contDev); + contDev.add(new BookmarkablePageLink("goDashboard", DashboardPage.class)); + + + } +} diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$1.class new file mode 100644 index 0000000..ab6b401 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$10.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$10.class new file mode 100644 index 0000000..157cb9d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$10.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$11.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$11.class new file mode 100644 index 0000000..76caefd --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$11.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$12.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$12.class new file mode 100644 index 0000000..90cba2a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$12.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$2.class new file mode 100644 index 0000000..a734323 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$3.class new file mode 100644 index 0000000..d513b2d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$4.class new file mode 100644 index 0000000..5af9731 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$5.class new file mode 100644 index 0000000..195b837 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$6.class new file mode 100644 index 0000000..59f4d97 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$7.class new file mode 100644 index 0000000..e17f972 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$8.class new file mode 100644 index 0000000..82bcd0a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$9.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$9.class new file mode 100644 index 0000000..ae989c5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$9.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$DateDropDownOnchangeBehavior.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$DateDropDownOnchangeBehavior.class new file mode 100644 index 0000000..6c83e38 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage$DateDropDownOnchangeBehavior.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage.class new file mode 100644 index 0000000..7791128 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage.html new file mode 100644 index 0000000..d6b1536 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgDetailPage.html @@ -0,0 +1,175 @@ + + + + + + + + + + 登録情報 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +

登録会員情報

+ +
+

(更新する)機関・団体情報情報を更新しました。 + / (削除する)機関・団体情報情報を削除しました。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDxxx
会員の種別教育機関
機関・団体名称 +
代表者|氏名
ふりがな
連絡先郵便番号
連絡先住所
連絡先電話番号
連絡先メールアドレス
連絡先メールアドレス確認用
(変更するときのみ入力)
パスワード
(変更するときのみ入力)
パスワード確認用
(変更するときのみ入力)
利用可能期間 + + + + +
+ ~ + + + +
+ 日付が正しくありません。 +
登録可能会員数 + + + +
+ + + ※ メールアドレスを変更するとパスワードがリセットされます。
+
+ + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+ +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$1.class new file mode 100644 index 0000000..e07f3bb --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$2.class new file mode 100644 index 0000000..82964c1 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$3.class new file mode 100644 index 0000000..a9206ee --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$4.class new file mode 100644 index 0000000..99781ad --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$5.class new file mode 100644 index 0000000..fabe759 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$6.class new file mode 100644 index 0000000..972d349 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$7.class new file mode 100644 index 0000000..16f1f6e --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$8.class new file mode 100644 index 0000000..77fab29 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage.class new file mode 100644 index 0000000..4596fd4 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage.html new file mode 100644 index 0000000..7aee237 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryDetailPage.html @@ -0,0 +1,126 @@ + + + + + + + + + + 申請内容表示 + + + +
+
+ + +

+ + + +会員メニューに戻る +代表者メニューに戻る +運営管理者メニューに戻る +
+前に戻る + +
フィードバックメッセージ
+ +
+

+ 承認しました。連絡先メールアドレスへ申請内容承認メールを送りました。/拒否しました。連絡先メールアドレスへ申請内容拒否メールを送りました。 +

+ +

申請内容詳細

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
会員の種別教育機関
申請機関・団体○○中学校
担当者|氏名○○太郎
ふりがなまるまるたろう
連絡先郵便番号999-9999
連絡先住所東京都新宿区高田馬場1-1-1
連絡先電話番号03-9999-9999
連絡先メールアドレスabcd.taro@example.com
拒否理由 + +
+ +
+ +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx (有効期限は2015/09/12 20:20:15です。) +
この管理者のパスワードは変更されていません。
+
+
+
+ ※ 有効期限が残っている場合でも、リセットされます。
+
フィードバックメッセージ
+
+ + + + +
+ + + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$1.class new file mode 100644 index 0000000..e5dce07 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$2$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$2$1.class new file mode 100644 index 0000000..7834018 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$2$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$2.class new file mode 100644 index 0000000..3b168e6 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$3.class new file mode 100644 index 0000000..afb57c2 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$4.class new file mode 100644 index 0000000..148ae63 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$5.class new file mode 100644 index 0000000..c4c485c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage.class new file mode 100644 index 0000000..188dfe0 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage.html new file mode 100644 index 0000000..a731c55 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryListPage.html @@ -0,0 +1,71 @@ + + + + + + + + + + 申請一覧 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

申請一覧

+ + + +表示順序:
+絞り込み:
+ + + + + + + + + + + + + + + + + + + + + + +
会員種別登録会員名称状態申請日時
教育機関○○中学校未処理2015/3/28 XX:XX
施設団体(政令指定)○○市教育委員会承認済み2015/3/28 XX:XX
+
<前へ 次へ>
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$1.class new file mode 100644 index 0000000..b23123f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$10.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$10.class new file mode 100644 index 0000000..c7a811c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$10.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$2.class new file mode 100644 index 0000000..8f0ac36 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$3.class new file mode 100644 index 0000000..963b208 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$4.class new file mode 100644 index 0000000..50b931c --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$5.class new file mode 100644 index 0000000..7ab40b4 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$6.class new file mode 100644 index 0000000..ba2cf93 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$7.class new file mode 100644 index 0000000..b315fec --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$8.class new file mode 100644 index 0000000..f8171fd --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$9.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$9.class new file mode 100644 index 0000000..0118ba0 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage$9.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage.class new file mode 100644 index 0000000..2f245fd --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage.html new file mode 100644 index 0000000..729aa8a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgEntryPage.html @@ -0,0 +1,128 @@ + + + + + + + + + + 新規申請 + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+

+ 申請を行いました。申請の結果は連絡先メールアドレスへお送りします。しばらくお待ちください。 +

+ + + + + +
会員の種別 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
会員の種別 + 選択された種別 + +
申請機関・団体
担当者|氏名
ふりがな
連絡先郵便番号
連絡先住所
連絡先電話番号
連絡先メールアドレス
メールアドレス確認用
※メールアドレスはログインIDとして使用します。
利用規約 +
+ +
+ + + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$1.class new file mode 100644 index 0000000..1c7994b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$2.class new file mode 100644 index 0000000..c6e2fe7 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$3.class new file mode 100644 index 0000000..d558efb --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$4.class new file mode 100644 index 0000000..2b0e917 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$5.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$5.class new file mode 100644 index 0000000..aa77bdd --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$5.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6$1.class new file mode 100644 index 0000000..ef0d054 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6$2.class new file mode 100644 index 0000000..0d283f0 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6.class new file mode 100644 index 0000000..09d4253 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$6.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$7.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$7.class new file mode 100644 index 0000000..01d5601 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$7.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$8.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$8.class new file mode 100644 index 0000000..acc928d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage$8.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage.class new file mode 100644 index 0000000..e7f5d2f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage.html new file mode 100644 index 0000000..e30cd90 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/OrgMemberListPage.html @@ -0,0 +1,104 @@ + + + + + + + + + + 登録会員情報管理 + + + +
+
+ + +

+ + + +運営管理者メニューに戻る + +
フィードバックメッセージ
+ +

登録会員情報管理

+ +
+

完了メッセージ

+ + 会員の種別:
+
+ +

登録会員

+
+
+ + + + + + + + + + + + + + + + +
登録会員名称会員種別状態会員数申請日時
○○中学校未処理 + 5(20) + 2015/3/28 XX:XX
+
<前へ 次へ>
+
+
+ 該当データなし +
+
+ + + + + + +
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel$1.class new file mode 100644 index 0000000..f675067 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel.class new file mode 100644 index 0000000..5f5e817 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel.html new file mode 100644 index 0000000..85c3b3b --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordInfoPanel.html @@ -0,0 +1,15 @@ + + + +
+ このユーザにはパスワード登録用のURLが発行されています。
+ http://localhost:8080/AMM/entrypassword?value=xxxxx
+ 有効期限 2015/09/12 20:20:15
+ + 期限が切れています。
+
+
+
この管理者のパスワードは変更されていません。
+ +
+ \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage$1.class new file mode 100644 index 0000000..c690feb --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage$2.class new file mode 100644 index 0000000..2f818c7 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage.class new file mode 100644 index 0000000..616a00a --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage.html new file mode 100644 index 0000000..c05017d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/PasswordResetPage.html @@ -0,0 +1,45 @@ + + + + + + + + + + パスワードリセット + + + +
+
+ + +

+ + + + + +
フィードバックメッセージ
+ +
+

パスワード再設定用のメールを送りました。ご確認ください。

+ + + + + +
メールアドレス
+ +
+ + +
+ +
+
+ +tml> \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/StubLogin.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/StubLogin.html new file mode 100644 index 0000000..3bd9f3f --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/StubLogin.html @@ -0,0 +1,70 @@ + + + + + + + + + + ログインのサンプル + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
チャレンジ値(A)
+ これは事前に /api/challengestring から取得する値です。
メールアドレス(B)
+ これはユーザに入力してもらう値です。 +
パスワード(C)
+ これはユーザに入力してもらう値です。 +
パスワードハッシュ(D)
+ これはログインボタンがクリックされた後にクライアントのブラウザで計算する値です。Hiddenで保持することを想定します。 +
チャレンジレスポンス(E)
+ これはログインボタンがクリックされた後にクライアントのブラウザで計算する値です。Hiddenで保持することを想定します。 +
+
+ + + +
+ +
+
+
+ログインボタンがクリックされたとき、次の結果が得られれば正しいです。
+パスワードハッシュ(D)=a4aab8fb4c4e0284197d07fe5f3106709b4015661ad9006cbb2f4f7304f0fa18
+チャレンジレスポンス(E)=98d2f4c10eb32bd82d66b86c36a89b9cf31b86065dfce40f6d334dc90d2b2262
+
+文書管理システムは、クライアントから「メールアドレス(B)」と「チャレンジレスポンス(E)」を受け取り、次のAPIで会員管理に問い合わせます。 +
+http://localhost:8080/AMM/api/logincheck?loginid=okita%40example.com&cres=98d2f4c10eb32bd82d66b86c36a89b9cf31b86065dfce40f6d334dc90d2b2262&cstr=YscDAWTcKVLykoXL +
+ + + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$1.class new file mode 100644 index 0000000..1d470a7 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$2.class new file mode 100644 index 0000000..af86529 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3$1.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3$1.class new file mode 100644 index 0000000..ed76615 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3$1.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3$2.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3$2.class new file mode 100644 index 0000000..84f5dcb --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3$2.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3.class new file mode 100644 index 0000000..19952c5 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$3.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$4.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$4.class new file mode 100644 index 0000000..6daf751 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage$4.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage.class b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage.class new file mode 100644 index 0000000..0d9314d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage.class Binary files differ diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage.html b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage.html new file mode 100644 index 0000000..0836495 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/TopPage.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + ログイン + + + +
+
+ + +

+ + + + +この書式で記述するコメントは詳細設計の記述です。実際には画面に表示されません。 + +2016/02/28 更新 +

インターフェース一覧

+ + + + + + +

ログイン(スタブ)

+
フィードバックメッセージ
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
チャレンジ値(A)
メールアドレス(B)
パスワード(C)
パスワードハッシュ(D)
チャレンジレスポンス(E)
+
+ + + +
+ +
+
+ +
+ + + +

エラーログ

+ +ログ
+
+
<前へ 次へ>
+ + + +
+ +
+
+
for + +
+ + \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/css/app.css b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/css/app.css new file mode 100644 index 0000000..a6107a0 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/css/app.css @@ -0,0 +1,292 @@ +@charset "utf-8"; + +/* 全体構成 */ +body { + margin: 0; + padding: 0; + background-color: #EEE; +} +#base{ + margin: 0; + padding: 10px 2%; +} +#containts{ + margin: 0; + padding: 10px; + background-color: #FFF; +} +/* 標準化、リセット */ +*{ + line-height: 1.8em; + font-family: + 'Lucida Grande', + 'Hiragino Kaku Gothic ProN', + 'ヒラギノ角ゴ ProN W3', + Meiryo, メイリオ, sans-serif; + font-size: 1.0em; +} +h1, h2, h3, h4, h5, h6 { + margin: 10px; + padding: 2px; /* 上下 */ + /* border: solid 1px #f00; */ + color:#333; +} +h1 { + margin: 1.5em 0 20px 0; + border-left:5px solid #09C; + background: #09C; + color:#FFF; +} +h2 { + border-left:5px solid #09C; + border-bottom:2px double #09C; + margin: 1em 0px 10px 0; + padding: 1px; /* 上下 */ +} +h3 { + border-bottom:2px double #09C; + padding: 0px; /* 上下 */ + margin: 0.5em 0px 10px 0; +} +h4{ + border-bottom:1px solid #09C; + margin: 1px; /* 上右下左 */ + padding: 0px; /* 上下 */ +} +h5 { + border-bottom:1px dotted #09C; + margin: 0px; /* 上右下左 */ + padding: 0px; /* 上下 */ + +} +h6 { + margin: 0px; /* 上右下左 */ + padding: 0px; /* 上下 */ + +} + +/* 文章 */ +p, dl { + /* border: solid 1px #f00; */ + margin: 5px; + padding: 0; + line-heigh: 1.8em; +} +ul, ol { + /* border: solid 1px #f00; */ + margin: 5px; + /*padding: 0;*/ +} +p:first-letter { + /* 段落落とし + margin-left: 1.0em; + */ +} +p.notice { + border: 1px dotted #cccccc; +} + +/* table */ +table, +th, +td { + border-collapse: collapse; + border-spacing: 0; +} +table { + width: auto; + margin: 10px; + padding: 5px; + border: 1px solid #333333; +} + +table th, +table td { + padding: 3px; +} +th { + border-bottom: 1px dotted #333333; + white-space: nowrap; +} +td { + border: 1px dotted #333333; +} + +/* リンク先のURLを可視化する +a:after{ + content: " (" attr(href) ") "; + font-size: 0.8em; +} +*/ + +/* 囲み */ +.kakomi { + border: 2px dotted #333333; + margin: 5px; + padding: 5px; +} + +/* レスポンシブ対応 */ +#mobile{ + display:none; +} +/* @media screen and (max-width:320px){ +PC ⇒ 960px~1024px +タブレット ⇒ 640px~960px +スマホ ⇒ 320px~640px +*/ +@media screen and (max-width:320px){ + + * { + font-size: 98%; + } + ul, ol { + margin: 0; + padding: 0; + padding-left: 1.5em; + } + table { + width: 80%; + margin: 0 auto; + padding: 5px; + border: 0px solid #333333; + } + th, td { + display: block; + border: 1px solid #333333; + } + /* mobile用のリンク */ + a { + display: block; + position: relative; + border: 1px solid #ccc; + background: linear-gradient(#fff, #f0f0f0); + border-top: 1px solid #ccc; + padding: 10px; + padding-right: 30px; + margin: 1px; + text-decoration: none; + } + a:after { + display: block; + position: absolute; + top: 50%; + right: 10px; + width: 20px; + height: 20px; + margin-top: -15px; + content: "≫"; + font-size: 150%; + font-weight: bold; + } + /* mobile版であることを表すFotter */ + #mobile{ + display:block; + /*position: relative;*/ + position: fixed ; + width: 100%; + bottom: 0; + left: 0; + /*border: 1px solid #ccc;*/ + padding: 1px; + margin: 0; + background-color : #09C; + text-decoration: none; + font-size: 0.8em; + color: #FFF; + opacity: 0.30; + } +} +.clear { clear:both; } +.clear hr { display:none; } + +/*****************************************************************************************************************/ +/* AMM用記述 +/*****************************************************************************************************************/ +#head { + font-size: 150%; + border-bottom:5px double #09C; +} +#head a{ + text-decoration: none; +} +#head #divLoginUser{ + float: right; + font-size: 75%; +} +#divLoginUser form{ + display: inline; +} +#buttonLogout{ + border-style: none; + text-decoration: none; + font-weight: bold; + text-align: center; + font-size: 10px; + +} +#footer { + text-align: center; + margin-top: 20px; + font-size: 80%; + border-top:5px double #09C; +} +.devnote { + display: block; + /*display:none;*/ + width:30em; + background-color: #FEE; + border: 1px dotted #333333; + margin:10px; +} +.devnoteIn { + /*display:none;*/ + background-color: #FEE; + border: 1px dotted #333333; + margin:10px; +} +/* 未訪問と訪問済みを同一色とする */ +a:link {color:#0000ff;} +a:visited {color:#0000ff;} +/* ただしお知らせは訪問済みを変更する */ +a.info:link {color:#2200C1;} +a.info:visited {color:#551A8B;} + +.linktop { + display: none; + position: fixed; + bottom:20px; + right: 0px; + text-indent:0px; + color:#fff + +} +table { + width: auto; + margin: 10px; + padding: 5px; + border: 1px solid #333333; +} + +table.border0, +table.border0 th, +table.border0 td { + border: 0; + margin:0; + padding:0; +} +.feedbackPanelERROR { + color:red; +} +.feedbackPanelINFO { + color:black; +} +.imeoff{ + ime-mode: inactive; +} +.imeon{ + ime-mode: active; +} +.strong { + color:red; +} diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/CalcHash.js b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/CalcHash.js new file mode 100644 index 0000000..413095d --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/CalcHash.js @@ -0,0 +1,25 @@ +function eventLogin(ret){ + + var challengeA=document.form.textChallenge.value; + var loginidB=document.form.textLoginId.value; + var passwordC=document.form.textPassword.value; + var passwordHashD=passowrdHash(passwordC, loginidB); + document.form.textPasswordHash.value=passwordHashD; + document.form.textChallengeResponse.value=challengeResponse(passwordHashD, challengeA); + + if(ret == true) { + /* パスワード、パスワードハッシュは送信しないので消去 */ + document.form.textPassword.value=""; + document.form.textPasswordHash.value=""; + } + + + return ret; +} + +function passowrdHash(password, account){ + return CryptoJS.SHA256(account+":"+password); +} +function challengeResponse(phash, chvalue) { + return CryptoJS.SHA256(phash+":"+chvalue); +} \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/CalcHash.js.back b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/CalcHash.js.back new file mode 100644 index 0000000..df0f2f4 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/CalcHash.js.back @@ -0,0 +1,30 @@ +function eventLogin(ret){ + + var challengeA=document.form.textChallenge.value; + var loginidB=document.form.textLoginId.value; + var passwordC=document.form.textPassword.value; + var passwordHashD=passowrdHash(passwordC, loginidB); + document.form.textPasswordHash.value=passwordHashD; + document.form.textChallengeResponse.value=challengeResponse(passwordHashD, challengeA); + + if(ret == true) { + /* パスワード、パスワードハッシュは送信しないので消去 */ + document.form.textPassword.value=""; + document.form.textPasswordHash.value=""; + } + + + return ret; +} +var STRETCH_COUNT=500; +function passowrdHash(password, loginId){ + var salt = CryptoJS.SHA256(loginId); + var hash = ""; + for (var i = 0; i < STRETCH_COUNT; i = i +1){ + hash = CryptoJS.SHA256(hash + salt + password); + } + return hash; +} +function challengeResponse(passwordHash, challenge) { + return CryptoJS.SHA256(passwordHash + challenge); +} \ No newline at end of file diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/app.js b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/app.js new file mode 100644 index 0000000..005d724 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/app.js @@ -0,0 +1,28 @@ +/* ページトップへ */ +$(document).ready(function(){ + + var pagetop = $('.linktop'); + $(window).scroll(function(){ + if ( $(this).scrollTop() > 100 ) { + pagetop.fadeIn(); + } else { + pagetop.fadeOut(); + } + }); + pagetop.click(function () { + $('body, html').animate({ scrollTop: 0 }, 600); + return false; + }); + +}); + +/* 確認ダイアログ */ +function confirmDisp(){ + if(window.confirm("処理を行います。")){ + return true; + } else{ + return false; + } +} + + diff --git a/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js new file mode 100644 index 0000000..da41706 --- /dev/null +++ b/AMM_web/target/generated-classes/cobertura/jp/co/y_net/amm/page/js/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("