public Order createOrderFromAssets(WebPageRequest inReq) {
    String catalogId = inReq.findValue("catalogid");
    MediaArchive archive = getMediaArchive(catalogId);
    String[] assetids = inReq.getRequestParameters("assetid");
    Order order =
        getOrderManager()
            .createNewOrder(inReq.findValue("applicationid"), catalogId, inReq.getUserName());

    for (int i = 0; i < assetids.length; i++) {
      String id = assetids[i];
      if (id.startsWith("multiedit:hits")) {
        HitTracker hits = (HitTracker) inReq.getSessionValue(id.substring("multiedit:".length()));
        if (hits != null) {
          for (Iterator iterator = hits.iterator(); iterator.hasNext(); ) {
            Data data = (Data) iterator.next();
            Asset asset = archive.getAssetBySourcePath(data.getSourcePath());
            getOrderManager().addItemToOrder(catalogId, order, asset, null);
          }
        }
      } else {
        Asset asset = archive.getAsset(id);
        getOrderManager().addItemToOrder(catalogId, order, asset, null);
      }
    }

    getOrderManager().saveOrder(catalogId, inReq.getUser(), order);
    inReq.putPageValue("order", order);

    return order;
  }
 public Boolean canViewAsset(WebPageRequest inReq) {
   //		String orderid = inReq.getRequestParameter("orderid");
   //		if (orderid == null)
   //		{
   //			return false;
   //		}
   Order order = loadOrder(inReq);
   if (order == null) {
     order = (Order) inReq.getSessionValue("vieworder");
   }
   if (order == null) {
     return false;
   }
   Asset asset = getAsset(inReq);
   if (asset == null) {
     log.info("Asset not found");
     return false;
   }
   String catalogid = inReq.findValue("catalogid");
   HitTracker assets = getOrderManager().findOrderItems(inReq, catalogid, order);
   int found = assets.findRow("assetid", asset.getId());
   if (found > -1 && !order.isExpired()) {
     return true;
   }
   return false;
 }
 public void clearOrderItems(WebPageRequest inReq) {
   MediaArchive archive = getMediaArchive(inReq);
   HitTracker items = findOrderItems(inReq);
   Searcher searcher = getSearcherManager().getSearcher(archive.getCatalogId(), "orderitem");
   for (Iterator iterator = items.iterator(); iterator.hasNext(); ) {
     Data item = (Data) iterator.next();
     searcher.delete(item, inReq.getUser());
   }
 }
  /**
   * Is this needed?
   *
   * @deprecated
   * @param inReq
   */
  public void createQuickOrder(WebPageRequest inReq) {

    MediaArchive archive = getMediaArchive(inReq);

    OrderManager manager = getOrderManager();
    String catalogid = inReq.findValue("catalogid");
    Searcher searcher = getSearcherManager().getSearcher(catalogid, "order");
    Searcher itemsearcher = getSearcherManager().getSearcher(catalogid, "orderitem");

    Order order = (Order) searcher.createNewData();
    order.setProperty("userid", inReq.getUserName());
    String quickpublishid = inReq.getRequestParameter("quickid");
    Data publishtemplate = archive.getData("quickpublish", quickpublishid);

    order.setProperty(
        "publishdestination",
        publishtemplate.get(
            "publishdestination")); // assume 0 for most orders, 0 can be told to use Aspera
    searcher.saveData(order, inReq.getUser());

    String hitssessionid = inReq.getRequestParameter("hitssessionid");
    HitTracker hits = (HitTracker) inReq.getSessionValue(hitssessionid);
    for (Iterator iterator = hits.getSelectedHitracker().iterator(); iterator.hasNext(); ) {
      Data hit = (Data) iterator.next();
      Data item = itemsearcher.createNewData();
      item.setProperty("presetid", publishtemplate.get("convertpreset"));
      item.setProperty("assetid", hit.getId());
      item.setProperty("orderid", order.getId());

      item.setId(itemsearcher.nextId());
      itemsearcher.saveData(item, inReq.getUser());
    }

    List assetids =
        manager.addConversionAndPublishRequest(
            inReq, order, archive, new HashMap(), inReq.getUser());
    // OrderHistory history =
    // getOrderManager().createNewHistory(archive.getCatalogId(), order,
    // inReq.getUser(), "pending");
    // history.setAssetIds(assetids);
    // manager.saveOrderWithHistory(archive.getCatalogId(), inReq.getUser(),
    // order, history);
    //		if (assetids.size() > 0)
    //		{
    //			order.setProperty("orderstatus", "ordered");
    //		}
    //		manager.saveOrder(archive.getCatalogId(), inReq.getUser(), order);
    inReq.putPageValue("order", order);
    inReq.putPageValue("data", order);

    log.info("Added conversion and publish requests for order id:" + order.getId());
  }
  public Order createOrderFromData(WebPageRequest inReq) {
    String catalogid = inReq.findValue("catalogid");

    String hitssessionid = inReq.getRequestParameter("hitssessionid");
    String mergefield = inReq.getRequestParameter("mergefield");
    if (mergefield == null) {
      mergefield = "assetid";
    }
    HitTracker datalist = null;
    if (hitssessionid != null) {
      datalist = (HitTracker) inReq.getSessionValue(hitssessionid);
    }

    Searcher itemsearcher = getSearcherManager().getSearcher(catalogid, "orderitem");
    List orderitems = new ArrayList();

    if (datalist.getSelectedHitracker().size() > 0) {
      Map props = new HashMap();

      String applicationid = inReq.findValue("applicationid");
      Order order =
          (Order) getOrderManager().createNewOrder(applicationid, catalogid, inReq.getUserName());
      inReq.putPageValue("order", order);
      inReq.setRequestParameter("orderid", order.getId());

      for (Iterator iterator = datalist.getSelectedHitracker().iterator(); iterator.hasNext(); ) {
        Data hit = (Data) iterator.next();
        String targetid = hit.get(mergefield);
        Asset asset = getMediaArchive(catalogid).getAsset(targetid);
        getOrderManager().addItemToOrder(catalogid, order, asset, null);
      }
      if (order.get("expireson") == null) {
        String days = getMediaArchive(catalogid).getCatalogSettingValue("orderexpiresdays");
        if (days == null) {
          days = "30";
        }
        GregorianCalendar cal = new GregorianCalendar();
        cal.add(Calendar.DAY_OF_YEAR, Integer.parseInt(days));
        order.setProperty(
            "expireson", DateStorageUtil.getStorageUtil().formatForStorage(cal.getTime()));
      }

      getOrderManager().saveOrder(catalogid, inReq.getUser(), order);

      return order;
    } else {
      inReq.setCancelActions(true);
    }

    return null;
  }
 public Object searchByField(String inId, String inValue) {
   SearchQuery query = createSearchQuery();
   query.addExact(inId, inValue);
   HitTracker hits = search(query);
   hits.setHitsPerPage(1);
   Data first = (Data) hits.first();
   if (first == null) {
     return null;
   }
   Data baseData = createNewData();
   baseData.setProperties(first.getProperties());
   baseData.setId(first.getId());
   return baseData;
 }
  public void removeSelectionFromOrderBasket(WebPageRequest inReq) {
    MediaArchive archive = getMediaArchive(inReq);
    Order basket = loadOrderBasket(inReq);
    String hitssessionid = inReq.getRequestParameter("hitssessionid");
    HitTracker assets = (HitTracker) inReq.getSessionValue(hitssessionid);

    for (Iterator iterator = assets.getSelectedHitracker().iterator(); iterator.hasNext(); ) {

      Data hit = (Data) iterator.next();
      Asset asset = getMediaArchive(archive.getCatalogId()).getAsset(hit.getId());
      getOrderManager().removeItemFromOrder(archive.getCatalogId(), basket, asset);
    }
    inReq.removeSessionValue(hitssessionid);
    loadAssets(inReq);
  }
  public Order loadOrderForVisitor(WebPageRequest inReq) {
    Order order = loadOrder(inReq);
    // check the expriation
    if (order.isExpired()) {
      inReq.putPageValue("expired", Boolean.TRUE);
    } else {
      inReq.putPageValue("expired", Boolean.FALSE);
    }
    // load up hits and select all the items.
    HitTracker hits = loadAssets(inReq);
    hits.selectAll();
    inReq.putPageValue("hits", hits);
    inReq.putSessionValue("vieworder", order);

    return order;
  }
  protected void processDeleteLog(File inLog, MediaArchive inArchive, ConvertStatus inStatus)
      throws FileNotFoundException, IOException, Exception {
    BufferedReader reader = new BufferedReader(new FileReader(inLog));
    try {
      String line = reader.readLine();
      int count = 0;
      while (line != null) {
        String[] tabs = line.split("\t");
        if (tabs.length > 3) {
          if ("Record deleted".equals(tabs[3])) {
            String catName = inLog.getName();
            if (catName.indexOf('-') != -1) {
              catName = catName.substring(0, catName.indexOf('-'));
            } else if (catName.indexOf('.') != -1) {
              catName = catName.substring(0, catName.lastIndexOf('.'));
            }
            String recordId = tabs[4];
            String cumulusid = catName + "_" + recordId; // /createCumulusID(catName, recordId);

            // catName = extractId(catName);
            // Category root =
            // inArchive.getStore().getCatalogArchive().getRootCatalog().getChildByName(catName);
            SearchQuery query = inArchive.getAssetSearcher().createSearchQuery();
            query.addExact("cumulusid", cumulusid);
            HitTracker hits = inArchive.getAssetSearcher().search(query);
            if (hits.getTotal() > 0) {
              count++;
              String id = hits.get(0).get("id");
              deleteAsset(inArchive, id);
            } else {
              log.debug("No record found " + catName + "dash" + recordId);
            }
          }
        }
        line = reader.readLine();
      }
      if (count > 0) {
        inArchive.getAssetSearcher().flush();
        logMessage(inStatus, "Removed " + count + " records");
      }
    } finally {
      FileUtils.safeClose(reader);
    }
  }
 public void filterOrderItems(WebPageRequest req) {
   ArrayList<String> list = new ArrayList<String>(); // add omitted orders to a list
   String publishtype = req.getRequestParameter("publishdestination.value");
   String catalogid = req.findValue("catalogid");
   HitTracker items = (HitTracker) req.getPageValue("orderitems");
   if (items == null) {
     Order order = loadOrder(req);
     if (order != null) {
       String orderid = order.getId();
       if (orderid == null) {
         orderid = req.getRequestParameter("orderid");
       }
       items = getOrderManager().findOrderItems(req, catalogid, order);
     }
   }
   if (items != null) {
     // get searchers
     Searcher publishdestsearcher =
         getMediaArchive(req).getSearcherManager().getSearcher(catalogid, "publishdestination");
     Data publisher = (Data) publishdestsearcher.searchById(publishtype);
     String publishername = publisher.getName();
     Searcher convertpresetsearcher =
         getMediaArchive(req).getSearcherManager().getSearcher(catalogid, "convertpreset");
     // see if convertpreset has the appropriate field
     String publishtofield = "publishto" + publishername.replace(" ", "").toLowerCase();
     if (convertpresetsearcher.getDetail(publishtofield) != null) // field is present
     {
       for (int i = 0; i < items.size(); i++) {
         Data data = items.get(i);
         Asset asset = getMediaArchive(req).getAsset(data.get("assetid"));
         String fileformat = asset.get("fileformat");
         String rendertype = getMediaArchive(req).getMediaRenderType(fileformat);
         // build query
         SearchQuery presetquery = convertpresetsearcher.createSearchQuery();
         presetquery.append(publishtofield, "true").append("inputtype", rendertype);
         // execute query
         HitTracker hits = convertpresetsearcher.search(presetquery);
         if (hits.size() > 0) continue;
         list.add(asset.getId());
       }
     }
   }
   req.putPageValue("invaliditems", list); // process this in step2
 }
  public Data addSelectionsToOrderBasket(WebPageRequest inReq) {
    MediaArchive archive = getMediaArchive(inReq);
    Order basket = loadOrderBasket(inReq);
    String hitssessionid = inReq.getRequestParameter("hitssessionid");
    HitTracker assets = (HitTracker) inReq.getSessionValue(hitssessionid);

    String[] fields = inReq.getRequestParameters("field");
    Map props = new HashMap();
    if (fields != null) {
      for (int i = 0; i < fields.length; i++) {
        String key = fields[i];
        String value = inReq.getRequestParameter(key + ".value");
        props.put(key, value);
      }
    }

    int added =
        getOrderManager()
            .addItemsToBasket(inReq, archive, basket, assets.getSelectedHitracker(), props);
    inReq.putPageValue("added", Integer.valueOf(added));
    return basket;
  }
  public boolean checkItemApproval(WebPageRequest inReq) throws Exception {

    if (inReq.getUser() == null) {
      return false;
    }
    MediaArchive archive = getMediaArchive(inReq);

    // Searcher ordersearcher =
    // archive.getSearcherManager().getSearcher(archive.getCatalogId(),
    // "order");
    // SearchQuery search = ordersearcinKeyher.createSearchQuery();
    // search.addExact("userid", inReq.getUser().getId());
    // search.addExact("orderstatus", "processed");
    // search.addSortBy("date");
    // HitTracker hits = ordersearcher.search(search);
    // look for the most recent order for an approved asset
    Asset asset = (Asset) inReq.getPageValue("asset");
    String sourcepath = null;
    if (asset != null) {
      sourcepath = asset.getSourcePath();
    } else {
      sourcepath = archive.getSourcePathForPage(inReq);
    }
    if (sourcepath == null) {
      return false;
    }
    Searcher itemsearcher =
        archive.getSearcherManager().getSearcher(archive.getCatalogId(), "orderitem");
    SearchQuery search = itemsearcher.createSearchQuery();
    search.addExact("userid", inReq.getUser().getId());
    search.addExact("assetsourcepath", sourcepath);
    search.addMatches("status", "approved");
    HitTracker results = itemsearcher.search(search);
    if (results.size() > 0) {
      return true;
    }
    return false;
  }
  public Order createOrderFromSelections(WebPageRequest inReq) {
    String catalogid = inReq.findValue("catalogid");

    String hitssessionid = inReq.getRequestParameter("hitssessionid");
    HitTracker assets = null;
    if (hitssessionid != null) {
      assets = (HitTracker) inReq.getSessionValue(hitssessionid);
    } else {
      assets = new ListHitTracker();
      String[] sourcepaths = inReq.getRequestParameters("sourcepath");
      if (sourcepaths == null) {
        log.error("No assets passed in");
        return null;
      }
      for (int i = 0; i < sourcepaths.length; i++) {
        Data hit = new BaseData();
        hit.setSourcePath(sourcepaths[i]);
        assets.add(hit);
        assets.addSelection(hit.getId());
      }
    }
    if (assets == null) {
      return null;
    }
    Searcher itemsearcher = getSearcherManager().getSearcher(catalogid, "orderitem");
    List orderitems = new ArrayList();

    if (assets.hasSelections()) {
      Map props = new HashMap();

      String applicationid = inReq.findValue("applicationid");
      Order order =
          (Order) getOrderManager().createNewOrder(applicationid, catalogid, inReq.getUserName());
      inReq.putPageValue("order", order);
      inReq.setRequestParameter("orderid", order.getId());

      for (Iterator iterator = assets.getSelectedHitracker().iterator(); iterator.hasNext(); ) {
        Data hit = (Data) iterator.next();
        Asset asset = getMediaArchive(catalogid).getAssetBySourcePath(hit.getSourcePath());
        if (asset != null) {
          getOrderManager().addItemToOrder(catalogid, order, asset, null);
        }
      }
      if (order.get("expireson") == null) {
        String days = getMediaArchive(catalogid).getCatalogSettingValue("orderexpiresdays");
        if (days == null) {
          days = "30";
        }
        GregorianCalendar cal = new GregorianCalendar();
        cal.add(Calendar.DAY_OF_YEAR, Integer.parseInt(days));
        order.setProperty(
            "expireson", DateStorageUtil.getStorageUtil().formatForStorage(cal.getTime()));
      }

      getOrderManager().saveOrder(catalogid, inReq.getUser(), order);

      return order;
    } else {
      inReq.setCancelActions(true);
    }

    return null;
  }