diff --git a/README.md b/README.md
index 16a08ee5634ed980a866f8f26e93a29243e1a23a..dc60a74df7b48998fec2ee1ed77c191c506f3ef3 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
spring-mvc-test是一个完整的,轻量、简单的Java项目,基于Spring MVC.
里面有基本的增删改查的功能。而且无需修改任何内容,就可以直接跑起来。
下面是Spring MVC的Guide页面,这个项目很多是基于它编写的。
@@ -80,3 +81,91 @@ If you want to deploy this project to Linux server, you might need to edit conf
$ spring-oss-mini\resources\application.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:
+
+ $ 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=] (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:
+
+ $ spring-oss-mini\src\main\resources\logback.xml
+ $ spring-oss-mini\resources\application.properties
+
+
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/git/GitHandler.java b/src/main/java/com/spring/mvc/mini/git/GitHandler.java
index 43cf2f2511f3faa75d2a0bcb442d1936ef775901..042866e5465f807296ccc2364caad375c93c252f 100644
--- a/src/main/java/com/spring/mvc/mini/git/GitHandler.java
+++ b/src/main/java/com/spring/mvc/mini/git/GitHandler.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.git;
import com.jcraft.jsch.JSch;
@@ -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();
+ }
+
+ }
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/json/RequestStatusJsonParser.java b/src/main/java/com/spring/mvc/mini/json/RequestStatusJsonParser.java
index e78b0a07ecf7145afafc0e93b5fdea853fee0f78..7be8308f80f3268f0fe8dc575c8a857ec9a022b7 100644
--- a/src/main/java/com/spring/mvc/mini/json/RequestStatusJsonParser.java
+++ b/src/main/java/com/spring/mvc/mini/json/RequestStatusJsonParser.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.json;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -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 list = this.readStatus();
+
+ List objectClasses = list.get(list.size() - 1).getObjectClassesType().getObjectClasses();
+
+ return objectClasses.get(objectClasses.size() - 1).getIntclass();
+ }
+
+ public int getLatestmocrid() {
+
+ List 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 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();
+ }
+
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/pojo/ObjectClassesType.java b/src/main/java/com/spring/mvc/mini/pojo/ObjectClassesType.java
index d4536ac832be1f206c786c0416cac9e2e9548daf..e88909cad70b797d26332dd6c3255b54ebcd7971 100644
--- a/src/main/java/com/spring/mvc/mini/pojo/ObjectClassesType.java
+++ b/src/main/java/com/spring/mvc/mini/pojo/ObjectClassesType.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.pojo;
import java.util.ArrayList;
@@ -23,3 +24,30 @@ public class ObjectClassesType {
return "ObjectClassesType [objectClasses=" + sb + "]";
}
}
+=======
+package com.spring.mvc.mini.pojo;
+
+import java.util.List;
+
+public class ObjectClassesType {
+
+ private List objectClasses;
+
+ public List getObjectClasses() {
+ return objectClasses;
+ }
+
+ public void setObjectClasses(List objectClasses) {
+ this.objectClasses = objectClasses;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ for (ObjectClass item : objectClasses) {
+ sb.append(item);
+ }
+ return "ObjectClassesType [objectClasses=" + sb + "]";
+ }
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/pojo/RequestStatusListType.java b/src/main/java/com/spring/mvc/mini/pojo/RequestStatusListType.java
index 11bc186612edf7559b99c4460db24c15c95b5ce2..1d8cdee255907d173f25ce94cfe09ffe301d8a66 100644
--- a/src/main/java/com/spring/mvc/mini/pojo/RequestStatusListType.java
+++ b/src/main/java/com/spring/mvc/mini/pojo/RequestStatusListType.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.pojo;
import java.util.ArrayList;
@@ -26,3 +27,33 @@ public class RequestStatusListType {
}
+=======
+package com.spring.mvc.mini.pojo;
+
+import java.util.List;
+
+public class RequestStatusListType {
+
+ private List requestStatuses;
+
+ public List getRequestStatuses() {
+ return requestStatuses;
+ }
+
+ public void setRequestStatuses(List requestStatuses) {
+ this.requestStatuses = requestStatuses;
+ }
+
+ @Override
+ public String toString() {
+
+ StringBuilder s = new StringBuilder();
+ for (RequestStatus r: requestStatuses){
+ s.append(r);
+ }
+ return "RequestStatusListType [requestStatuses=" + s + "]";
+ }
+
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/schedule/ScheduleFileUpdator.java b/src/main/java/com/spring/mvc/mini/schedule/ScheduleFileUpdator.java
index 65a94224e7c809a4b7a3e1026b08ad1aae95cd27..63a754dff3ae47f0cc83b55a6142e361ac5ff020 100644
--- a/src/main/java/com/spring/mvc/mini/schedule/ScheduleFileUpdator.java
+++ b/src/main/java/com/spring/mvc/mini/schedule/ScheduleFileUpdator.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.schedule;
import java.util.ArrayList;
@@ -102,3 +103,109 @@ public class ScheduleFileUpdator {
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 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 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);
+ }
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/svn/SVNHandler.java b/src/main/java/com/spring/mvc/mini/svn/SVNHandler.java
index 9926cb1660449e856d5ffb4b240d5f22c89823bb..bfd5275ce751a39ce65263f9fef236fff0fdbd77 100644
--- a/src/main/java/com/spring/mvc/mini/svn/SVNHandler.java
+++ b/src/main/java/com/spring/mvc/mini/svn/SVNHandler.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.svn;
import org.slf4j.Logger;
@@ -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");
+ }
+ }
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/validation/ObjectClassDataValidator.java b/src/main/java/com/spring/mvc/mini/validation/ObjectClassDataValidator.java
index 7e360604d8113a473096f8e0965563bd08df66b7..7a3ccee2f2e958feba6ecf50e16952bd5d0e8acc 100644
--- a/src/main/java/com/spring/mvc/mini/validation/ObjectClassDataValidator.java
+++ b/src/main/java/com/spring/mvc/mini/validation/ObjectClassDataValidator.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.validation;
import java.util.ArrayList;
@@ -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 objclsListFormIn) throws Exception{
+
+ List 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.");
+ }
+ }
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/web/ObjectClassFormController.java b/src/main/java/com/spring/mvc/mini/web/ObjectClassFormController.java
index 0e88e06e951f25acfe3636d7cc6713fed48726ac..a536af010b4aa40ce573a3d48615963bd7e04334 100644
--- a/src/main/java/com/spring/mvc/mini/web/ObjectClassFormController.java
+++ b/src/main/java/com/spring/mvc/mini/web/ObjectClassFormController.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.web;
import java.text.SimpleDateFormat;
@@ -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 objectClasses = new ArrayList();
+ 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 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 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 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 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 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);
+ }
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/web/ObjectClassesController.java b/src/main/java/com/spring/mvc/mini/web/ObjectClassesController.java
index 112af6e3676f5869ac65a69de293c575fd1605bd..e1665c4defcd5bcdd0eec440ccd184b7d92d8b09 100644
--- a/src/main/java/com/spring/mvc/mini/web/ObjectClassesController.java
+++ b/src/main/java/com/spring/mvc/mini/web/ObjectClassesController.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.web;
import java.util.ArrayList;
@@ -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 ojbclslist = getObjectClasses();
+
+ Collections.reverse(ojbclslist);
+ PagedListHolder productList = new PagedListHolder(ojbclslist);
+ productList.setPageSize(100);
+
+ model.addAttribute(PRODUCT_LIST, productList);
+ return null;
+ }
+
+ private List getObjectClasses() {
+ List 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> 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 searchOjbclslist = null;
+ if (searchcritical != null) {
+
+ List ojbclslist = getObjectClasses();
+
+ searchOjbclslist = new ArrayList();
+ for (ObjectClass ojbcls : ojbclslist) {
+ if (ojbcls.match(searchcritical)) {
+ searchOjbclslist.add(ojbcls);
+ }
+ }
+ }
+
+ PagedListHolder> 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> 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;
+ }
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/web/RequestStatusController.java b/src/main/java/com/spring/mvc/mini/web/RequestStatusController.java
index 756bdd07f0aa361525be766fffd1e5cd0e233ce8..125d00e3d51fb52176c94b3e6a438206c0b08cb5 100644
--- a/src/main/java/com/spring/mvc/mini/web/RequestStatusController.java
+++ b/src/main/java/com/spring/mvc/mini/web/RequestStatusController.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.web;
import java.util.ArrayList;
@@ -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 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 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 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 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 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);
+ }
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/web/UserInfoFormController.java b/src/main/java/com/spring/mvc/mini/web/UserInfoFormController.java
index e3964ccc9a8c4bc94f3f78b7969193147554d894..2689371c0021e9ce0b44801418ef56388398c428 100644
--- a/src/main/java/com/spring/mvc/mini/web/UserInfoFormController.java
+++ b/src/main/java/com/spring/mvc/mini/web/UserInfoFormController.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.web;
import javax.mail.Address;
@@ -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);
+ }
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02
diff --git a/src/main/java/com/spring/mvc/mini/xml/ObjectClassXMLPaser.java b/src/main/java/com/spring/mvc/mini/xml/ObjectClassXMLPaser.java
index 371f58eba6f0fbf0579a2bbcecafbcd48747e201..2f36fbb8f6cb227b2ce6c4243d71d4e595ba7924 100644
--- a/src/main/java/com/spring/mvc/mini/xml/ObjectClassXMLPaser.java
+++ b/src/main/java/com/spring/mvc/mini/xml/ObjectClassXMLPaser.java
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
package com.spring.mvc.mini.xml;
import com.spring.mvc.mini.pojo.ObjectClass;
@@ -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 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 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);
+
+ }
+
+}
+>>>>>>> 158cee89e79a15fb22fc10af26bd6a164bf0bb02