예제 #1
0
파일: FeedServlet.java 프로젝트: ekate/fda5
  // returns recently changed items, checking for accessibility
  private Item[] getItems(Context context, DSpaceObject dso) throws IOException, SQLException {
    try {
      // new method of doing the browse:
      String idx = ConfigurationManager.getProperty("recent.submissions.sort-option");
      if (idx == null) {
        throw new IOException(
            "There is no configuration supplied for: recent.submissions.sort-option");
      }
      BrowseIndex bix = BrowseIndex.getItemBrowseIndex();
      if (bix == null) {
        throw new IOException("There is no browse index with the name: " + idx);
      }

      BrowserScope scope = new BrowserScope(context);
      scope.setBrowseIndex(bix);
      if (dso != null) {
        scope.setBrowseContainer(dso);
      }

      for (SortOption so : SortOption.getSortOptions()) {
        if (so.getName().equals(idx)) {
          scope.setSortBy(so.getNumber());
        }
      }
      scope.setOrder(SortOption.DESCENDING);
      scope.setResultsPerPage(itemCount);

      // gather & add items to the feed.
      BrowseEngine be = new BrowseEngine(context);
      BrowseInfo bi = be.browseMini(scope);
      Item[] results = bi.getItemResults(context);

      if (includeAll) {
        return results;
      } else {
        // Check to see if we can include this item
        // Group[] authorizedGroups = AuthorizeManager.getAuthorizedGroups(context, results[i],
        // Constants.READ);
        // boolean added = false;
        List<Item> items = new ArrayList<Item>();
        for (Item result : results) {
          checkAccess:
          for (Group group :
              AuthorizeManager.getAuthorizedGroups(context, result, Constants.READ)) {
            if ((group.getID() == Group.ANONYMOUS_ID)) {
              items.add(result);
              break checkAccess;
            }
          }
        }
        return items.toArray(new Item[items.size()]);
      }
    } catch (SortException se) {
      log.error("caught exception: ", se);
      throw new IOException(se.getMessage(), se);
    } catch (BrowseException e) {
      log.error("caught exception: ", e);
      throw new IOException(e.getMessage(), e);
    }
  }
  /**
   * Get the recently submitted items for the given collection.
   *
   * @param collection The collection.
   */
  @SuppressWarnings(
      "unchecked") // The cast from getLastSubmitted is correct, it dose infact return a list of
                   // Items.
  private java.util.List<BrowseItem> getRecientlySubmittedIems(Collection collection)
      throws SQLException {
    if (recentSubmissionItems != null) return recentSubmissionItems;

    String source = ConfigurationManager.getProperty("recent.submissions.sort-option");
    BrowserScope scope = new BrowserScope(context);
    scope.setCollection(collection);
    scope.setResultsPerPage(RECENT_SUBMISISONS);

    // FIXME Exception Handling
    try {
      scope.setBrowseIndex(BrowseIndex.getItemBrowseIndex());
      for (SortOption so : SortOption.getSortOptions()) {
        if (so.getName().equals(source)) scope.setSortBy(so.getNumber());
      }

      BrowseEngine be = new BrowseEngine(context);
      this.recentSubmissionItems = be.browse(scope).getResults();
    } catch (BrowseException bex) {
      log.error("Caught BrowseException", bex);
    }

    return this.recentSubmissionItems;
  }
  /**
   * Get the results of the browse. If the results haven't been generated yet, then this will
   * perform the browse.
   *
   * @return
   * @throws SQLException
   * @throws UIException
   */
  private BrowseInfo getBrowseInfo() throws SQLException, UIException {
    if (this.browseInfo != null) return this.browseInfo;

    Context context = ContextUtil.obtainContext(objectModel);

    // Get the parameters we will use for the browse
    // (this includes a browse scope)
    BrowseParams params = getUserParams();

    try {
      // Create a new browse engine, and perform the browse
      BrowseEngine be = new BrowseEngine(context);
      this.browseInfo = be.browse(params.scope);

      // figure out the setting for author list truncation
      if (params.etAl < 0) {
        // there is no limit, or the UI says to use the default
        int etAl = ConfigurationManager.getIntProperty("webui.browse.author-limit");
        if (etAl != 0) {
          this.browseInfo.setEtAl(etAl);
        }

      } else if (params.etAl == 0) // 0 is the user setting for unlimited
      {
        this.browseInfo.setEtAl(-1); // but -1 is the application
        // setting for unlimited
      } else
      // if the user has set a limit
      {
        this.browseInfo.setEtAl(params.etAl);
      }
    } catch (BrowseException bex) {
      throw new UIException("Unable to process browse", bex);
    }

    return this.browseInfo;
  }