/*
* Licensed to csti consulting
* You may obtain a copy of the License at
*
* http://www.csticonsulting.com
* Copyright (c) 2006-Aug 25, 2010 Consultation CS-TI inc.
*
* 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 com.salesmanager.checkout.files;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.salesmanager.checkout.CheckoutBaseAction;
import com.salesmanager.core.CoreException;
import com.salesmanager.core.constants.ErrorConstants;
import com.salesmanager.core.entity.merchant.MerchantStore;
import com.salesmanager.core.entity.orders.Order;
import com.salesmanager.core.entity.orders.OrderProduct;
import com.salesmanager.core.entity.orders.OrderProductDownload;
import com.salesmanager.core.module.model.application.DownloadFileModule;
import com.salesmanager.core.service.ServiceFactory;
import com.salesmanager.core.service.merchant.MerchantService;
import com.salesmanager.core.service.order.OrderException;
import com.salesmanager.core.service.order.OrderService;
import com.salesmanager.core.util.FileUtil;
import com.salesmanager.core.util.SpringUtil;
import com.salesmanager.core.util.www.SessionUtil;
public class FilesAction extends CheckoutBaseAction {
private Logger log = Logger.getLogger(FilesAction.class);
private Collection downloadFiles;
private InputStream inputStream;
private String fileName;
private String fileMessage;
private String orderId = null;
private Order order = null;
public InputStream getInputStream() {
return inputStream;
}
public String accessUrl() {
try {
// parse file download request
String fileId = getServletRequest().getParameter("fileId");
String lang = getServletRequest().getParameter("lang");
if (StringUtils.isBlank(fileId)) {
List msg = new ArrayList();
msg.add(getText("error.downloadurl.invalid"));
super.setActionErrors(msg);
return "GENERICERROR";
}
Map fileInfo = FileUtil.getUrlTokens(fileId);
String order = (String) fileInfo.get("ID");
String date = (String) fileInfo.get("DATE");
orderId = order;
// Compare the date
Date today = new Date();
DateFormat d = new SimpleDateFormat("yyyy-MM-dd");
Date dt = null;
dt = d.parse(date);
if (dt.before(new Date(today.getTime()))) {
// expired
CoreException excpt = new CoreException(
ErrorConstants.DELAY_EXPIRED);
throw excpt;
}
} catch (Exception e) {
if (e instanceof CoreException) {
String message = getText("error.downloadurl.expired");
this.setFileMessage(message);
return "DELAYEXPIRED";
} else {
log.error(e);
super.setTechnicalMessage();
return "GENERICERROR";
}
}
return SUCCESS;
}
public String viewFiles() {
try {
if (this.getOrderId() == null) {
super.setTechnicalMessage();
return "GENERICERROR";
}
// need MerchantStore, create a Locale
OrderService oservice = (OrderService) ServiceFactory
.getService(ServiceFactory.OrderService);
order = oservice.getOrder(Long.parseLong(this.getOrderId()));
Set products = order.getOrderProducts();
Iterator i = products.iterator();
Map productsMap = new HashMap();
List opList = new ArrayList();
while (i.hasNext()) {
OrderProduct op = (OrderProduct) i.next();
productsMap.put(op.getOrderProductId(), op);
opList.add(op);
}
// MerchantStore
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
MerchantStore store = mservice.getMerchantStore(order
.getMerchantId());
SessionUtil.setMerchantStore(store, getServletRequest());
getServletRequest().setAttribute("MERCHANT_STORE", store);
Set st1 = order.getOrderProducts();
if (st1 != null && st1.size() > 0) {
Iterator opit = st1.iterator();
while (opit.hasNext()) {
OrderProduct op = (OrderProduct) opit.next();
if (op.getDownloads() != null
&& op.getDownloads().size() > 0) {
// check if download expired or downloadcount==0
Set opdSet = op.getDownloads();
downloadFiles = opdSet;
if (downloadFiles != null && downloadFiles.size() > 0) {
Iterator dfIterator = downloadFiles.iterator();
while (dfIterator.hasNext()) {
OrderProductDownload opd = (OrderProductDownload) dfIterator
.next();
OrderProduct opp = (OrderProduct) productsMap
.get(opd.getOrderProductId());
if (opp != null) {
opd.setProductName(opp.getProductName());
} else {
opd.setProductName(opd
.getOrderProductFilename());
}
}
}
}
}
}
} catch (Exception e) {
if (e instanceof CoreException) {
String message = getText("error.downloadurl.expired");
this.setFileMessage(message);
return "DELAYEXPIRED";
} else {
log.error(e);
super.setTechnicalMessage();
return "GENERICERROR";
}
}
return SUCCESS;
}
public String getFile() {
try {
String mod = getServletRequest().getParameter("mod");
String fileid = getServletRequest().getParameter("fileId");
if (fileid == null) {
log.error("fileId is null !!!");
} else {
DownloadFileModule module = (DownloadFileModule) SpringUtil
.getBean(mod);
if (mod == null) {
log.error("Mod is null from the URL");
super.setTechnicalMessage();
return "GENERICERROR";
}
inputStream = module.getFileInputStream(getServletRequest());
fileName = module.getFileName();
}
} catch (Exception e) {
if (e instanceof OrderException) {
String message = getText("label.order.download.maximumdownloadreached");
this.setFileMessage(message);
return "MAXIMUMDOWNLOADREACHED";
} else {
log.error(e);
super.setTechnicalMessage();
return "GENERICERROR";
}
}
return SUCCESS;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileMessage() {
return fileMessage;
}
public void setFileMessage(String fileMessage) {
this.fileMessage = fileMessage;
}
public Collection getDownloadFiles() {
return downloadFiles;
}
public void setDownloadFiles(Collection downloadFiles) {
this.downloadFiles = downloadFiles;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
}