public void deleteItem(Long itemId, String agent) {
    ItemData item = null;
    try {
      item = (ItemData) getHibernateTemplate().load(ItemData.class, itemId);
    } catch (DataAccessException e) {
      log.warn("unable to retrieve item " + itemId + " due to:" + e);
      return;
    }
    // get list of attachment in item
    AssessmentService service = new AssessmentService();
    List itemAttachmentList = service.getItemResourceIdList(item);
    service.deleteResources(itemAttachmentList);

    int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
    while (retryCount > 0) {
      try {
        SectionDataIfc section = item.getSection();
        // section might be null if you are deleting an item created inside a pool, that's not
        // linked to any assessment.
        if (section != null) {
          Set set = section.getItemSet();
          set.remove(item);
        }
        getHibernateTemplate().delete(item);
        retryCount = 0;
      } catch (Exception e) {
        log.warn("problem deleting item: " + e.getMessage());
        retryCount =
            PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount);
      }
    }
  }
 public void deleteSet(Set s) {
   int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
   while (retryCount > 0) {
     try {
       if (s != null) { // need to dissociate with item before deleting in Hibernate 3
         getHibernateTemplate().deleteAll(s);
         retryCount = 0;
       } else {
         retryCount = 0;
       }
     } catch (Exception e) {
       log.warn("problem deleteSet: " + e.getMessage());
       retryCount =
           PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount);
     }
   }
 }
  /**
   * Get the Id for this SectionFacade.
   *
   * @return org.osid.shared.Id
   */
  org.osid.shared.Id getId() {
    try {
      this.data = (SectionDataIfc) section.getData();
    } catch (AssessmentException ex) {
      throw new DataFacadeException(ex.getMessage());
    }

    PublishedSectionFacadeQueriesAPI publishedSectionFacadeQueries =
        PersistenceService.getInstance().getPublishedSectionFacadeQueries();
    return publishedSectionFacadeQueries.getId(this.data.getSectionId());
  }
 public ItemFacade saveItem(ItemFacade item) throws DataFacadeException {
   try {
     ItemDataIfc itemdata = (ItemDataIfc) item.getData();
     itemdata.setLastModifiedDate(new Date());
     itemdata.setLastModifiedBy(AgentFacade.getAgentString());
     int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
     while (retryCount > 0) {
       try {
         getHibernateTemplate().saveOrUpdate(itemdata);
         item.setItemId(itemdata.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();
       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;
   }
 }
  public void addItemMetaData(Long itemId, String label, String value) {
    ItemData item = (ItemData) getHibernateTemplate().load(ItemData.class, itemId);
    if (item != null) {
      printItem(item);

      ItemMetaData itemmetadata = new ItemMetaData(item, label, value);
      int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
      while (retryCount > 0) {
        try {
          getHibernateTemplate().save(itemmetadata);
          retryCount = 0;
        } catch (Exception e) {
          log.warn("problem saving itemmetadata: " + e.getMessage());
          retryCount =
              PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount);
        }
      }
      // item.addItemMetaData(label, value);
      // getHibernateTemplate().saveOrUpdate(item);
    }
  }
  public void deleteItemMetaData(final Long itemId, final String label) {
    // delete metadata by label
    ItemData item = getHibernateTemplate().load(ItemData.class, itemId);

    final HibernateCallback<List<ItemMetaData>> hcb =
        session -> {
          Query q =
              session.createQuery(
                  "from ItemMetaData imd where imd.item.itemId = :id and imd.label = :label");
          q.setLong("id", itemId);
          q.setString("label", label);
          return q.list();
        };
    List<ItemMetaData> itemmetadatalist = getHibernateTemplate().execute(hcb);

    int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
    while (retryCount > 0) {
      try {
        if (item != null) { // need to dissociate with item before deleting in Hibernate 3
          Iterator iter = itemmetadatalist.iterator();
          while (iter.hasNext()) {
            ItemMetaDataIfc meta = (ItemMetaDataIfc) iter.next();
            meta.setItem(null);
          }

          Set set = item.getItemMetaDataSet();
          set.removeAll(itemmetadatalist);
          item.setItemMetaDataSet(set);
          getHibernateTemplate().deleteAll(itemmetadatalist);
          retryCount = 0;
        } else retryCount = 0;
      } catch (Exception e) {
        log.warn("problem delete itemmetadatalist: " + e.getMessage());
        retryCount =
            PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount);
      }
    }
  }
  public void remove(Long itemId) {
    ItemData item = (ItemData) getHibernateTemplate().load(ItemData.class, itemId);

    // get list of attachment in section
    AssessmentService service = new AssessmentService();
    List itemAttachmentList = service.getItemResourceIdList(item);
    service.deleteResources(itemAttachmentList);

    int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
    while (retryCount > 0) {
      try {
        getHibernateTemplate().delete(item);
        retryCount = 0;
      } catch (Exception e) {
        log.warn("problem deleting item : " + e.getMessage());
        retryCount =
            PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount);
      }
    }
    if (item != null) {
      printItem(item);
    }
  }
  public Long add() {
    ItemData item = new ItemData();
    item.setInstruction("Matching game");
    item.setTypeId(TypeFacade.MATCHING);
    item.setScore(Double.valueOf(10));
    item.setDiscount(Double.valueOf(0));
    item.setHasRationale(Boolean.FALSE);
    item.setStatus(Integer.valueOf(1));
    item.setCreatedBy("1");
    item.setCreatedDate(new Date());
    item.setLastModifiedBy("1");
    item.setLastModifiedDate(new Date());

    // prepare itemText
    item.setItemTextSet(prepareText(item));

    // prepare MetaData
    item.setItemMetaDataSet(prepareMetaData(item));
    item.addItemMetaData("ITEM_OBJECTIVE", "the objective is to ...");

    // prepare feedback
    item.setCorrectItemFeedback("well done!");
    item.setInCorrectItemFeedback("better luck next time!");

    int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
    while (retryCount > 0) {
      try {
        getHibernateTemplate().save(item);
        retryCount = 0;
      } catch (Exception e) {
        log.warn("problem saving item: " + e.getMessage());
        retryCount =
            PersistenceService.getInstance().getPersistenceHelper().retryDeadlock(e, retryCount);
      }
    }
    return item.getItemId();
  }
  // is this used by ItemAddListener to save item? -daisyf
  public void deleteItemContent(Long itemId, String agent) {
    ItemData item = (ItemData) getHibernateTemplate().load(ItemData.class, itemId);

    int retryCount = PersistenceService.getInstance().getPersistenceHelper().getRetryCount();
    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();
    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();
    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 void listType() {
   TypeFacadeQueriesAPI typeFacadeQueries =
       PersistenceService.getInstance().getTypeFacadeQueries();
   TypeFacade f = typeFacadeQueries.getTypeFacadeById(1L);
   log.debug("***facade: " + f.getAuthority());
 }