📄 gdataservice.java
字号:
} /** * @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 + -