am.ik.categolj2.app.feed.RssEntryFeedView.java Source code

Java tutorial

Introduction

Here is the source code for am.ik.categolj2.app.feed.RssEntryFeedView.java

Source

/*
 * Copyright (C) 2014 Toshiaki Maki
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package am.ik.categolj2.app.feed;

import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import am.ik.categolj2.domain.model.EntryFormat;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.AbstractView;

import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;

@Component
public class RssEntryFeedView extends AbstractView {
    @Value("${categolj2.title}")
    private String feedTitle;
    @Value("${categolj2.url}")
    private String feedLink;
    @Value("${categolj2.description}")
    private String feedDescription;

    public RssEntryFeedView() {
        setContentType("application/rss+xml");
    }

    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        response.setContentType(getContentType());

        SyndFeed feed = new SyndFeedImpl();
        feed.setTitle(feedTitle);
        feed.setEncoding("UTF-8");
        feed.setLink(feedLink);
        feed.setPublishedDate(new Date());
        feed.setDescription(feedDescription);
        feed.setFeedType("rss_2.0");

        FeedEntries entries = (FeedEntries) model.get("entries");
        List<SyndEntry> feedEntries = entries.getEntries().stream().map(e -> {
            SyndContent description = new SyndContentImpl();
            EntryFormat format = EntryFormat.valueOf(e.getFormat().toUpperCase());
            description.setValue("<![CDATA[" + format.format(e.getContents()) + "]]>");
            description.setType("text/html");

            SyndEntry entry = new SyndEntryImpl();
            entry.setTitle(e.getTitle());
            entry.setLink(feed.getLink() + "#entries/" + e.getId());
            entry.setPublishedDate(e.getCreatedDate().toDate());
            entry.setUpdatedDate(e.getLastModifiedDate().toDate());
            entry.setDescription(description);
            return entry;
        }).collect(Collectors.toList());
        feed.setEntries(feedEntries);

        CustomizedWireFeedOutput feedOutput = new CustomizedWireFeedOutput();
        ServletOutputStream out = response.getOutputStream();
        feedOutput.output(feed.createWireFeed(), new OutputStreamWriter(out, feed.getEncoding()), true);
    }
}