package org.sakaiproject.tool.assessment.facade; import java.util.Date; import java.util.HashSet; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedItemData; import org.sakaiproject.tool.assessment.data.ifc.assessment.AssessmentIfc; import org.sakaiproject.tool.assessment.data.ifc.assessment.ItemDataIfc; import org.sakaiproject.tool.assessment.osid.shared.impl.IdImpl; import org.sakaiproject.tool.assessment.services.PersistenceService; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class PublishedItemFacadeQueries extends HibernateDaoSupport implements PublishedItemFacadeQueriesAPI { private static Log log = LogFactory .getLog(PublishedItemFacadeQueries.class); public IdImpl getItemId(String id) { return new IdImpl(id); } public IdImpl getItemId(Long id) { return new IdImpl(id); } public IdImpl getItemId(long id) { return new IdImpl(id); } public PublishedItemFacade getItem(Long itemId, String agent) { PublishedItemData item = (PublishedItemData) getHibernateTemplate() .load(PublishedItemData.class, itemId); return new PublishedItemFacade(item); } public PublishedItemFacade getItem(String itemId) { PublishedItemData item = (PublishedItemData) getHibernateTemplate() .load(PublishedItemData.class, Long.valueOf(itemId)); return new PublishedItemFacade(item); } public void deleteItemContent(Long itemId, String agent) { PublishedItemData item = (PublishedItemData) getHibernateTemplate().load(PublishedItemData.class, itemId); int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount() .intValue(); while (retryCount > 0) { try { if (item != null) { // need to dissociate with item before deleting in Hibernate 3 Set set = item.getItemTextSet(); item.setItemTextSet(new HashSet()); getHibernateTemplate().deleteAll(set); retryCount = 0; } else retryCount = 0; } catch (Exception e) { log.warn("problem deleteItemTextSet: " + e.getMessage()); retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount); } } retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount() .intValue(); while (retryCount > 0) { try { if (item != null) { // need to dissociate with item before deleting in Hibernate 3 Set set = item.getItemMetaDataSet(); item.setItemMetaDataSet(new HashSet()); getHibernateTemplate().deleteAll(set); retryCount = 0; } else retryCount = 0; } catch (Exception e) { log.warn("problem deleteItemMetaDataSet: " + e.getMessage()); retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount); } } retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount() .intValue(); while (retryCount > 0) { try { if (item != null) { // need to dissociate with item before deleting in Hibernate 3 Set set = item.getItemFeedbackSet(); item.setItemFeedbackSet(new HashSet()); getHibernateTemplate().deleteAll(set); retryCount = 0; } else retryCount = 0; } catch (Exception e) { log.warn("problem deleting ItemFeedbackSet: " + e.getMessage()); retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount); } } } public PublishedItemFacade saveItem(PublishedItemFacade item) { try { ItemDataIfc publishedItemdata = (ItemDataIfc) item.getData(); publishedItemdata.setLastModifiedDate(new Date()); publishedItemdata.setLastModifiedBy(AgentFacade.getAgentString()); int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount().intValue(); while (retryCount > 0){ try { getHibernateTemplate().saveOrUpdate(publishedItemdata); item.setItemId(publishedItemdata.getItemId()); retryCount = 0; } catch (Exception e) { log.warn("problem save or update itemdata: "+e.getMessage()); retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount); } } if ((item.getData()!= null) && (item.getData().getSection()!= null)) { AssessmentIfc assessment = item.getData().getSection().getAssessment(); assessment.setLastModifiedBy(AgentFacade.getAgentString()); assessment.setLastModifiedDate(new Date()); retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount().intValue(); while (retryCount > 0){ try { getHibernateTemplate().update(assessment); retryCount = 0; } catch (Exception e) { log.warn("problem updating asssessment: "+e.getMessage()); retryCount = PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount); } } } return item; } catch(Exception e) { e.printStackTrace(); return null; } } }