Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ryanxhl
spring-mvc-mini
提交
d6c99332
S
spring-mvc-mini
项目概览
Ryanxhl
/
spring-mvc-mini
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-mvc-mini
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
d6c99332
编写于
8月 16, 2016
作者:
Z
zhangnan
浏览文件
操作
浏览文件
下载
差异文件
next round
上级
aefe8ee2
158cee89
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
1386 addition
and
0 deletion
+1386
-0
README.md
README.md
+89
-0
src/main/java/com/spring/mvc/mini/git/GitHandler.java
src/main/java/com/spring/mvc/mini/git/GitHandler.java
+99
-0
src/main/java/com/spring/mvc/mini/json/RequestStatusJsonParser.java
...ava/com/spring/mvc/mini/json/RequestStatusJsonParser.java
+72
-0
src/main/java/com/spring/mvc/mini/pojo/ObjectClassesType.java
...main/java/com/spring/mvc/mini/pojo/ObjectClassesType.java
+28
-0
src/main/java/com/spring/mvc/mini/pojo/RequestStatusListType.java
.../java/com/spring/mvc/mini/pojo/RequestStatusListType.java
+31
-0
src/main/java/com/spring/mvc/mini/schedule/ScheduleFileUpdator.java
...ava/com/spring/mvc/mini/schedule/ScheduleFileUpdator.java
+107
-0
src/main/java/com/spring/mvc/mini/svn/SVNHandler.java
src/main/java/com/spring/mvc/mini/svn/SVNHandler.java
+140
-0
src/main/java/com/spring/mvc/mini/validation/ObjectClassDataValidator.java
.../spring/mvc/mini/validation/ObjectClassDataValidator.java
+63
-0
src/main/java/com/spring/mvc/mini/web/ObjectClassFormController.java
...va/com/spring/mvc/mini/web/ObjectClassFormController.java
+214
-0
src/main/java/com/spring/mvc/mini/web/ObjectClassesController.java
...java/com/spring/mvc/mini/web/ObjectClassesController.java
+140
-0
src/main/java/com/spring/mvc/mini/web/RequestStatusController.java
...java/com/spring/mvc/mini/web/RequestStatusController.java
+169
-0
src/main/java/com/spring/mvc/mini/web/UserInfoFormController.java
.../java/com/spring/mvc/mini/web/UserInfoFormController.java
+85
-0
src/main/java/com/spring/mvc/mini/xml/ObjectClassXMLPaser.java
...ain/java/com/spring/mvc/mini/xml/ObjectClassXMLPaser.java
+149
-0
未找到文件。
README.md
浏览文件 @
d6c99332
<<<<<<< HEAD
spring-mvc-test是一个完整的,轻量、简单的Java项目,基于Spring MVC.
spring-mvc-test是一个完整的,轻量、简单的Java项目,基于Spring MVC.
里面有基本的增删改查的功能。而且无需修改任何内容,就可以直接跑起来。
里面有基本的增删改查的功能。而且无需修改任何内容,就可以直接跑起来。
下面是Spring MVC的Guide页面,这个项目很多是基于它编写的。
下面是Spring MVC的Guide页面,这个项目很多是基于它编写的。
...
@@ -80,3 +81,91 @@ If you want to deploy this project to Linux server, you might need to edit conf
...
@@ -80,3 +81,91 @@ If you want to deploy this project to Linux server, you might need to edit conf
$ spring-oss-mini
\r
esources
\a
pplication.properties
$ spring-oss-mini
\r
esources
\a
pplication.properties
=======
> 我叫Jerry, 本科毕业于2009年,而后开发和维护[Nokia NetAct](http://networks.nokia.com/portfolio/solutions/netact)系统至2016年7月。
> 我于2016年8月8日起开始在,USC 美国南加州大学攻读 计算机科学 硕士学位。
> My Linkedin: (https://www.linkedin.com/in/hot13399).
Spring-mvc-mini是一个完整的,轻量、简单的Java项目,适合于初学者学习Spring MVC.
里面有基本的增删改查的功能。无需修改任何内容,就可以直接跑起来。
下面是Spring MVC的Guide页面,这个项目很多是基于它编写的。
http://spring.io/guides
-------------------
在这个项目里主要实现了以下技术:
*
spring-webmvc 实现Model-View-Control
*
svnkit 实现自动checkout checkin SVN
*
jgit 实现自动 pull push GIT
*
javax.mail 实现自动发送IMAP email
*
jasypt 实现用户密码加密
*
dom4j 实现解析XML
*
spring scheduler 实现定时任务
如何运行:
-------------------
在Windows的CMD:
$ cd spring-mvc-mini
$ mvn tomcat7:run
通过浏览器打开:http://localhost:8080/spring-mvc-mini
如果你想要学习或贡献和这个项目:
就通过maven把它build成一个IDE项目,执行以下命令,打开CMD:
$ cd spring-mvc-mini
$ mvn eclipse:eclipse or mvn idea:idea
通过Eclipse或IDEA导入即可。
Note:
-------------------
如果你要在Linux环境运行,以下的文件需要修改。
$ spring-oss-mini\src\main\webapp\WEB-INF\spring\appServlet\servlet-context.xml:
<context:property-placeholder location="file:/opt/web/spring-mvc-mini/resources/application.properties"/>
$ spring-oss-mini\src\main\resources\logback.xml
$ spring-oss-mini\resources\application.properties
最后通过Maven build一个war包部署即可。
--------------------
Spring-mvc-mini is a mini project using Spring MVC.
In this project, you can see the code of:
*
spring-webmvc
*
svnkit
*
javax.mail
*
jasypt
*
dom4j
*
spring scheduler
To run the application:
From the command line with Maven:
$ cd spring-mvc-mini
$ mvn tomcat7:run [-Dmaven.tomcat.port=
<port
no.
>
] (In case 8080 is busy]
Access the deployed web application at: http://localhost:8080/spring-mvc-mini
To contribute to this project:
In your preferred IDE such as Eclipse:
$ cd spring-mvc-mini
$ mvn eclipse:eclipse
Import spring-mvc-mini as a Maven Project
If you want to deploy this project to Linux server, you might need to edit conf files:
$ spring-oss-mini\src\main\webapp\WEB-INF\spring\appServlet\servlet-context.xml:
<context:property-placeholder location="file:/opt/web/spring-mvc-mini/resources/application.properties"/>
$ spring-oss-mini\src\main\resources\logback.xml
$ spring-oss-mini\resources\application.properties
>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/git/GitHandler.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.git
;
package
com.spring.mvc.mini.git
;
import
com.jcraft.jsch.JSch
;
import
com.jcraft.jsch.JSch
;
...
@@ -110,3 +111,101 @@ public class GitHandler {
...
@@ -110,3 +111,101 @@ public class GitHandler {
}
}
}
}
=======
package
com.spring.mvc.mini.git
;
import
com.jcraft.jsch.JSch
;
import
com.jcraft.jsch.JSchException
;
import
com.jcraft.jsch.Session
;
import
org.eclipse.jgit.api.Git
;
import
org.eclipse.jgit.api.TransportConfigCallback
;
import
org.eclipse.jgit.api.errors.*
;
import
org.eclipse.jgit.lib.Repository
;
import
org.eclipse.jgit.storage.file.FileRepositoryBuilder
;
import
org.eclipse.jgit.transport.*
;
import
org.eclipse.jgit.util.FS
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.Date
;
import
java.util.Iterator
;
/**
* Created by n2zhang on 2015/7/31.
*/
@Component
public
class
GitHandler
{
static
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
GitHandler
.
class
);
@Value
(
"${path.git.ssh}"
)
private
String
gitSshPath
;
@Value
(
"${path.git.ssh.key}"
)
private
String
gitSshKey
;
public
void
checkin
()
{
File
repositoryPath
=
new
File
(
gitSshPath
);
Repository
repository
=
null
;
try
{
repository
=
FileRepositoryBuilder
.
create
(
new
File
(
repositoryPath
,
".git"
));
Git
git
=
new
Git
(
repository
);
git
.
add
()
.
addFilepattern
(
"."
)
.
call
();
git
.
commit
()
.
setMessage
(
"new managed object commited"
)
.
call
();
final
SshSessionFactory
sshSessionFactory
=
new
JschConfigSessionFactory
()
{
@Override
protected
void
configure
(
OpenSshConfig
.
Host
host
,
Session
session
)
{
java
.
util
.
Properties
config
=
new
java
.
util
.
Properties
();
config
.
put
(
"StrictHostKeyChecking"
,
"no"
);
session
.
setConfig
(
config
);
}
@Override
protected
JSch
createDefaultJSch
(
FS
fs
)
throws
JSchException
{
JSch
defaultJSch
=
super
.
createDefaultJSch
(
fs
);
defaultJSch
.
addIdentity
(
gitSshKey
);
return
defaultJSch
;
}
};
Iterable
resultIterable
=
git
.
push
().
setRemote
(
gitSshPath
).
setTransportConfigCallback
(
new
TransportConfigCallback
()
{
@Override
public
void
configure
(
Transport
transport
)
{
SshTransport
sshTransport
=
(
SshTransport
)
transport
;
sshTransport
.
setSshSessionFactory
(
sshSessionFactory
);
}
}).
call
();
Iterator
iterator
=
resultIterable
.
iterator
();
while
(
iterator
.
hasNext
()
)
{
PushResult
result
=
(
PushResult
)
iterator
.
next
();
LOGGER
.
info
(
result
.
getMessages
());
}
LOGGER
.
info
(
"Json SVN Checked in at "
+
new
Date
());
}
catch
(
IOException
|
UnmergedPathsException
|
WrongRepositoryStateException
|
ConcurrentRefUpdateException
|
NoFilepatternException
|
AbortedByHookException
|
NoHeadException
|
InvalidRemoteException
|
TransportException
|
NoMessageException
e
)
{
LOGGER
.
error
(
e
.
toString
());
}
catch
(
GitAPIException
e
)
{
LOGGER
.
error
(
e
.
toString
());
}
finally
{
repository
.
close
();
}
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/json/RequestStatusJsonParser.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.json
;
package
com.spring.mvc.mini.json
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
...
@@ -67,3 +68,74 @@ public class RequestStatusJsonParser {
...
@@ -67,3 +68,74 @@ public class RequestStatusJsonParser {
}
}
=======
package
com.spring.mvc.mini.json
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.spring.mvc.mini.pojo.ObjectClass
;
import
com.spring.mvc.mini.pojo.RequestStatus
;
import
com.spring.mvc.mini.pojo.RequestStatusListType
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.List
;
@Component
public
class
RequestStatusJsonParser
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
RequestStatusJsonParser
.
class
);
@Value
(
"${path.json}"
)
private
String
jsonPath
;
public
int
getMaxIntClass
()
{
List
<
RequestStatus
>
list
=
this
.
readStatus
();
List
<
ObjectClass
>
objectClasses
=
list
.
get
(
list
.
size
()
-
1
).
getObjectClassesType
().
getObjectClasses
();
return
objectClasses
.
get
(
objectClasses
.
size
()
-
1
).
getIntclass
();
}
public
int
getLatestmocrid
()
{
List
<
RequestStatus
>
mrsList
=
this
.
readStatus
();
return
mrsList
.
get
(
mrsList
.
size
()
-
1
).
getmocrid
();
}
public
void
writeStatus
(
RequestStatusListType
mrslt
)
{
try
{
new
ObjectMapper
().
writeValue
(
new
File
(
jsonPath
),
mrslt
);
}
catch
(
IOException
e
)
{
LOG
.
error
(
e
.
toString
());
}
}
public
List
<
RequestStatus
>
readStatus
()
{
RequestStatusListType
type
=
null
;
try
{
type
=
new
ObjectMapper
().
readValue
(
new
File
(
jsonPath
),
RequestStatusListType
.
class
);
LOG
.
debug
(
type
.
toString
());
}
catch
(
IOException
e
)
{
LOG
.
error
(
e
.
toString
());
}
return
type
.
getRequestStatuses
();
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/pojo/ObjectClassesType.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.pojo
;
package
com.spring.mvc.mini.pojo
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -23,3 +24,30 @@ public class ObjectClassesType {
...
@@ -23,3 +24,30 @@ public class ObjectClassesType {
return
"ObjectClassesType [objectClasses="
+
sb
+
"]"
;
return
"ObjectClassesType [objectClasses="
+
sb
+
"]"
;
}
}
}
}
=======
package
com.spring.mvc.mini.pojo
;
import
java.util.List
;
public
class
ObjectClassesType
{
private
List
<
ObjectClass
>
objectClasses
;
public
List
<
ObjectClass
>
getObjectClasses
()
{
return
objectClasses
;
}
public
void
setObjectClasses
(
List
<
ObjectClass
>
objectClasses
)
{
this
.
objectClasses
=
objectClasses
;
}
@Override
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
for
(
ObjectClass
item
:
objectClasses
)
{
sb
.
append
(
item
);
}
return
"ObjectClassesType [objectClasses="
+
sb
+
"]"
;
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/pojo/RequestStatusListType.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.pojo
;
package
com.spring.mvc.mini.pojo
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -26,3 +27,33 @@ public class RequestStatusListType {
...
@@ -26,3 +27,33 @@ public class RequestStatusListType {
}
}
=======
package
com.spring.mvc.mini.pojo
;
import
java.util.List
;
public
class
RequestStatusListType
{
private
List
<
RequestStatus
>
requestStatuses
;
public
List
<
RequestStatus
>
getRequestStatuses
()
{
return
requestStatuses
;
}
public
void
setRequestStatuses
(
List
<
RequestStatus
>
requestStatuses
)
{
this
.
requestStatuses
=
requestStatuses
;
}
@Override
public
String
toString
()
{
StringBuilder
s
=
new
StringBuilder
();
for
(
RequestStatus
r:
requestStatuses
){
s
.
append
(
r
);
}
return
"RequestStatusListType [requestStatuses="
+
s
+
"]"
;
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/schedule/ScheduleFileUpdator.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.schedule
;
package
com.spring.mvc.mini.schedule
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -102,3 +103,109 @@ public class ScheduleFileUpdator {
...
@@ -102,3 +103,109 @@ public class ScheduleFileUpdator {
mailSender
.
sendMail
(
userInfo
.
getUsername
(),
userInfo
.
getPassword
(),
userInfo
.
getEmail
(),
toAddress
,
subject
,
text
);
mailSender
.
sendMail
(
userInfo
.
getUsername
(),
userInfo
.
getPassword
(),
userInfo
.
getEmail
(),
toAddress
,
subject
,
text
);
}
}
}
}
=======
package
com.spring.mvc.mini.schedule
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.List
;
import
javax.mail.Address
;
import
javax.mail.internet.InternetAddress
;
import
org.joda.time.DateTime
;
import
org.joda.time.Days
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.spring.mvc.mini.json.RequestStatusJsonParser
;
import
com.spring.mvc.mini.mail.MailSender
;
import
com.spring.mvc.mini.pojo.RequestStatus
;
import
com.spring.mvc.mini.pojo.RequestStatusListType
;
import
com.spring.mvc.mini.pojo.ObjectClass
;
import
com.spring.mvc.mini.pojo.StatusType
;
import
com.spring.mvc.mini.pojo.UserInfo
;
import
com.spring.mvc.mini.svn.SVNHandler
;
import
com.spring.mvc.mini.xml.ObjectClassXMLPaser
;
public
class
ScheduleFileUpdator
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ScheduleFileUpdator
.
class
);
@Autowired
private
RequestStatusJsonParser
jsonParser
;
@Autowired
private
SVNHandler
svnHandler
;
@Autowired
private
ObjectClassXMLPaser
objectClassXMLPaser
;
@Autowired
private
MailSender
mailSender
;
public
void
commitObjectClassXml
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
Date
currentTime
=
calendar
.
getTime
();
LOG
.
info
(
"Scheduler start at:"
+
currentTime
);
List
<
RequestStatus
>
requestStatuses
=
jsonParser
.
readStatus
();
for
(
RequestStatus
status
:
requestStatuses
)
{
int
daysBetweenSubmitAndCurrent
=
Days
.
daysBetween
(
new
DateTime
(
status
.
getSubmitDate
()),
new
DateTime
(
currentTime
)).
getDays
();
if
(
StatusType
.
ongoing
.
equals
(
status
.
getStatus
()))
{
if
(
daysBetweenSubmitAndCurrent
>=
5
)
{
setCommitDateAndStatus
(
currentTime
,
requestStatuses
,
status
);
LOG
.
info
(
"MO CR "
+
status
.
getmocrid
()
+
" was checked at:"
+
new
Date
());
try
{
this
.
commitAndSendMail
(
status
.
getUserinfo
(),
appendCommitMessage
(
status
),
"Congratulation!"
);
}
catch
(
Exception
e
)
{
LOG
.
error
(
e
.
toString
());
}
}
}
}
RequestStatusListType
type
=
new
RequestStatusListType
();
type
.
setRequestStatuses
(
requestStatuses
);
jsonParser
.
writeStatus
(
type
);
svnHandler
.
svnCheckin
();
}
private
String
appendCommitMessage
(
RequestStatus
status
)
{
StringBuilder
s
=
new
StringBuilder
();
s
.
append
(
"Final approval of MO CR "
);
s
.
append
(
status
.
getmocrid
());
s
.
append
(
" for "
);
for
(
ObjectClass
objcls
:
status
.
getObjectClassesType
().
getObjectClasses
())
{
objectClassXMLPaser
.
AddObjectClass
(
objcls
);
s
.
append
(
objcls
.
getAbbreviation
());
}
return
s
.
toString
();
}
private
static
void
setCommitDateAndStatus
(
Date
currentTime
,
List
<
RequestStatus
>
requestStatuses
,
RequestStatus
status
)
{
int
requestStatusIndex
;
requestStatusIndex
=
requestStatuses
.
indexOf
(
status
);
requestStatuses
.
get
(
requestStatusIndex
).
setCommitDate
(
currentTime
);
requestStatuses
.
get
(
requestStatusIndex
).
setStatus
(
StatusType
.
commited
);
}
public
void
commitAndSendMail
(
UserInfo
userInfo
,
String
subject
,
String
text
)
throws
Exception
{
Address
[]
toAddress
=
{
new
InternetAddress
(
userInfo
.
getEmail
())};
mailSender
.
sendMail
(
userInfo
.
getUsername
(),
userInfo
.
getPassword
(),
userInfo
.
getEmail
(),
toAddress
,
subject
,
text
);
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/svn/SVNHandler.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.svn
;
package
com.spring.mvc.mini.svn
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
@@ -133,3 +134,142 @@ public class SVNHandler {
...
@@ -133,3 +134,142 @@ public class SVNHandler {
}
}
}
}
=======
package
com.spring.mvc.mini.svn
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.tmatesoft.svn.core.SVNDepth
;
import
org.tmatesoft.svn.core.SVNException
;
import
org.tmatesoft.svn.core.SVNURL
;
import
org.tmatesoft.svn.core.auth.ISVNAuthenticationManager
;
import
org.tmatesoft.svn.core.io.SVNRepository
;
import
org.tmatesoft.svn.core.io.SVNRepositoryFactory
;
import
org.tmatesoft.svn.core.wc.*
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.UnsupportedEncodingException
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Date
;
@Component
public
class
SVNHandler
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
SVNHandler
.
class
);
@Value
(
"${svn.rep.url}"
)
private
String
repURL
;
@Value
(
"${path.rep}"
)
private
String
repPath
;
@Value
(
"${svn.username}"
)
private
String
username
;
@Value
(
"${svn.password}"
)
private
String
password
;
@Value
(
"${path.json}"
)
private
String
jsonPath
;
@Value
(
"${path.xml}"
)
private
String
xmlPath
;
public
void
svnCheckin
()
{
SVNRepository
repository
;
SVNClientManager
ourClientManager
=
SVNClientManager
.
newInstance
();
try
{
repository
=
SVNRepositoryFactory
.
create
(
SVNURL
.
parseURIDecoded
(
repURL
));
ISVNAuthenticationManager
authManager
=
SVNWCUtil
.
createDefaultAuthenticationManager
(
username
,
password
);
repository
.
setAuthenticationManager
(
authManager
);
LOG
.
info
(
"Repository Root: "
+
repository
.
getRepositoryRoot
(
true
));
LOG
.
info
(
"Repository UUID: "
+
repository
.
getRepositoryUUID
(
true
));
LOG
.
info
(
"Repository Latest Revision: "
+
repository
.
getLatestRevision
());
ourClientManager
.
setAuthenticationManager
(
authManager
);
SVNCommitClient
commitClient
=
ourClientManager
.
getCommitClient
();
SVNDiffClient
diffClient
=
ourClientManager
.
getDiffClient
();
File
xmlfile
=
new
File
(
xmlPath
);
File
jsonfile
=
new
File
(
jsonPath
);
File
[]
xmlfilearray
=
{
xmlfile
};
File
[]
jsonfilearray
=
{
jsonfile
};
final
ByteArrayOutputStream
outputStream
=
new
ByteArrayOutputStream
();
diffClient
.
doDiff
(
xmlfile
,
SVNRevision
.
UNDEFINED
,
SVNRevision
.
BASE
,
SVNRevision
.
WORKING
,
SVNDepth
.
INFINITY
,
true
,
outputStream
,
null
);
if
(
outputStream
.
size
()
>
0
)
{
commitClient
.
doCommit
(
xmlfilearray
,
false
,
outputStream
.
toString
(
"UTF-8"
),
false
,
true
);
LOG
.
info
(
"XML Checked in at "
+
new
Date
());
}
diffClient
.
doDiff
(
jsonfile
,
SVNRevision
.
UNDEFINED
,
SVNRevision
.
BASE
,
SVNRevision
.
WORKING
,
SVNDepth
.
INFINITY
,
true
,
outputStream
,
null
);
if
(
outputStream
.
size
()
>
0
)
{
commitClient
.
doCommit
(
jsonfilearray
,
false
,
outputStream
.
toString
(
"UTF-8"
),
false
,
true
);
LOG
.
info
(
"Json SVN Checked in at "
+
new
Date
());
}
}
catch
(
SVNException
|
UnsupportedEncodingException
e
)
{
LOG
.
error
(
e
.
toString
());
}
finally
{
ourClientManager
.
dispose
();
}
}
public
void
svnCheckout
()
{
File
svnTempDir
=
new
File
(
repPath
);
if
(
svnTempDir
.
exists
())
{
return
;
}
SVNRepository
repository
;
try
{
//initiate the reporitory from the url
repository
=
SVNRepositoryFactory
.
create
(
SVNURL
.
parseURIDecoded
(
repURL
));
//create authentication data
ISVNAuthenticationManager
authManager
=
SVNWCUtil
.
createDefaultAuthenticationManager
(
username
,
password
);
repository
.
setAuthenticationManager
(
authManager
);
//need to identify latest revision
long
latestRevision
=
repository
.
getLatestRevision
();
//create client manager and set authentication
SVNClientManager
ourClientManager
=
SVNClientManager
.
newInstance
();
ourClientManager
.
setAuthenticationManager
(
authManager
);
//use SVNUpdateClient to do the export
SVNUpdateClient
updateClient
=
ourClientManager
.
getUpdateClient
();
updateClient
.
setIgnoreExternals
(
false
);
updateClient
.
doCheckout
(
repository
.
getLocation
(),
svnTempDir
,
SVNRevision
.
create
(
latestRevision
),
SVNRevision
.
create
(
latestRevision
),
true
);
}
catch
(
SVNException
e
)
{
LOG
.
error
(
e
.
toString
());
}
finally
{
LOG
.
info
(
"resources/svn_temp checked outs"
);
}
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/validation/ObjectClassDataValidator.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.validation
;
package
com.spring.mvc.mini.validation
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -58,3 +59,65 @@ public class ObjectClassDataValidator {
...
@@ -58,3 +59,65 @@ public class ObjectClassDataValidator {
}
}
}
}
}
}
=======
package
com.spring.mvc.mini.validation
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
com.spring.mvc.mini.pojo.ObjectClass
;
import
com.spring.mvc.mini.xml.ObjectClassXMLPaser
;
@Component
public
class
ObjectClassDataValidator
{
@Autowired
private
ObjectClassXMLPaser
objectClassXMLPaser
;
public
void
checkData
(
List
<
ObjectClass
>
objclsListFormIn
)
throws
Exception
{
List
<
ObjectClass
>
objclsListXmlIn
=
objectClassXMLPaser
.
objectClassMapping
();
for
(
ObjectClass
objclsItemFormIn:
objclsListFormIn
){
boolean
parentsMark
=
false
;
if
(!
objclsItemFormIn
.
getAbbreviation
().
equals
(
objclsItemFormIn
.
getAbbreviation
().
toUpperCase
())){
throw
new
ObjectClassDataValidationException
(
"FAILED:ObjectClass abbrev:\""
+
objclsItemFormIn
.
getAbbreviation
()+
"\" should be all uppercase."
);
}
for
(
ObjectClass
objclsItemXmlIn:
objclsListXmlIn
){
if
(
objclsItemXmlIn
.
getId
().
equals
(
objclsItemFormIn
.
getId
())){
throw
new
ObjectClassDataValidationException
(
"FAILED:ObjectClass id:\""
+
objclsItemFormIn
.
getId
()+
"\" is already reserved."
);
}
if
(
objclsItemXmlIn
.
getAbbreviation
().
equals
(
objclsItemFormIn
.
getAbbreviation
())){
throw
new
ObjectClassDataValidationException
(
"FAILED:ObjectClass abbrev:\""
+
objclsItemFormIn
.
getAbbreviation
()+
"\" is already reserved."
);
}
if
(
objclsItemXmlIn
.
getId
().
equals
(
objclsItemFormIn
.
getParents
())){
parentsMark
=
true
;
}
}
for
(
ObjectClass
objclsItemFormInInner:
objclsListFormIn
){
if
(
objclsItemFormInInner
.
getId
().
equals
(
objclsItemFormIn
.
getParents
())){
parentsMark
=
true
;
}
}
if
(!
parentsMark
){
throw
new
ObjectClassDataValidationException
(
"FAILED:ObjectClass parent:\""
+
objclsItemFormIn
.
getParents
()+
"\" is not existing."
);
}
}
}
public
void
checkmocrid
(
String
mocrid
,
int
latestmocrid
)
throws
Exception
{
if
(
Integer
.
parseInt
(
mocrid
)
<=
latestmocrid
){
throw
new
ObjectClassDataValidationException
(
"FAILED:MO CR ID:\""
+
mocrid
+
"\" is not valid anymore, please refresh and recommit again."
);
}
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/web/ObjectClassFormController.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.web
;
package
com.spring.mvc.mini.web
;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
...
@@ -207,3 +208,216 @@ public class ObjectClassFormController {
...
@@ -207,3 +208,216 @@ public class ObjectClassFormController {
}
}
}
}
=======
package
com.spring.mvc.mini.web
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.List
;
import
javax.mail.Address
;
import
javax.mail.internet.InternetAddress
;
import
javax.validation.Valid
;
import
com.spring.mvc.mini.pojo.*
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.mvc.extensions.ajax.AjaxUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.SessionAttributes
;
import
org.springframework.web.context.request.WebRequest
;
import
org.springframework.web.servlet.mvc.support.RedirectAttributes
;
import
com.spring.mvc.mini.json.RequestStatusJsonParser
;
import
com.spring.mvc.mini.mail.MailSender
;
import
com.spring.mvc.mini.pojo.RequestStatus
;
import
com.spring.mvc.mini.validation.ObjectClassDataValidator
;
@Controller
@RequestMapping
(
"/objectclassform"
)
@SessionAttributes
({
"ojbclslisttype"
,
"userinfo"
,
"mocrid"
})
public
class
ObjectClassFormController
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ObjectClassFormController
.
class
);
private
static
final
String
MESSAGE
=
"message"
;
@Value
(
"${mail.to}"
)
private
String
mailto
;
@Value
(
"${web.hostname}"
)
private
String
webHostname
;
@Autowired
private
RequestStatusJsonParser
requestStatusJsonParser
;
@Autowired
private
ObjectClassDataValidator
objectClassDataValidator
;
@Autowired
private
MailSender
mailSender
;
@ModelAttribute
public
void
ajaxAttribute
(
WebRequest
request
,
Model
model
)
{
model
.
addAttribute
(
"ajaxRequest"
,
AjaxUtils
.
isAjaxRequest
(
request
));
}
@ModelAttribute
(
"userinfo"
)
public
UserInfo
createUserinfo
()
{
return
new
UserInfo
();
}
@ModelAttribute
(
"mocrid"
)
public
String
createMocrid
()
{
return
String
.
valueOf
(
1
+
requestStatusJsonParser
.
getLatestmocrid
());
}
@RequestMapping
(
method
=
RequestMethod
.
GET
)
public
void
handleObjectClassForm
(
Model
model
,
@ModelAttribute
(
"userinfo"
)
UserInfo
userinfo
,
@ModelAttribute
(
"mocrid"
)
String
mocrid
)
{
ObjectClassesType
objectClassesType
=
new
ObjectClassesType
();
List
<
ObjectClass
>
objectClasses
=
new
ArrayList
<
ObjectClass
>();
objectClasses
.
add
(
createObjectClassInstance
(
0
,
userinfo
,
mocrid
));
objectClassesType
.
setObjectClasses
(
objectClasses
);
model
.
addAttribute
(
"objectClassesType"
,
objectClassesType
);
}
//Add More
@RequestMapping
(
params
=
{
"objclscount"
},
method
=
RequestMethod
.
POST
)
public
void
handleObjectClassFormWithParam
(
@Valid
ObjectClassesType
objectClassesType
,
@ModelAttribute
(
"userinfo"
)
UserInfo
userinfo
,
@ModelAttribute
(
"mocrid"
)
String
mocrid
,
@RequestParam
String
ObjectClassCount
,
Model
model
)
{
List
<
ObjectClass
>
objectClasses
=
objectClassesType
.
getObjectClasses
();
objectClasses
.
add
(
createObjectClassInstance
(
Integer
.
parseInt
(
ObjectClassCount
),
userinfo
,
mocrid
));
objectClassesType
.
setObjectClasses
(
objectClasses
);
model
.
addAttribute
(
"ObjectClassesType"
,
objectClassesType
);
}
//Submit
@RequestMapping
(
method
=
RequestMethod
.
POST
)
public
String
handleSubmit
(
ObjectClassesType
objectClassesType
,
@ModelAttribute
(
"userinfo"
)
UserInfo
userinfo
,
@ModelAttribute
(
"mocrid"
)
String
mocrid
,
@ModelAttribute
(
"ajaxRequest"
)
boolean
ajaxRequest
,
Model
model
,
RedirectAttributes
redirectAttrs
)
{
if
(
userinfo
.
getUsername
()
==
null
)
{
model
.
addAttribute
(
MESSAGE
,
"Sorry, Please submit UserInfoForm at first. "
);
return
null
;
}
List
<
ObjectClass
>
objectClasses
=
objectClassesType
.
getObjectClasses
();
try
{
objectClassDataValidator
.
checkData
(
objectClasses
);
objectClassDataValidator
.
checkmocrid
(
mocrid
,
requestStatusJsonParser
.
getLatestmocrid
());
}
catch
(
Exception
e
)
{
model
.
addAttribute
(
MESSAGE
,
e
.
toString
());
return
null
;
}
constructDebugMessage
(
objectClasses
);
RequestStatus
s
=
new
RequestStatus
();
Calendar
cal
=
Calendar
.
getInstance
();
s
.
setSubmitDate
(
cal
.
getTime
());
s
.
setmocrid
(
Integer
.
parseInt
(
mocrid
));
s
.
setObjectClassesType
(
objectClassesType
);
s
.
setStatus
(
StatusType
.
ongoing
);
s
.
setUserinfo
(
userinfo
);
List
<
RequestStatus
>
l
=
requestStatusJsonParser
.
readStatus
();
l
.
add
(
s
);
RequestStatusListType
type
=
new
RequestStatusListType
();
type
.
setRequestStatuses
(
l
);
requestStatusJsonParser
.
writeStatus
(
type
);
try
{
this
.
commitAndSendMail
(
userinfo
,
constructMailSubject
(
mocrid
,
objectClasses
),
constructMailText
(
userinfo
,
mocrid
));
}
catch
(
Exception
e
)
{
model
.
addAttribute
(
MESSAGE
,
e
.
toString
());
return
null
;
}
String
message
=
"MO CR:"
+
mocrid
+
" committed. System will send mail to reviewers."
;
if
(
ajaxRequest
)
{
model
.
addAttribute
(
MESSAGE
,
message
);
return
null
;
}
else
{
redirectAttrs
.
addFlashAttribute
(
MESSAGE
,
message
);
return
"redirect:/objectclassform"
;
}
}
private
String
constructMailText
(
@ModelAttribute
(
"userinfo"
)
UserInfo
userinfo
,
@ModelAttribute
(
"mocrid"
)
String
mocrid
)
{
StringBuilder
textsb
=
new
StringBuilder
();
textsb
.
append
(
"Hi,\r\n\r\nThese MO CR's shall be approved if no other comments.\r\nIf you have any comment, please comment on this page:\r\n"
);
textsb
.
append
(
"http://"
);
textsb
.
append
(
webHostname
);
textsb
.
append
(
":8080/spring-mvc-mini/requeststatus?mocrid="
);
textsb
.
append
(
mocrid
);
textsb
.
append
(
"\r\nor mailto:"
);
textsb
.
append
(
userinfo
.
getEmail
());
textsb
.
append
(
"\r\n"
);
textsb
.
append
(
"The request will be committed in 5 days.\r\n\r\nThanks.\r\n"
);
textsb
.
append
(
"http://"
);
textsb
.
append
(
webHostname
);
textsb
.
append
(
":8080/spring-mvc-mini/"
);
return
textsb
.
toString
();
}
private
String
constructMailSubject
(
@ModelAttribute
(
"mocrid"
)
String
mocrid
,
List
<
ObjectClass
>
objectClasses
)
{
StringBuilder
subjectsb
=
new
StringBuilder
();
subjectsb
.
append
(
"Forthcoming approval of MO CR "
);
subjectsb
.
append
(
mocrid
);
subjectsb
.
append
(
" for "
);
for
(
ObjectClass
objcls
:
objectClasses
)
{
subjectsb
.
append
(
objcls
.
getAbbreviation
());
}
return
subjectsb
.
toString
();
}
private
static
void
constructDebugMessage
(
List
<
ObjectClass
>
objectClasses
)
{
StringBuilder
debugmessage
=
new
StringBuilder
();
for
(
ObjectClass
objcls
:
objectClasses
)
{
debugmessage
.
append
(
objcls
);
}
LOG
.
debug
(
debugmessage
.
toString
());
}
private
ObjectClass
createObjectClassInstance
(
int
i
,
UserInfo
userinfo
,
String
mocrid
)
{
ObjectClass
objcls
=
new
ObjectClass
();
objcls
.
setIntclass
(
requestStatusJsonParser
.
getMaxIntClass
()
+
1
+
i
);
Calendar
cal
=
Calendar
.
getInstance
();
Date
currenttime
=
cal
.
getTime
();
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"YYYY.MM.DD"
);
objcls
.
setComment
(
"# "
+
userinfo
.
getEmail
()
+
" "
+
sdf
.
format
(
currenttime
)
+
" MO CR "
+
mocrid
);
return
objcls
;
}
public
void
commitAndSendMail
(
UserInfo
userinfo
,
String
subject
,
String
text
)
throws
Exception
{
Address
[]
toAddress
=
{
new
InternetAddress
(
mailto
),
new
InternetAddress
(
userinfo
.
getEmail
())};
mailSender
.
sendMail
(
userinfo
.
getUsername
(),
userinfo
.
getPassword
(),
userinfo
.
getEmail
(),
toAddress
,
subject
,
text
);
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/web/ObjectClassesController.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.web
;
package
com.spring.mvc.mini.web
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -133,3 +134,142 @@ public class ObjectClassesController {
...
@@ -133,3 +134,142 @@ public class ObjectClassesController {
}
}
}
}
=======
package
com.spring.mvc.mini.web
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.support.PagedListHolder
;
import
org.springframework.mvc.extensions.ajax.AjaxUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.SessionAttributes
;
import
org.springframework.web.context.request.WebRequest
;
import
org.springframework.web.servlet.mvc.support.RedirectAttributes
;
import
com.spring.mvc.mini.pojo.ObjectClass
;
import
com.spring.mvc.mini.xml.ObjectClassXMLPaser
;
@Controller
@RequestMapping
(
"/objectClasses"
)
@SessionAttributes
(
"productList"
)
public
class
ObjectClassesController
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
ObjectClassesController
.
class
);
private
static
final
String
PRODUCT_LIST
=
"productList"
;
@Autowired
private
ObjectClassXMLPaser
objectClassXMLPaser
;
@ModelAttribute
public
void
ajaxAttribute
(
WebRequest
request
,
Model
model
)
{
model
.
addAttribute
(
"ajaxRequest"
,
AjaxUtils
.
isAjaxRequest
(
request
));
}
@RequestMapping
(
method
=
RequestMethod
.
GET
)
public
String
enrichobjectClassesType
(
Model
model
,
@ModelAttribute
(
"page"
)
String
page
)
{
List
<
ObjectClass
>
ojbclslist
=
getObjectClasses
();
Collections
.
reverse
(
ojbclslist
);
PagedListHolder
productList
=
new
PagedListHolder
(
ojbclslist
);
productList
.
setPageSize
(
100
);
model
.
addAttribute
(
PRODUCT_LIST
,
productList
);
return
null
;
}
private
List
<
ObjectClass
>
getObjectClasses
()
{
List
<
ObjectClass
>
ojbclslist
=
null
;
try
{
ojbclslist
=
objectClassXMLPaser
.
objectClassMapping
();
}
catch
(
Exception
e
)
{
LOG
.
error
(
"get XML Object Class exception"
,
e
);
}
return
ojbclslist
;
}
@RequestMapping
(
params
=
{
"jumppage"
},
method
=
RequestMethod
.
GET
)
public
String
handleObjectClassPagination
(
Model
model
,
@ModelAttribute
(
"jumppage"
)
String
jumppage
,
@ModelAttribute
(
PRODUCT_LIST
)
PagedListHolder
<
ArrayList
<
ObjectClass
>>
productList
)
{
LOG
.
info
(
"@RequestMapping(params={\"jumppage\"}, method = RequestMethod.GET)"
);
if
(
jumppage
!=
null
)
{
if
(
"next"
.
equals
(
jumppage
))
{
productList
.
nextPage
();
}
else
if
(
"previous"
.
equals
(
jumppage
))
{
productList
.
previousPage
();
}
else
if
(
isInteger
(
jumppage
)
>
0
)
{
productList
.
setPage
(
isInteger
(
jumppage
));
}
}
model
.
addAttribute
(
PRODUCT_LIST
,
productList
);
return
null
;
}
@RequestMapping
(
params
=
{
"searchcritical"
},
method
=
RequestMethod
.
GET
)
public
String
searchObjectClass
(
Model
model
,
@ModelAttribute
(
"searchcritical"
)
String
searchcritical
)
{
LOG
.
info
(
"@RequestMapping(params={\"searchcritical\"}, method = RequestMethod.GET)"
);
List
<
ObjectClass
>
searchOjbclslist
=
null
;
if
(
searchcritical
!=
null
)
{
List
<
ObjectClass
>
ojbclslist
=
getObjectClasses
();
searchOjbclslist
=
new
ArrayList
<
ObjectClass
>();
for
(
ObjectClass
ojbcls
:
ojbclslist
)
{
if
(
ojbcls
.
match
(
searchcritical
))
{
searchOjbclslist
.
add
(
ojbcls
);
}
}
}
PagedListHolder
<
ArrayList
<
ObjectClass
>>
productList
=
new
PagedListHolder
(
searchOjbclslist
);
productList
.
setPageSize
(
50
);
model
.
addAttribute
(
PRODUCT_LIST
,
productList
);
return
null
;
}
@RequestMapping
(
method
=
RequestMethod
.
POST
)
public
String
submit
(
Model
model
,
@ModelAttribute
(
"page"
)
String
page
,
@ModelAttribute
(
PRODUCT_LIST
)
PagedListHolder
<
ArrayList
<
ObjectClass
>>
productList
,
@ModelAttribute
(
"ajaxRequest"
)
boolean
ajaxRequest
,
RedirectAttributes
redirectAttrs
)
{
LOG
.
info
(
"@RequestMapping(method=RequestMethod.POST)"
);
String
message
=
"Form submitted successfully. Bound "
;
if
(
ajaxRequest
)
{
model
.
addAttribute
(
"message"
,
message
);
return
null
;
}
else
{
redirectAttrs
.
addFlashAttribute
(
"message"
,
message
);
return
"redirect:/objectClasses"
;
}
}
private
static
int
isInteger
(
String
s
)
{
int
i
;
try
{
i
=
Integer
.
parseInt
(
s
);
}
catch
(
NumberFormatException
e
)
{
return
-
1
;
}
return
i
;
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/web/RequestStatusController.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.web
;
package
com.spring.mvc.mini.web
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -162,3 +163,171 @@ public class RequestStatusController {
...
@@ -162,3 +163,171 @@ public class RequestStatusController {
}
}
}
}
=======
package
com.spring.mvc.mini.web
;
import
java.util.List
;
import
javax.mail.Address
;
import
javax.mail.internet.InternetAddress
;
import
com.spring.mvc.mini.pojo.RequestStatus
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.mvc.extensions.ajax.AjaxUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.context.request.WebRequest
;
import
org.springframework.web.servlet.mvc.support.RedirectAttributes
;
import
com.spring.mvc.mini.json.RequestStatusJsonParser
;
import
com.spring.mvc.mini.mail.MailSender
;
import
com.spring.mvc.mini.pojo.RequestStatusListType
;
import
com.spring.mvc.mini.pojo.UserInfo
;
@Controller
@RequestMapping
(
"/requeststatus"
)
public
class
RequestStatusController
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
RequestStatusController
.
class
);
private
static
final
String
REQUEST_STATUS
=
"requestStatus"
;
private
static
final
String
MESSAGE
=
"message"
;
@Autowired
private
RequestStatusJsonParser
requestStatusJsonParser
;
@Autowired
private
MailSender
mailSender
;
@ModelAttribute
public
void
ajaxAttribute
(
WebRequest
request
,
Model
model
)
{
model
.
addAttribute
(
"ajaxRequest"
,
AjaxUtils
.
isAjaxRequest
(
request
));
}
@RequestMapping
(
method
=
RequestMethod
.
GET
)
public
void
handleObjectClassForm
(
Model
model
)
{
model
.
addAttribute
(
REQUEST_STATUS
,
new
RequestStatus
());
}
@RequestMapping
(
params
={
"mocrid"
},
method
=
RequestMethod
.
GET
)
public
void
enrichObjectClassFormWithParam
(
@RequestParam
String
mocrid
,
Model
model
)
{
List
<
RequestStatus
>
mrsList
=
requestStatusJsonParser
.
readStatus
();
for
(
RequestStatus
mrs:
mrsList
){
if
(
mrs
.
getmocrid
()
==
Integer
.
parseInt
(
mocrid
)){
LOGGER
.
debug
(
"mrs.getmocrid() is:"
+
mrs
.
getmocrid
());
model
.
addAttribute
(
REQUEST_STATUS
,
mrs
);
}
}
}
@RequestMapping
(
method
=
RequestMethod
.
POST
)
public
String
submit
(
@ModelAttribute
(
REQUEST_STATUS
)
RequestStatus
requestStatus
,
@ModelAttribute
(
"ajaxRequest"
)
boolean
ajaxRequest
,
Model
model
,
RedirectAttributes
redirectAttrs
)
{
if
(
requestStatus
.
getObjectClassesType
()
==
null
){
List
<
RequestStatus
>
mrsList
=
requestStatusJsonParser
.
readStatus
();
if
(
isMocridEquals
(
requestStatus
,
model
,
mrsList
)){
model
.
addAttribute
(
MESSAGE
,
"SUCCESS:MO CR ID:"
+
requestStatus
.
getmocrid
()+
" is presenting."
);
return
null
;
}
else
{
model
.
addAttribute
(
REQUEST_STATUS
,
new
RequestStatus
());
model
.
addAttribute
(
MESSAGE
,
"FAILED:MO CR ID:"
+
requestStatus
.
getmocrid
()+
" is not existing."
);
}
}
List
<
RequestStatus
>
requestStatuses
=
requestStatusJsonParser
.
readStatus
();
int
index
=
0
;
for
(
RequestStatus
item:
requestStatuses
){
if
(
item
.
getmocrid
()
==
requestStatus
.
getmocrid
()){
index
=
requestStatuses
.
indexOf
(
item
);
break
;
}
}
requestStatuses
.
get
(
index
).
setComments
(
requestStatus
.
getComments
());
requestStatuses
.
get
(
index
).
setObjectClassesType
(
requestStatus
.
getObjectClassesType
());
RequestStatusListType
type
=
new
RequestStatusListType
();
type
.
setRequestStatuses
(
requestStatuses
);
requestStatusJsonParser
.
writeStatus
(
type
);
LOGGER
.
debug
(
type
.
toString
());
try
{
this
.
commentAndSendMail
(
requestStatuses
.
get
(
index
).
getUserinfo
(),
constructMailSubject
(
requestStatus
),
constructMailText
(
requestStatus
,
requestStatuses
,
index
));
}
catch
(
Exception
e
)
{
model
.
addAttribute
(
MESSAGE
,
e
.
toString
());
return
null
;
}
String
message
=
"Your update was submitted."
;
if
(
ajaxRequest
)
{
model
.
addAttribute
(
MESSAGE
,
message
);
return
null
;
}
else
{
return
"redirect:/requeststatus"
;
}
}
private
String
constructMailText
(
@ModelAttribute
(
REQUEST_STATUS
)
RequestStatus
requestStatus
,
List
<
RequestStatus
>
requestStatuses
,
int
index
)
{
StringBuilder
textsb
=
new
StringBuilder
();
textsb
.
append
(
"New Comments: \r\n"
);
textsb
.
append
(
requestStatus
.
getComments
());
textsb
.
append
(
" \r\n"
);
if
(!
requestStatuses
.
get
(
index
).
getObjectClassesType
().
equals
(
requestStatus
.
getObjectClassesType
())){
textsb
.
append
(
"Object Classes updated: \r\n"
);
textsb
.
append
(
requestStatus
.
getObjectClassesType
().
toString
());
}
textsb
.
append
(
"http://localhost:8080/spring-mvc-mini/requeststatus?mocrid="
);
textsb
.
append
(
requestStatus
.
getmocrid
());
textsb
.
append
(
" \r\n"
);
textsb
.
append
(
" \r\n"
);
return
textsb
.
toString
();
}
private
String
constructMailSubject
(
@ModelAttribute
(
REQUEST_STATUS
)
RequestStatus
requestStatus
)
{
StringBuilder
subjectsb
=
new
StringBuilder
();
subjectsb
.
append
(
"MO CR:"
);
subjectsb
.
append
(
requestStatus
.
getmocrid
());
subjectsb
.
append
(
" Updated"
);
return
subjectsb
.
toString
();
}
private
boolean
isMocridEquals
(
@ModelAttribute
(
REQUEST_STATUS
)
RequestStatus
requestStatus
,
Model
model
,
List
<
RequestStatus
>
mrsList
)
{
boolean
boo
=
false
;
for
(
RequestStatus
mrs:
mrsList
){
if
(
mrs
.
getmocrid
()
==
requestStatus
.
getmocrid
()){
model
.
addAttribute
(
REQUEST_STATUS
,
mrs
);
boo
=
true
;
}
}
return
boo
;
}
public
void
commentAndSendMail
(
UserInfo
userinfo
,
String
subject
,
String
text
)
throws
Exception
{
Address
[]
toAddress
=
{
new
InternetAddress
(
userinfo
.
getEmail
())};
mailSender
.
sendMail
(
userinfo
.
getUsername
(),
userinfo
.
getPassword
(),
userinfo
.
getEmail
(),
toAddress
,
subject
,
text
);
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/web/UserInfoFormController.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.web
;
package
com.spring.mvc.mini.web
;
import
javax.mail.Address
;
import
javax.mail.Address
;
...
@@ -78,3 +79,87 @@ public class UserInfoFormController {
...
@@ -78,3 +79,87 @@ public class UserInfoFormController {
}
}
}
}
=======
package
com.spring.mvc.mini.web
;
import
javax.mail.Address
;
import
javax.mail.MessagingException
;
import
javax.mail.internet.AddressException
;
import
javax.mail.internet.InternetAddress
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.mvc.extensions.ajax.AjaxUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.SessionAttributes
;
import
org.springframework.web.context.request.WebRequest
;
import
org.springframework.web.servlet.mvc.support.RedirectAttributes
;
import
com.spring.mvc.mini.mail.MailSender
;
import
com.spring.mvc.mini.pojo.UserInfo
;
@Controller
@RequestMapping
(
"/userinfoform"
)
@SessionAttributes
(
"userinfo"
)
public
class
UserInfoFormController
{
private
static
final
String
MESSAGE
=
"message"
;
@Autowired
private
MailSender
ms
;
@ModelAttribute
public
void
ajaxAttribute
(
WebRequest
request
,
Model
model
)
{
model
.
addAttribute
(
"ajaxRequest"
,
AjaxUtils
.
isAjaxRequest
(
request
));
}
@ModelAttribute
(
"userinfo"
)
public
UserInfo
createUserinfo
()
{
return
new
UserInfo
();
}
@RequestMapping
(
method
=
RequestMethod
.
GET
)
public
void
userinfoForm
()
{
}
@RequestMapping
(
method
=
RequestMethod
.
POST
)
public
String
submit
(
UserInfo
userinfo
,
@ModelAttribute
(
"ajaxRequest"
)
boolean
ajaxRequest
,
Model
model
,
RedirectAttributes
redirectAttrs
)
{
try
{
loginAndSendMail
(
userinfo
);
}
catch
(
Exception
e
)
{
model
.
addAttribute
(
MESSAGE
,
"Login Failed:"
+
e
.
toString
());
return
null
;
}
String
message
=
"Login Successful, Click ObjecClassForm to continue."
;
model
.
addAttribute
(
"userinfo"
,
userinfo
);
if
(
ajaxRequest
)
{
model
.
addAttribute
(
MESSAGE
,
message
);
return
null
;
}
else
{
redirectAttrs
.
addFlashAttribute
(
MESSAGE
,
message
);
return
"redirect:/"
;
}
}
private
void
loginAndSendMail
(
UserInfo
userinfo
)
throws
Exception
{
String
subject
=
"Login successfully to mvc mini"
;
String
text
=
"Welcome you,"
+
userinfo
.
getUsername
()+
"!\r\nYou can reserve the object classes now."
;
Address
[]
toAddress
=
{
new
InternetAddress
(
userinfo
.
getEmail
())};
ms
.
sendMail
(
userinfo
.
getUsername
(),
userinfo
.
getPassword
(),
userinfo
.
getEmail
(),
toAddress
,
subject
,
text
);
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
src/main/java/com/spring/mvc/mini/xml/ObjectClassXMLPaser.java
浏览文件 @
d6c99332
<<<<<<<
HEAD
package
com.spring.mvc.mini.xml
;
package
com.spring.mvc.mini.xml
;
import
com.spring.mvc.mini.pojo.ObjectClass
;
import
com.spring.mvc.mini.pojo.ObjectClass
;
...
@@ -143,3 +144,151 @@ public class ObjectClassXMLPaser {
...
@@ -143,3 +144,151 @@ public class ObjectClassXMLPaser {
}
}
}
}
=======
package
com.spring.mvc.mini.xml
;
import
com.spring.mvc.mini.pojo.ObjectClass
;
import
com.spring.mvc.mini.svn.SVNHandler
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.w3c.dom.*
;
import
javax.xml.parsers.DocumentBuilder
;
import
javax.xml.parsers.DocumentBuilderFactory
;
import
javax.xml.transform.Transformer
;
import
javax.xml.transform.TransformerFactory
;
import
javax.xml.transform.dom.DOMSource
;
import
javax.xml.transform.stream.StreamResult
;
import
java.io.File
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
import
java.util.ArrayList
;
import
java.util.List
;
@Component
public
class
ObjectClassXMLPaser
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
ObjectClassXMLPaser
.
class
);
@Value
(
"${path.xml}"
)
private
String
xmlPath
;
@Autowired
private
SVNHandler
svnHandler
;
public
List
<
ObjectClass
>
objectClassMapping
()
throws
Exception
{
LOGGER
.
info
(
"Start to checkout"
);
svnHandler
.
svnCheckout
();
DocumentBuilderFactory
factory
=
DocumentBuilderFactory
.
newInstance
();
DocumentBuilder
builder
=
factory
.
newDocumentBuilder
();
File
objectClassesFile
=
new
File
(
xmlPath
);
Document
document
=
builder
.
parse
(
objectClassesFile
);
List
<
ObjectClass
>
objectClasses
=
new
ArrayList
<>();
NodeList
nodeList
=
document
.
getDocumentElement
().
getChildNodes
();
ObjectClass
objectClass
=
null
;
int
commentcount
=
0
;
int
elementcount
=
0
;
for
(
int
i
=
0
;
i
<
nodeList
.
getLength
();
i
++)
{
Node
node
=
nodeList
.
item
(
i
);
if
(
node
instanceof
Comment
)
{
objectClass
=
setCommentToObject
((
Comment
)
node
);
commentcount
++;
}
if
(
node
instanceof
Element
)
{
setElementToObject
(
objectClass
,
(
Element
)
node
);
elementcount
++;
objectClasses
.
add
(
objectClass
);
}
}
LOGGER
.
debug
(
"commentcount is:"
+
commentcount
);
LOGGER
.
debug
(
"elementcount is:"
+
elementcount
);
return
objectClasses
;
}
private
static
ObjectClass
setCommentToObject
(
Comment
node
)
{
ObjectClass
objectClass
;
objectClass
=
new
ObjectClass
();
objectClass
.
setComment
(
node
.
getData
());
return
objectClass
;
}
private
static
void
setElementToObject
(
ObjectClass
objectClass
,
Element
node
)
{
objectClass
.
setId
(
node
.
getAttribute
(
"id"
));
objectClass
.
setAbbreviation
(
node
.
getAttribute
(
"abbrev"
));
objectClass
.
setIntclass
(
Integer
.
parseInt
(
node
.
getAttribute
(
"intclass"
)));
objectClass
.
setName
(
node
.
getAttribute
(
"name"
));
objectClass
.
setParents
(
node
.
getAttribute
(
"parents"
));
objectClass
.
setPackageName
(
node
.
getAttribute
(
"adaID"
));
}
public
void
AddObjectClass
(
ObjectClass
objectClass
)
{
try
{
DocumentBuilderFactory
factory
=
DocumentBuilderFactory
.
newInstance
();
DocumentBuilder
builder
=
factory
.
newDocumentBuilder
();
File
objectClassesFile
=
new
File
(
xmlPath
);
Document
document
=
builder
.
parse
(
objectClassesFile
);
Comment
c
=
document
.
createComment
(
objectClass
.
getComment
());
document
.
getDocumentElement
().
appendChild
(
c
);
document
.
getDocumentElement
().
appendChild
(
getElementOfObjectClass
(
objectClass
,
document
));
TransformerFactory
transformerFactory
=
TransformerFactory
.
newInstance
();
Transformer
transformer
=
transformerFactory
.
newTransformer
();
DOMSource
source
=
new
DOMSource
(
document
);
StreamResult
result
=
new
StreamResult
(
new
File
(
xmlPath
));
transformer
.
transform
(
source
,
result
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
toString
());
}
}
private
static
Element
getElementOfObjectClass
(
ObjectClass
objectClass
,
Document
document
)
{
Element
e
=
document
.
createElement
(
"objclass"
);
e
.
setAttribute
(
"id"
,
objectClass
.
getId
());
e
.
setAttribute
(
"intclass"
,
String
.
valueOf
(
objectClass
.
getIntclass
()));
e
.
setAttribute
(
"abbrev"
,
objectClass
.
getAbbreviation
());
e
.
setAttribute
(
"adaID"
,
objectClass
.
getPackageName
());
e
.
setAttribute
(
"name"
,
objectClass
.
getName
());
e
.
setAttribute
(
"parents"
,
objectClass
.
getParents
());
return
e
;
}
public
byte
[]
getTextConent
()
throws
Exception
{
LOGGER
.
info
(
"Start to checkout"
);
svnHandler
.
svnCheckout
();
Path
path
=
Paths
.
get
(
xmlPath
);
return
Files
.
readAllBytes
(
path
);
}
}
>>>>>>>
158
cee89e79a15fb22fc10af26bd6a164bf0bb02
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录