/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.vlabs.umt.ui.admin;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
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.multipart.MultipartFile;
import cn.vlabs.umt.common.util.PageBean;
import cn.vlabs.umt.common.xls.RecordFile;
import cn.vlabs.umt.common.xls.UserVO;
import cn.vlabs.umt.common.xls.UserXLSParser;
import cn.vlabs.umt.common.xls.XLSException;
import cn.vlabs.umt.services.user.UserService;
import cn.vlabs.umt.services.user.bean.User;
@Controller
@RequestMapping("/admin/batchCreate.do")
@Deprecated
public class BatchCreateController {
private static final Logger log = Logger.getLogger(BatchCreateController.class);
private static final int recordPerFile=20;
@Autowired
private UserService us;
@RequestMapping(params="act=save",method = RequestMethod.POST)
public String save(HttpServletRequest request, HttpServletResponse response,@RequestParam(value="file", required=false) MultipartFile formfile) {
if (formfile!=null){
try {
readAllToUser(request.getSession(), formfile, request.getServletContext());
} catch (Exception e) {
request.setAttribute("message", e.getMessage());
return "/admin/displayuser";
}
}
return "redirect:/admin/batchCreate.do?act=changePage";
}
@RequestMapping(params="act=changePage")
public String changePage(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
Integer total = (Integer)session.getAttribute("batch.total");
RecordFile records = (RecordFile)session.getAttribute("batch.records");
if (total==null || records==null){
return null;
}
PageBean bean = new PageBean(total);
String page = request.getParameter("page");
try{
bean.setCurrentPage(Integer.parseInt(page));
}catch(NumberFormatException e){
bean.setCurrentPage(0);
}
try {
bean.setItems(records.load(bean.getCurrentPage()));
request.setAttribute("PageBean", bean);
return "/admin/displayuser";
} catch (IOException e) {
request.setAttribute("message", e.getMessage());
return "/admin/displayuser";
}
}
private void checkExist(List<UserVO> users, UserService us){
String[] usernames = new String[users.size()];
for (int i=0;i<users.size();i++){
usernames[i]=users.get(i).getUmtId();
}
Set<String> exists= us.isExist(usernames);
for (UserVO user:users){
if (exists.contains(user.getUmtId())){
user.setExists(true);
}else{
user.setExists(false);
}
}
}
private void cleanup(HttpServletRequest request) {
HttpSession session = request.getSession();
RecordFile records = (RecordFile)session.getAttribute("batch.records");
if (records!=null){
String datadir=records.getDatadir();
try {
FileUtils.deleteDirectory(new File(datadir));
} catch (IOException e) {
log.info("删除临时文件失败:"+e.getMessage());
}
session.removeAttribute("batch.records");
session.removeAttribute("batch.total");
}
}
@RequestMapping(params="act=create")
public String create(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
RecordFile records = (RecordFile)session.getAttribute("batch.records");
for (int i=0;i<records.getPageCount();i++){
try {
ArrayList<UserVO> users = records.load(i);
ArrayList<User> toCreate=new ArrayList<User>();
for (UserVO user:users){
if (!user.isExists()){
toCreate.add(user);
}
}
us.create(toCreate);
} catch (IOException e) {
}
}
cleanup(request);
return "/admin/batch";
}
@RequestMapping
public String service(HttpServletRequest request, HttpServletResponse response) {
return "/admin/batch";
}
@RequestMapping(params="act=discard")
public String discard(HttpServletRequest request, HttpServletResponse response) {
cleanup(request);
return "/admin/batch";
}
private void readAllToUser(HttpSession session, MultipartFile file, ServletContext context) throws IOException, XLSException{
RecordFile records = new RecordFile(context);
int realsize = 0;
InputStream in = null;
try{
in = file.getInputStream();
UserXLSParser parser = new UserXLSParser(in);
int total = parser.getCount();
int page = total/recordPerFile+((total%recordPerFile)>0?1:0);
for (int i=0;i<page;i++){
List<UserVO> users = parser.readUsers(i*recordPerFile, recordPerFile);
checkExist(users, us);
records.save(i, users);
realsize = realsize+users.size();
}
}finally{
if (in!=null)
{
in.close();
}
}
records.setPageCount(realsize/recordPerFile+((realsize%recordPerFile)>0?1:0));
session.setAttribute("batch.records", records);
session.setAttribute("batch.total", realsize);
}
}