protected AtomElementReader<?, ?> getAtomReader(Class<?> pojoClass) { AtomElementReader<?, ?> reader = getAtomClassElementHandler(atomClassReaders, pojoClass); return reader == null && atomReaders != null ? getAtomElementHandler(atomReaders, pojoClass) : reader; }
private <T> T getAtomElementHandlerSuperClass(Map<String, T> handlers, Class<?> pojoClass) { if (pojoClass == null || pojoClass == Object.class) { return null; } T handler = handlers.get(pojoClass.getName()); if (handler != null) { return handler; } return getAtomElementHandlerSuperClass(handlers, pojoClass.getSuperclass()); }
public void writeTo(Object o, Class<?> cls, Type genericType, Annotation[] annotations, MediaType mt, MultivaluedMap<String, Object> headers, OutputStream os) throws IOException { boolean isFeed = isFeedRequested(mt); boolean isCollection = InjectionUtils.isSupportedCollectionOrArray(cls); if (isFeed && isCollection) { reportError("Atom feed can only be created from a collection wrapper", null); } else if (!isFeed && isCollection) { reportError("Atom entry can only be created from a single object", null); } Factory factory = Abdera.getNewFactory(); Element atomElement = null; try { if (isFeed && !isCollection) { atomElement = createFeedFromCollectionWrapper(factory, o, cls); } else if (!isFeed && !isCollection) { atomElement = createEntryFromObject(factory, o, cls); } } catch (Exception ex) { throw ExceptionUtils.toInternalServerErrorException(ex, null); } try { writeAtomElement(atomElement, os); } catch (IOException ex) { reportError("Atom element can not be serialized", ex); } }
protected Feed createFeedFromCollectionWrapper(Factory factory, Object o, Class<?> pojoClass) throws Exception { Feed feed = factory.newFeed(); boolean writerUsed = buildFeed(feed, o, pojoClass); if (feed.getEntries().size() > 0) { return feed; } String methodName = getCollectionMethod(o.getClass(), true); Object collection = null; Method m = null; try { m = o.getClass().getMethod(methodName, new Class[]{}); collection = m.invoke(o, new Object[]{}); } catch (Exception ex) { reportError("Collection for " + o.getClass().getName() + " can not be retrieved", ex); } setFeedFromCollection(factory, feed, o, pojoClass, collection, m.getReturnType(), m.getGenericReturnType(), writerUsed); return feed; }
protected Entry createEntryFromObject(Factory factory, Object o, Class<?> cls) throws Exception { Entry entry = factory.getAbdera().newEntry(); if (!buildEntry(entry, o, cls)) { setEntryProperties(factory, entry, o, cls); } if (entry.getContentElement() == null && entry.getExtensions().isEmpty()) { createEntryContent(factory, entry, o, cls); } return entry; }
@SuppressWarnings("unchecked") AbstractAtomElementBuilder<Object> builder = (AbstractAtomElementBuilder<Object>)getAtomBuilder(cls); if (builder == null) { return; setCommonElementProperties(factory, entry, builder, o); setEntryContent(factory, entry, content);
protected void setFeedFromCollection(Factory factory, Feed feed, Object wrapper, Class<?> wrapperCls, Object collection, Class<?> collectionCls, Type collectionType, boolean writerUsed) throws Exception { //CHECKSTYLE:ON Object[] arr = collectionCls.isArray() ? (Object[])collection : ((Collection<?>)collection).toArray(); Class<?> memberClass = InjectionUtils.getActualType(collectionType); for (Object o : arr) { Entry entry = createEntryFromObject(factory, o, memberClass); feed.addEntry(entry); } if (!writerUsed) { setFeedProperties(factory, feed, wrapper, wrapperCls, collection, collectionCls, collectionType); } }
(AbstractAtomElementBuilder<Object>)getAtomBuilder(wrapperCls); if (builder == null) { return; setCommonElementProperties(factory, feed, builder, wrapper);
private void writeAtomElement(Element atomElement, OutputStream os) throws IOException { Writer w = formattedOutput ? createWriter("prettyxml") : null; if (w != null) { atomElement.writeTo(w, os); } else { atomElement.writeTo(os); } }
public void writeTo(Object o, Class<?> cls, Type genericType, Annotation[] annotations, MediaType mt, MultivaluedMap<String, Object> headers, OutputStream os) throws IOException { boolean isFeed = isFeedRequested(mt); boolean isCollection = InjectionUtils.isSupportedCollectionOrArray(cls); reportError("Atom feed can only be created from a collection wrapper", null); } else if (!isFeed && isCollection) { reportError("Atom entry can only be created from a single object", null); try { if (isFeed && !isCollection) { atomElement = createFeedFromCollectionWrapper(factory, o, cls); } else if (!isFeed && !isCollection) { atomElement = createEntryFromObject(factory, o, cls); writeAtomElement(atomElement, os); } catch (IOException ex) { reportError("Atom element can not be serialized", ex);
protected Feed createFeedFromCollectionWrapper(Factory factory, Object o, Class<?> pojoClass) throws Exception { Feed feed = factory.newFeed(); boolean writerUsed = buildFeed(feed, o, pojoClass); if (feed.getEntries().size() > 0) { return feed; } String methodName = getCollectionMethod(o.getClass(), true); Object collection = null; Method m = null; try { m = o.getClass().getMethod(methodName, new Class[]{}); collection = m.invoke(o, new Object[]{}); } catch (Exception ex) { reportError("Collection for " + o.getClass().getName() + " can not be retrieved", ex); } setFeedFromCollection(factory, feed, o, pojoClass, collection, m.getReturnType(), m.getGenericReturnType(), writerUsed); return feed; }
protected Entry createEntryFromObject(Factory factory, Object o, Class<?> cls) throws Exception { Entry entry = factory.getAbdera().newEntry(); if (!buildEntry(entry, o, cls)) { setEntryProperties(factory, entry, o, cls); } if (entry.getContentElement() == null && entry.getExtensions().isEmpty()) { createEntryContent(factory, entry, o, cls); } return entry; }
@SuppressWarnings("unchecked") AbstractAtomElementBuilder<Object> builder = (AbstractAtomElementBuilder<Object>)getAtomBuilder(cls); if (builder == null) { return; setCommonElementProperties(factory, entry, builder, o); setEntryContent(factory, entry, content);
protected void setFeedFromCollection(Factory factory, Feed feed, Object wrapper, Class<?> wrapperCls, Object collection, Class<?> collectionCls, Type collectionType, boolean writerUsed) throws Exception { //CHECKSTYLE:ON Object[] arr = collectionCls.isArray() ? (Object[])collection : ((Collection<?>)collection).toArray(); Class<?> memberClass = InjectionUtils.getActualType(collectionType); for (Object o : arr) { Entry entry = createEntryFromObject(factory, o, memberClass); feed.addEntry(entry); } if (!writerUsed) { setFeedProperties(factory, feed, wrapper, wrapperCls, collection, collectionCls, collectionType); } }
(AbstractAtomElementBuilder<Object>)getAtomBuilder(wrapperCls); if (builder == null) { return; setCommonElementProperties(factory, feed, builder, wrapper);
private void writeAtomElement(Element atomElement, OutputStream os) throws IOException { Writer w = formattedOutput ? createWriter("prettyxml") : null; if (w != null) { atomElement.writeTo(w, os); } else { atomElement.writeTo(os); } }
public void writeTo(Object o, Class<?> cls, Type genericType, Annotation[] annotations, MediaType mt, MultivaluedMap<String, Object> headers, OutputStream os) throws IOException { boolean isFeed = isFeedRequested(mt); boolean isCollection = InjectionUtils.isSupportedCollectionOrArray(cls); if (isFeed && isCollection) { reportError("Atom feed can only be created from a collection wrapper", null); } else if (!isFeed && isCollection) { reportError("Atom entry can only be created from a single object", null); } Factory factory = Abdera.getNewFactory(); Element atomElement = null; try { if (isFeed && !isCollection) { atomElement = createFeedFromCollectionWrapper(factory, o, cls); } else if (!isFeed && !isCollection) { atomElement = createEntryFromObject(factory, o, cls); } } catch (Exception ex) { throw ExceptionUtils.toInternalServerErrorException(ex, null); } try { writeAtomElement(atomElement, os); } catch (IOException ex) { reportError("Atom element can not be serialized", ex); } }
protected Feed createFeedFromCollectionWrapper(Factory factory, Object o, Class<?> pojoClass) throws Exception { Feed feed = factory.newFeed(); boolean writerUsed = buildFeed(feed, o, pojoClass); if (feed.getEntries().size() > 0) { return feed; } String methodName = getCollectionMethod(o.getClass(), true); Object collection = null; Method m = null; try { m = o.getClass().getMethod(methodName, new Class[]{}); collection = m.invoke(o, new Object[]{}); } catch (Exception ex) { reportError("Collection for " + o.getClass().getName() + " can not be retrieved", ex); } setFeedFromCollection(factory, feed, o, pojoClass, collection, m.getReturnType(), m.getGenericReturnType(), writerUsed); return feed; }
protected AbstractAtomElementBuilder<?> getAtomBuilder(Class<?> pojoClass) { AbstractAtomElementBuilder<?> builder = getAtomClassElementHandler(atomClassBuilders, pojoClass); return builder == null && atomBuilders != null ? getAtomElementHandler(atomBuilders, pojoClass) : builder; }
protected Entry createEntryFromObject(Factory factory, Object o, Class<?> cls) throws Exception { Entry entry = factory.getAbdera().newEntry(); if (!buildEntry(entry, o, cls)) { setEntryProperties(factory, entry, o, cls); } if (entry.getContentElement() == null && entry.getExtensions().size() == 0) { createEntryContent(factory, entry, o, cls); } return entry; }