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

📄 gdataservice.java

📁 一套java版本的搜索引擎源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    }    /**     * @see org.apache.lucene.gdata.server.Service#getFeed(org.apache.lucene.gdata.server.GDataRequest,     *      org.apache.lucene.gdata.server.GDataResponse)     */    @SuppressWarnings("unchecked")    public BaseFeed getFeed(GDataRequest request, GDataResponse response)            throws ServiceException {        ServerBaseFeed feed = new ServerBaseFeed();        feed.setId(request.getFeedId());        feed.setStartIndex(request.getStartIndex());        feed.setItemsPerPage(request.getItemsPerPage());        feed.setServiceConfig(request.getConfigurator());        try {            /*             * the strategy executes either a search or a direct access.             */            BaseFeed retVal = this.storage.getFeed(feed);            dynamicElementFeedStragey(retVal, request);            return retVal;            /*             * Resource not found will be detected in Gdata request.             * the request queries the storage for the feed to get the service for the feed             */        } catch (StorageException e) {            ServiceException ex = new ServiceException("Could not get feed", e,GDataResponse.NOT_FOUND);            ex.setStackTrace(e.getStackTrace());            throw ex;        }    }    private Link buildLink(String rel, String type, String href) {        Link retVal = new Link();        retVal.setHref(href);        retVal.setRel(rel);        retVal.setType(type);        return retVal;    }    private ServerBaseEntry buildEntry(final GDataRequest request,            final GDataResponse response) throws ServiceException {        try {            ServerBaseEntry entry = new ServerBaseEntry(GDataEntityBuilder                    .buildEntry(request));            return entry;        } catch (ParseException e) {            ServiceException ex = new ServiceException(                    "Could not parse entry from incoming request", e, GDataResponse.BAD_REQUEST);            ex.setStackTrace(e.getStackTrace());            throw ex;        } catch (IOException e) {            ServiceException ex = new ServiceException(                    "Could not read or open input stream", e, GDataResponse.BAD_REQUEST);            ex.setStackTrace(e.getStackTrace());            throw ex;        }    }    /**     * @see org.apache.lucene.gdata.server.Service#getSingleEntry(org.apache.lucene.gdata.server.GDataRequest,     *      org.apache.lucene.gdata.server.GDataResponse)     */    public BaseEntry getSingleEntry(GDataRequest request, GDataResponse response)            throws ServiceException {        try {            ServerBaseEntry entry = new ServerBaseEntry();            entry.setServiceConfig(request.getConfigurator());            entry.setFeedId(request.getFeedId());            entry.setId(request.getEntryId());                        if(entry.getId() == null){                throw new ServiceException("entry is null can't get entry", GDataResponse.BAD_REQUEST);            }                            BaseEntry retVal = null;            retVal = this.storage.getEntry(entry);            dynamicElementEntryStragey(retVal, request);            return retVal;        } catch (ResourceNotFoundException e) {            ServiceException ex = new ServiceException(                    "Could not get entry", e, GDataResponse.BAD_REQUEST);            ex.setStackTrace(e.getStackTrace());            throw ex;        } catch (StorageException e) {            ServiceException ex = new ServiceException("Could not get entry", e, GDataResponse.SERVER_ERROR);            ex.setStackTrace(e.getStackTrace());            throw ex;        }    }    /*     * adds all dynamic element to the entry     */    private void dynamicElementEntryStragey(final BaseEntry entry,            final GDataRequest request) {        setSelfLink(entry, request.getContextPath());    }    /*     * adds all dynamic element to the feed entries     */    @SuppressWarnings("unchecked")    protected void dynamicElementFeedStragey(final BaseFeed feed,            final GDataRequest request) {         buildDynamicFeedElements(request, feed);        List<BaseEntry> entryList = feed.getEntries();        for (BaseEntry entry : entryList) {            String id = new StringBuilder(request.getContextPath()).append(entry.getId()).append("/").toString();            setSelfLink(entry, id);        }    }    /*     * The selfLink is build from a prefix and the entry id. The prefix is the     * context path of the requested feed. This will be used to request the     * entry directly     */@SuppressWarnings("unchecked")    private BaseEntry setSelfLink(final BaseEntry entry, String id) {        Link self = buildLink(Link.Rel.SELF, XMLMIME, id);        StringBuilder builder = new StringBuilder(id);        builder.append(entry.getVersionId());        Link edit = buildLink(Link.Rel.ENTRY_EDIT,XMLMIME,builder.toString());        List<Link> list = entry.getLinks();        list.add(edit);        list.add(self);        return entry;    }    /*     * build the dynamic elements like self link and next link     */    private void buildDynamicFeedElements(final GDataRequest request,            final BaseFeed feed) {        feed.setGenerator(generator);        feed.setItemsPerPage(request.getItemsPerPage());        feed.setStartIndex(request.getStartIndex());        feed.setId(request.getContextPath());        List<Link> links = feed.getLinks();        links.add(                buildLink(Link.Rel.SELF, Link.Type.ATOM, request.getSelfId()));        links.add(                buildLink(Link.Rel.NEXT, XMLMIME, request.getNextId()));        String prevLink = request.getPreviousId();        if(prevLink != null)            links.add(buildLink(Link.Rel.PREVIOUS,XMLMIME,prevLink));            }    /**     * @see org.apache.lucene.gdata.server.Service#close()     */    public void close() {        this.storage.close();    }    /**     * @see org.apache.lucene.gdata.server.Service#getFeedLastModified(java.lang.String)     */    public Date getFeedLastModified(final String feedId) throws ServiceException {        try {            return new Date(this.storage.getFeedLastModified(feedId));                   } catch (StorageException e) {            ServiceException ex = new ServiceException(                    "Could not get Last update for feed -- "+feedId, e, GDataResponse.SERVER_ERROR);            ex.setStackTrace(e.getStackTrace());            throw ex;        }    }    /**     * @see org.apache.lucene.gdata.server.Service#getEntryLastModified(java.lang.String, java.lang.String)     */    public Date getEntryLastModified(final String entryId,final String feedId) throws ServiceException {            try {                return new Date(this.storage.getEntryLastModified(entryId, feedId));            } catch (StorageException e) {                ServiceException ex = new ServiceException(                        "Could not get Last update for entry  -- "+entryId, e, GDataResponse.SERVER_ERROR);                ex.setStackTrace(e.getStackTrace());                throw ex;            }            }    private ServerBaseEntry setVersionId(final ServerBaseEntry entry, final GDataRequest request, final GDataResponse response)throws ServiceException{        try{            entry.setVersion(Integer.parseInt(request.getEntryVersion()));            return entry;        }catch (Exception e) {            LOG.error("Can not parse entry version -- version is not an integer -- versionid: "+request.getEntryVersion(),e);            throw new ServiceException("Can not parse entry version -- version is not an integer -- versionid: "+request.getEntryVersion(),e, GDataResponse.BAD_REQUEST);                   }    }    /*     * provide current time to set as published / updated values     * always use servertime to prevent client / server time lag     * Timezoneshift is 0     */    protected DateTime getCurrentDateTime(){        return new DateTime(System.currentTimeMillis(),0);    }        private void removeDynamicElements(BaseEntry entry){        Link selfLink = entry.getSelfLink();        if(selfLink != null)            entry.getLinks().remove(selfLink);        Link editLink = entry.getEditLink();        if(editLink != null)            entry.getLinks().remove(editLink);    }}

⌨️ 快捷键说明

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