package com.vst.webapp.action;
import com.vst.model.BuildingObject;
import com.vst.model.ObjectPhoto;
import com.vst.service.BuildingObjectManager;
import com.vst.service.ObjectPhotoManager;
import com.vst.webapp.util.ImageUtil;
import com.vst.util.FileHelper;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Hibernate;
import org.springframework.validation.BindException;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Locale;
public class ObjectPhotoFormController extends BaseFormController {
private ObjectPhotoManager objectPhotoManager = null;
private BuildingObjectManager buildingObjectManager = null;
public void setBuildingObjectManager(BuildingObjectManager buildingObjectManager) {
this.buildingObjectManager = buildingObjectManager;
}
public void setObjectPhotoManager(ObjectPhotoManager objectPhotoManager) {
this.objectPhotoManager = objectPhotoManager;
}
public ObjectPhotoFormController() {
setCommandName("objectPhoto");
setCommandClass(ObjectPhoto.class);
}
protected Object formBackingObject(HttpServletRequest request)
throws Exception {
if (!isFormSubmission(request)) {
String photoId = request.getParameter("photoId");
ObjectPhoto objectPhoto = null;
String objectId = request.getParameter("objectId");
if (!StringUtils.isEmpty(photoId)) {
objectPhoto = objectPhotoManager.getObjectPhoto(photoId);
objectPhotoManager.evict(objectPhoto);
} else {
objectPhoto = new ObjectPhoto();
}
if (objectId != null) {
objectPhoto.setObjectId(new Integer(objectId));
}
if (request.getParameter("edited") != null) {
request.setAttribute("addition", "?edited=1");
objectPhoto.setEdited(true);
}
objectPhoto.setDocLocation(request.getParameter("docLocation"));
return objectPhoto;
}
if (request.getAttribute("objectPhoto") != null) {
ObjectPhoto objectPhoto = (ObjectPhoto) request.getAttribute("objectPhoto");
objectPhotoManager.evict(objectPhoto);
}
return super.formBackingObject(request);
}
public ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command,
BindException errors)
throws Exception {
if (log.isDebugEnabled()) {
log.debug("entering 'onSubmit' method...");
}
ObjectPhoto objectPhoto = (ObjectPhoto) command;
boolean isNew = (objectPhoto.getPhotoId() == null);
Locale locale = request.getLocale();
if (request.getParameter("delete") != null) {
BuildingObject buildingObject = buildingObjectManager.getBuildingObject(objectPhoto.getObjectId().toString());
buildingObject.getPhotoes().remove(objectPhoto);
objectPhotoManager.removeObjectPhoto(objectPhoto.getPhotoId().toString());
buildingObject.getPhotoes().remove(objectPhoto);
buildingObjectManager.saveBuildingObject(buildingObject);
saveMessage(request, getText("objectPhoto.deleted", locale));
} else {
MultipartHttpServletRequest multipartRequest =
(MultipartHttpServletRequest) request;
CommonsMultipartFile file =
(CommonsMultipartFile) multipartRequest.getFile("file");
if (file.getSize() > 0) {
String fileName = ImageUtil.getUniqueJPEGFile(request);
FileOutputStream fileOutputStream = new FileOutputStream(FileHelper.getCurrentPath(request) + fileName);
fileOutputStream.write(file.getBytes());
fileOutputStream.close();
InputStream imageStream = ImageUtil.scaleImage(new FileInputStream(FileHelper.getCurrentPath(request) + fileName), 400, 400);
fileOutputStream = new FileOutputStream(FileHelper.getCurrentPath(request) + fileName);
byte[] bufer = new byte[62000];
while (imageStream.read(bufer) != -1) {
fileOutputStream.write(bufer);
}
fileOutputStream.close();
objectPhoto.setWayToPhoto(fileName);
objectPhoto.setPhotoBlob(Hibernate.createBlob(new FileInputStream(FileHelper.getCurrentPath(request) + fileName)));
// if (!isNew) {
// objectPhotoManager.evict(objectPhoto);
// }
if (isNew) {
BuildingObject buildingObject = buildingObjectManager.getBuildingObject(objectPhoto.getObjectId().toString());
buildingObject.getPhotoes().add(objectPhoto);
buildingObjectManager.saveBuildingObject(buildingObject);
// objectPhoto.setPhotoPosition(new Integer(buildingObject.getPhotoes().size()));
//
// objectPhotoManager.saveObjectPhoto(objectPhoto);
} else {
objectPhotoManager.evict(objectPhoto);
objectPhotoManager.saveObjectPhoto(objectPhoto);
}
String key = (isNew) ? "objectPhoto.added" : "objectPhoto.updated";
saveMessage(request, getText(key, locale));
}
}
return new ModelAndView("redirect:" + objectPhoto.getDocLocation());
}
}