/**Copyright 2010 Research Studios Austria Forschungsgesellschaft mBH
*
* This file is part of easyrec.
*
* easyrec is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* easyrec is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with easyrec. If not, see <http://www.gnu.org/licenses/>.
*/
package org.easyrec.controller;
import org.easyrec.model.core.ClusterVO;
import org.easyrec.model.core.web.Item;
import org.easyrec.model.core.ItemVO;
import org.easyrec.model.core.web.RemoteTenant;
import org.easyrec.service.core.ClusterService;
import org.easyrec.service.core.ProfileService;
import org.easyrec.service.web.IDMappingService;
import org.easyrec.service.web.ItemService;
import org.easyrec.store.dao.core.ItemDAO;
import org.easyrec.store.dao.web.RemoteTenantDAO;
import org.easyrec.util.core.MessageBlock;
import org.easyrec.util.core.Security;
import org.easyrec.util.core.Web;
import org.easyrec.utils.servlet.ServletUtils;
import org.easyrec.vocabulary.MSG;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* This Controller manages all item operations.
* <p/>
* <p/>
* <p><b>Company: </b>
* SAT, Research Studios Austria</p>
* <p/>
* <p><b>Copyright: </b>
* (c) 2007</p>
* <p/>
* <p><b>last modified:</b><br/>
* $Author: fsalcher $<br/>
* $Date: 2012-03-23 15:35:07 +0100 (Fr, 23 Mär 2012) $<br/>
* $Revision: 18791 $</p>
*
* @author phlavac
* @version <CURRENT PROJECT VERSION>
* @since <PROJECT VERSION ON FILE CREATION>
*/
public class ItemController extends MultiActionController {
private RemoteTenantDAO remoteTenantDAO;
private ItemDAO itemDAO;
private ItemService itemService;
private ClusterService clusterService;
private IDMappingService idMappingService;
private ProfileService profileService;
public void setProfileService(ProfileService profileService) {
this.profileService = profileService;
}
public void setRemoteTenantDAO(RemoteTenantDAO remoteTenantDAO) {
this.remoteTenantDAO = remoteTenantDAO;
}
public void setItemDAO(ItemDAO itemDAO) {
this.itemDAO = itemDAO;
}
public void setItemService(ItemService itemService) {
this.itemService = itemService;
}
public void setClusterService(ClusterService clusterService) {
this.clusterService = clusterService;
}
public void setIdMappingService(IDMappingService idMappingService) {
this.idMappingService = idMappingService;
}
/**
* @param request
* @param action
* @return
*/
private ModelAndView security(HttpServletRequest request, String action) {
ModelAndView mav = new ModelAndView();
if (!Security.isSignedIn(request)) {
return MessageBlock.createSingle(mav, MSG.NOT_SIGNED_IN, action, MSG.ERROR);
}
RemoteTenant r = remoteTenantDAO.get(request);
if (r == null) {
return MessageBlock.createSingle(mav, MSG.TENANT_NOT_EXISTS, action, MSG.ERROR);
}
return mav;
}
/**
* Activates an item.
* call:
* http://localhost:8080/item/activate?tenantId=EASYREC_DEMO&itemId=42
*
* @param request
* @param response
* @return
*/
public ModelAndView activate(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = new ModelAndView();
try {
itemService.activate(request);
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, "deactivate", MSG.SUCCESS);
} catch (Exception e) {
return MessageBlock.createSingle(mav, MSG.ITEM_NOT_EXISTS, "deactivate", MSG.ERROR);
}
}
/**
* Dectivates an item.
* call:
* //http://localhost:8080/item/deactivate?tenantId=EASYREC_DEMO&itemId=42
*
* @param request
* @param response
* @return
*/
public ModelAndView deactivate(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = new ModelAndView();
try {
itemService.deactivate(request);
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, "deactivate", MSG.SUCCESS);
} catch (Exception e) {
return MessageBlock.createSingle(mav, MSG.ITEM_NOT_EXISTS, "deactivate", MSG.ERROR);
}
}
/**
* Return a mav with items to a given itemdescription
*
* @param request
* @param response
* @return
*/
public ModelAndView view(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = security(request, "viewItems");
if (Web.validated(mav)) {
mav.setViewName("easyrec/viewitems");
mav.addObject("items", itemDAO.getItems(remoteTenantDAO.get(request),
ServletUtils.getSafeParameter(request, "itemDescription", ""), 0, 10));
mav.addObject("tenantId", ServletUtils.getSafeParameter(request, "tenantId", ""));
return mav;
} else return mav;
}
/**
* Return a mav with itemdetails to a given itemid
*
* @param request
* @param response
* @return
*/
public ModelAndView viewitemdetails(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = security(request, "viewItemDetails");
if (Web.validated(mav)) {
mav.setViewName("item/itemdetails");
RemoteTenant r = remoteTenantDAO.get(request);
try {
Item item = itemService.get(request);
// create relative urls
Item itemDetailed = new Item(item.getId(), item.getTenantId(), item.getItemId(), item.getItemType(),
item.getDescription(), item.getUrl(), item.getImageUrl(), item.getValue(), item.isActive(),
item.getCreationDate());
itemDetailed.setRelativeImageUrl(r.getUrl());
itemDetailed.setRelativeUrl(r.getUrl());
ItemVO<Integer, Integer> itemVO = idMappingService.convertItem(item);
List<ClusterVO> clusters = clusterService.getClustersForItem(itemVO);
// this string is used to have a unique id for the generated detail box. its used by
// the javascript functions to generate the tabs and load the content to the specific DIVs.
String detailBoxUniqueId = ServletUtils.getSafeParameter(request, "detailBoxUniqueId", "");
boolean editEnabled =
ServletUtils.getSafeParameter(request, "editEnabled", "false").equalsIgnoreCase("true");
String profileXML = profileService.getProfile(item);
mav.addObject("profile", profileXML);
mav.addObject("detailBoxUniqueId", detailBoxUniqueId);
mav.addObject("editEnabled", editEnabled);
mav.addObject("item", itemDetailed);
mav.addObject("operatorId", Security.getOperatorId(request));
mav.addObject("tenant", r);
mav.addObject("tenantId", ServletUtils.getSafeParameter(request, "tenantId", ""));
mav.addObject("clusters", clusters);
} catch (Exception ex) {
logger.debug("viewitemdetails: " + ex.getMessage());
}
return mav;
} else return mav;
}
/**
* Return a mav with itemstatistic to a given itemid
* (first action, last action,
* nr of Users acted on item, number of actions on item)
*
* @param request
* @param response
* @return
*/
public ModelAndView viewitemstatistics(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = security(request, "viewItemStatistics");
if (!Web.validated(mav)) return mav;
mav.setViewName("item/itemstatistics");
RemoteTenant r = remoteTenantDAO.get(request);
try {
Item item = itemService.get(request);
mav.addObject("item", item);
mav.addObject("itemDetails", itemDAO.getItemDetails(r.getId(), item.getItemId(), item.getItemType()));
} catch (Exception ex) {
logger.debug("viewitemstatistics", ex);
}
return mav;
}
/**
* Removes items for a given tenant
*
* @param request
* @param response
* @return
*/
public ModelAndView remove(HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = security(request, "removeItems");
if (Web.validated(mav)) {
itemDAO.removeItems(remoteTenantDAO.get(request).getId());
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, "removeItems", MSG.SUCCESS);
} else return mav;
}
/**
* Removes items for a given tenant
*
* @param request
* @param response
* @return
*/
public ModelAndView edit(HttpServletRequest request, HttpServletResponse response) {
String action = "editItem";
ModelAndView mav = security(request, action);
String description = ServletUtils.getSafeParameter(request, "description", "");
String url = ServletUtils.getSafeParameter(request, "url", "");
String imageUrl = ServletUtils.getSafeParameter(request, "imageUrl", "");
RemoteTenant r = remoteTenantDAO.get(request);
try {
Item item = itemService.get(request);
itemDAO.insertOrUpdate(r.getId(), item.getItemId(), item.getItemType(), description, url, imageUrl);
return MessageBlock.createSingle(mav, MSG.OPERATION_SUCCESSFUL, action, MSG.SUCCESS);
} catch (Exception ex) {
return MessageBlock.createSingle(mav, MSG.ITEM_UPDATE_FAILED, action, MSG.SUCCESS);
}
}
}