package com.multysite.controller.admin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.NamespaceManager;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
import com.google.appengine.api.images.ImagesService;
import com.google.appengine.api.images.ImagesServiceFactory;
import com.multysite.entity.Category;
import com.multysite.entity.News;
import com.multysite.entity.Tag;
import com.multysite.model.CategoryModel;
import com.multysite.model.NewsModel;
import com.multysite.model.TagModel;
import com.multysite.util.IdUniqueHelper;
import com.multysite.util.Setting;
import com.multysite.util.StringHelper;
@SuppressWarnings("serial")
public class AddNewsServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(AddNewsServlet.class
.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
try {
resp.setCharacterEncoding("utf-8");
if (!NamespaceManager.get().equals(Setting.getGeneralNamespace())) {
CategoryModel cateModel = new CategoryModel();
cateModel.prepareAll();
if (cateModel.getListResult().size() == 0) {
List<Category> listCate = new ArrayList<Category>();
Category cate = new Category();
cate.setTitle("Uncategory");
cate.setAlias("uncategory");
cate.setLevel(1);
cate.setParentAlias("");
CategoryModel.insert(cate);
listCate.add(cate);
req.setAttribute("listCategory", listCate);
} else {
req.setAttribute("listCategory", cateModel.getListResult());
}
cateModel.prepareAllParrentList();
req.setAttribute("listParentCategory",
cateModel.getListResult());
req.setAttribute("action", "add");
req.setAttribute("obj", new News());
req.getRequestDispatcher("/admin/pages/news-form.jsp").forward(
req, resp);
} else {
resp.getWriter().println("Invalid Url");
}
} catch (ServletException e) {
e.printStackTrace();
log.warning(e.toString());
resp.sendError(4000,
"Website is down for maintenance. We are sorry for the inconvenience !");
}
}
@SuppressWarnings("deprecation")
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
BlobstoreService blobService = BlobstoreServiceFactory
.getBlobstoreService();
ImagesService imageService = ImagesServiceFactory.getImagesService();
try {
String action = req.getParameter("action");
String title = req.getParameter("title");
String content = req.getParameter("content");
String source = req.getParameter("source");
String category = req.getParameter("category");
String tags = req.getParameter("tags");
News obj = new News();
if (action != null && action.equals("add")) {
obj.setTitle(title);
obj.setAlias(StringHelper.replaceVietnamese(title));
News checkObj = NewsModel.getById(obj.getAlias());
if (checkObj != null) {
obj.setAlias(obj.getAlias() + "-"
+ IdUniqueHelper.getId().toLowerCase());
}
obj.setContent(content);
obj.setSource(source);
/*
* process thumb image
*/
try {
Map<String, List<BlobKey>> blobs = blobService
.getUploads(req);
List<BlobKey> blobKeys = blobs.get("img");
if (blobKeys != null && blobKeys.size() > 0) {
for (BlobKey blobKey : blobKeys) {
byte[] arr = blobService.fetchData(blobKey, 0, 20);
if (arr.length > 0) {
obj.setThumb(imageService
.getServingUrl(blobKey));
}
}
}
} catch (Exception e) {
}
/*
* process category
*/
Category cate = CategoryModel.getById(category);
if (cate != null) {
obj.setCategory(cate.getTitle());
obj.setCategoryAlias(cate.getAlias());
}
/*
* process tag
*/
try {
ArrayList<String> listTag = new ArrayList<String>();
String[] splitTag = tags.split(",");
for (String string : splitTag) {
String tagAlias = StringHelper.replaceVietnamese(string
.trim());
Tag tag = TagModel.getById(tagAlias);
if (tag != null) {
List<News> listNews = tag.recoverListNews();
for (int i = 0; i < listNews.size(); i++) {
if (listNews.get(i).getAlias()
.equals(obj.getAlias())) {
listNews.remove(i);
}
}
listNews.add(obj);
tag.tranformListNews(listNews);
TagModel.insert(tag);
} else {
tag = new Tag();
tag.setAlias(tagAlias);
tag.setTitle(string);
List<News> listNews = new ArrayList<News>();
listNews.add(obj);
tag.tranformListNews(listNews);
TagModel.insert(tag);
}
String objTag = tagAlias + "," + string;
listTag.add(objTag);
}
obj.setTags(listTag);
} catch (Exception e) {
}
NewsModel.insert(obj);
resp.sendRedirect("/admin/news/add");
}
} catch (Exception e) {
e.printStackTrace();
log.warning(e.toString());
resp.sendError(4000,
"Website is down for maintenance. We are sorry for the inconvenience !");
}
}
}