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