001    package org.kuali.ole.ingest.controller;
002    
003    /**
004     * Created by IntelliJ IDEA.
005     * User: balakumaranm
006     * Date: 3/28/12
007     * Time: 3:24 PM
008     * To change this template use File | Settings | File Templates.
009     */
010    
011    import org.apache.log4j.Logger;
012    import org.kuali.ole.OLEConstants;
013    import org.kuali.ole.ingest.ProfileBuilder;
014    import org.kuali.ole.ingest.ProfileXMLSchemaValidator;
015    import org.kuali.ole.ingest.form.ProfileBuilderForm;
016    import org.kuali.rice.krad.web.controller.UifControllerBase;
017    import org.kuali.rice.krad.web.form.UifFormBase;
018    import org.springframework.stereotype.Controller;
019    import org.springframework.validation.BindingResult;
020    import org.springframework.web.bind.annotation.ModelAttribute;
021    import org.springframework.web.bind.annotation.RequestMapping;
022    import org.springframework.web.multipart.MultipartFile;
023    import org.springframework.web.servlet.ModelAndView;
024    
025    import javax.servlet.http.HttpServletRequest;
026    import javax.servlet.http.HttpServletResponse;
027    
028    
029    /**
030     * ProfileBuilderController is the controller class for Profile Builder Controller
031     */
032    @Controller
033    @RequestMapping(value = "/profilebuildercontroller")
034    public class ProfileBuilderController
035            extends UifControllerBase {
036        /**
037         * @see org.kuali.rice.krad.web.controller.UifControllerBase#createInitialForm(javax.servlet.http.HttpServletRequest)
038         */
039        private static final Logger LOG = Logger.getLogger(ProfileBuilderController.class);
040    
041        /**
042         * This method will return instance of ProfileBuilderForm
043         * @param request
044         * @return  ProfileBuilderForm
045         */
046    
047        @Override
048        protected ProfileBuilderForm createInitialForm(HttpServletRequest request) {
049            return new ProfileBuilderForm();
050        }
051    
052        /**
053         *  This method will take the initial request when click on ProfileBuilder controller.
054         * @param form
055         * @param result
056         * @param request
057         * @param response
058         * @return  ModelAndView
059         */
060        @Override
061        @RequestMapping(params = "methodToCall=start")
062        public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
063                                  HttpServletRequest request, HttpServletResponse response) {
064            ProfileBuilderForm profileBuilderForm = (ProfileBuilderForm) form;
065            return super.start(profileBuilderForm, result, request, response);
066        }
067    
068        /**
069         *  This method persist the data from ProfileBuilderXml file into database after uploading the ProfileBuilderXml.
070         * @param form
071         * @param result
072         * @param request
073         * @param response
074         * @return  ModelAndView
075         * @throws Exception
076         */
077        @RequestMapping(params = "methodToCall=upload")
078        public ModelAndView upload(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
079                                   HttpServletRequest request, HttpServletResponse response) throws Exception {
080            ProfileBuilderForm profileBuilderForm = (ProfileBuilderForm) form;
081            ProfileBuilder profileBuilder = new ProfileBuilder();
082            ProfileXMLSchemaValidator profileXMLSchemaValidator=new ProfileXMLSchemaValidator();
083            MultipartFile multipartFile = profileBuilderForm.getProfileFile();
084            if (validateFile(multipartFile.getOriginalFilename())) {
085                String fileContent = new String(multipartFile.getBytes());
086                try {
087                    boolean validXML=profileXMLSchemaValidator.validateContentsAgainstSchema(multipartFile.getInputStream());
088                    if(!validXML){
089                        profileBuilderForm.setMessage(OLEConstants.PROFILE_BUILDER_INVALID_SCHEMA);
090                        return super.start(profileBuilderForm, result, request, response);
091                    }
092                    profileBuilder.persistKRMSProfileFromFileContent(fileContent);
093                    profileBuilderForm.setMessage(OLEConstants.PROFILE_BUILDER_SUCCESS);
094                } catch (Exception profileBuilderException) {
095                    profileBuilderForm.setMessage(OLEConstants.PROFILE_BUILDER_FAILURE);
096                    LOG.error("Failed to upload Profile builder.", profileBuilderException);
097                }
098            } else {
099                profileBuilderForm.setMessage(OLEConstants.PROFILE_BUILDER_SELECT_FILE);
100            }
101            return super.start(profileBuilderForm, result, request, response);
102        }
103    
104        /**
105         *  This method validate the xml file type.
106         * @param inputFile
107         * @return  boolean
108         */
109         public boolean validateFile(String inputFile) {
110            return (inputFile.contains(".xml") ? true:false);
111        }
112    
113    
114    }
115