⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspaceoaicatalog.java

📁 dspace 用j2ee架构的一个数字图书馆.开源程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            // token            if (records.size() >= MAX_RECORDS)            {                String resumptionToken = makeResumptionToken(from, until, set,                        metadataPrefix, offset + MAX_RECORDS);                if (log.isDebugEnabled())                {                    log.debug(LogManager                            .getHeader(context, "made_resumption_token",                                    "token=" + resumptionToken));                }                results.put("resumptionMap", getResumptionMap(resumptionToken));                //results.put("resumptionToken", resumptionToken);            }        }        catch (SQLException se)        {            // Log the error            log.warn(LogManager.getHeader(context, "database_error", ""), se);            throw new OAIInternalServerError(se.toString());        }        finally        {            if (context != null)            {                context.abort();            }        }        return results;    }    /**     * Retrieve a list of sets that satisfy the specified criteria     *      * @return a Map object containing "sets" Iterator object (contains     *         <setSpec/>XML Strings) as well as an optional resumptionMap Map.     * @exception OAIBadRequestException     *                signals an http status code 400 problem     * @exception OAIInternalServerError     *                signals an http status code 500 problem     */    public Map listSets() throws NoSetHierarchyException,            OAIInternalServerError    {        log.info(LogManager.getHeader(null, "oai_request", "verb=listSets"));        Context context = null;        // List to put results in        List sets = new LinkedList();        try        {            context = new Context();            Collection[] allCols = Collection.findAll(context);            StringBuffer spec = null;            for (int i = 0; i < allCols.length; i++)            {                spec = new StringBuffer("<set><setSpec>hdl_");                spec.append(allCols[i].getHandle().replace('/', '_'));                spec.append("</setSpec>");                String collName = allCols[i].getMetadata("name");                if(collName != null)                {                	spec.append("<setName>");                	spec.append(Utils.addEntities(collName));                	spec.append("</setName>");                }                else                {                	spec.append("<setName />");                    // Warn that there is an error of a null set name                	log.info(LogManager.getHeader(null, "oai_error",                			       "null_set_name_for_set_id_" + allCols[i].getHandle()));                }                spec.append("</set>");                sets.add(spec.toString());            }        }        catch (SQLException se)        {            // Log the error            log.warn(LogManager.getHeader(context, "database_error", ""), se);            throw new OAIInternalServerError(se.toString());        }        finally        {            if (context != null)            {                context.abort();            }        }        // Put results in form needed to return        Map results = new HashMap();        results.put("sets", sets.iterator());        return results;    }    /**     * Retrieve the next set of sets associated with the resumptionToken     *      * @param resumptionToken     *            implementation-dependent format taken from the previous     *            listSets() Map result.     * @return a Map object containing "sets" Iterator object (contains     *         <setSpec/>XML Strings) as well as an optional resumptionMap Map.     * @exception BadResumptionTokenException     *                the value of the resumptionToken is invalid or expired.     * @exception OAIInternalServerError     *                signals an http status code 500 problem     */    public Map listSets(String resumptionToken)            throws BadResumptionTokenException, OAIInternalServerError    {        // Resumption tokens not yet supported        throw new BadResumptionTokenException();    }    /**     * close the repository     */    public void close()    {    }    // ******************************************    // Internal DSpace utility methods below here    // ******************************************    /**     * Get the community or collection signified by a set spec     *      * @param context     *            DSpace context object     * @param set     *            OAI set spec     * @return the corresponding community or collection, or null if no set     *         provided     */    private Collection resolveSet(Context context, String set)            throws SQLException, BadArgumentException    {        if (set == null)        {            return null;        }        DSpaceObject o = null;        /*         * set specs are in form hdl_123.456_789 corresponding to         * hdl:123.456/789         */        if (set.startsWith("hdl_"))        {            // Looks OK so far... turn second _ into /            String handle = set.substring(4).replace('_', '/');            o = HandleManager.resolveToObject(context, handle);        }        // If it corresponds to a collection, that's the set we want        if ((o != null) && o instanceof Collection)        {            return (Collection) o;        }        // Handle is either non-existent, or corresponds to a non-collection        // Either way, a bad set spec, ergo a bad argument        throw new BadArgumentException();    }    /**     * Create a resumption token. The relevant parameters for the harvest are     * put in a     *      * @param from     *            OAI 'from' parameter     * @param until     *            OAI 'until' parameter     * @param set     *            OAI 'set' parameter     * @param prefix     *            OAI 'metadataPrefix' parameter     * @param offset     *            where to start the next harvest     *      * @return the appropriate resumption token     */    private String makeResumptionToken(String from, String until, String set,            String prefix, int offset)    {        StringBuffer token = new StringBuffer();        if (from != null)        {            token.append(from);        }        token.append("/");        if (until != null)        {            token.append(until);        }        token.append("/");        if (set != null)        {            token.append(set);        }        token.append("/");        if (prefix != null)        {            token.append(prefix);        }        token.append("/");        token.append(String.valueOf(offset));        return (token.toString());    }    /**     * Get the information out of a resumption token     *      * @param token     *            the resumption token     * @return a 5-long array of Objects; 4 Strings (from, until, set, prefix)     *         and an Integer (the offset)     */    private Object[] decodeResumptionToken(String token)            throws BadResumptionTokenException    {        Object[] obj = new Object[5];        StringTokenizer st = new StringTokenizer(token, "/", true);        try        {            // Extract from, until, set, prefix            for (int i = 0; i < 4; i++)            {                if (!st.hasMoreTokens())                {                    throw new BadResumptionTokenException();                }                String s = st.nextToken();                // If this value is a delimiter /, we have no value for this                // part                // of the resumption token.                if (s.equals("/"))                {                    obj[i] = null;                }                else                {                    obj[i] = s;                    // Skip the delimiter                    st.nextToken();                }                log.debug("is: " + (String) obj[i]);            }            if (!st.hasMoreTokens())            {                throw new BadResumptionTokenException();            }            obj[4] = new Integer(st.nextToken());        }        catch (NumberFormatException nfe)        {            throw new BadResumptionTokenException();        }        catch (NoSuchElementException nsee)        {            throw new BadResumptionTokenException();        }        return obj;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -