Search in sources :

Example 1 with Channel

use of com.sun.syndication.feed.rss.Channel in project sis by apache.

the class LocationServlet method init.

/**
 * Read GeoRSS data (location information provide sis-location-config.xml )
 * and build quad-tree.
 *
 * @param config
 *          Servlet configuration file
 * @exception ServletException
 *              General exception for servlet
 */
@SuppressWarnings("unchecked")
public void init(ServletConfig config) throws ServletException {
    this.context = config.getServletContext();
    long startTime = 0;
    long endTime = 0;
    int capacity = -1, depth = -1;
    this.qtreeIdxPath = this.context.getInitParameter("org.apache.sis.services.config.qIndexPath");
    this.georssStoragePath = this.context.getInitParameter("org.apache.sis.services.config.geodataPath");
    if (!this.qtreeIdxPath.endsWith("/"))
        this.qtreeIdxPath += "/";
    if (!this.georssStoragePath.endsWith("/"))
        this.georssStoragePath += "/";
    InputStream indexStream = null;
    try {
        indexStream = new FileInputStream(qtreeIdxPath + "node_0.txt");
    } catch (FileNotFoundException e) {
        System.out.println("[INFO] Existing qtree index at: [" + qtreeIdxPath + "] not found. Creating new index.");
    }
    if (indexStream != null) {
        startTime = System.currentTimeMillis();
        this.tree = QuadTreeReader.readFromFile(qtreeIdxPath, "tree_config.txt", "node_0.txt");
        try {
            indexStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        endTime = System.currentTimeMillis();
        this.timeToLoad = "Quad Tree fully loaded from index files in " + Double.toString((endTime - startTime) / 1000L) + " seconds";
        System.out.println("[INFO] Finished loading tree from stored index");
    } else {
        startTime = System.currentTimeMillis();
        WireFeedInput wf = new WireFeedInput(true);
        // read quad tree properties set in config xml file
        InputStream configStream = null;
        try {
            configStream = new FileInputStream(this.context.getInitParameter("org.apache.sis.services.config.filePath"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (configStream != null) {
            DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
            try {
                DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
                Document configDoc = docBuilder.parse(configStream);
                NodeList capacityNode = configDoc.getElementsByTagName("capacity");
                if (capacityNode.item(0) != null) {
                    capacity = Integer.parseInt(capacityNode.item(0).getFirstChild().getNodeValue());
                }
                NodeList depthNode = configDoc.getElementsByTagName("depth");
                if (depthNode.item(0) != null) {
                    depth = Integer.parseInt(depthNode.item(0).getFirstChild().getNodeValue());
                }
                // TODO make this
                this.tree = new QuadTree(capacity, depth);
                // configurable
                NodeList urlNodes = configDoc.getElementsByTagName("url");
                for (int i = 0; i < urlNodes.getLength(); i++) {
                    // read in georss and build tree
                    String georssUrlStr = urlNodes.item(i).getFirstChild().getNodeValue();
                    WireFeed feed = null;
                    try {
                        feed = wf.build(new XmlReader(new URL(georssUrlStr)));
                    } catch (Exception e) {
                        System.out.println("[ERROR] Error obtaining geodata url: [" + georssUrlStr + "]: Message: " + e.getMessage() + ": skipping and continuing");
                        continue;
                    }
                    Channel c = (Channel) feed;
                    List<Item> items = (List<Item>) c.getItems();
                    for (Item item : items) {
                        GeoRSSModule geoRSSModule = (GeoRSSModule) item.getModule(GeoRSSModule.GEORSS_GEORSS_URI);
                        if (geoRSSModule == null)
                            geoRSSModule = (GeoRSSModule) item.getModule(GeoRSSModule.GEORSS_GML_URI);
                        if (geoRSSModule == null)
                            geoRSSModule = (GeoRSSModule) item.getModule(GeoRSSModule.GEORSS_W3CGEO_URI);
                        // then discard it
                        if (geoRSSModule != null && geoRSSModule.getPosition() != null) {
                            String filename = "";
                            if (item.getGuid() != null)
                                filename = cleanStr(item.getGuid().getValue()) + ".txt";
                            else
                                filename = cleanStr(item.getLink()) + ".txt";
                            GeoRSSData data = new GeoRSSData(filename, new DirectPosition2D(geoRSSModule.getPosition().getLongitude(), geoRSSModule.getPosition().getLatitude()));
                            if (this.tree.insert(data)) {
                                data.saveToFile(item, geoRSSModule, georssStoragePath);
                            } else {
                                System.out.println("[INFO] Unable to store data at location " + data.getLatLon().y + ", " + data.getLatLon().x + " under filename " + data.getFileName());
                            }
                        }
                    }
                }
                configStream.close();
                endTime = System.currentTimeMillis();
                this.timeToLoad = "Quad Tree fully loaded from retrieving GeoRSS files over the network in " + Double.toString((endTime - startTime) / 1000L) + " seconds";
                QuadTreeWriter.writeTreeToFile(tree, qtreeIdxPath);
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        } else {
            throw new ServletException("Unable to read location service XML config: null!");
        }
    }
}
Also used : QuadTree(org.apache.sis.index.tree.QuadTree) DocumentBuilderFactory(javax.xml.parsers.DocumentBuilderFactory) FileNotFoundException(java.io.FileNotFoundException) Document(org.w3c.dom.Document) DirectPosition2D(org.apache.sis.geometry.DirectPosition2D) WireFeed(com.sun.syndication.feed.WireFeed) URL(java.net.URL) SAXException(org.xml.sax.SAXException) ServletException(javax.servlet.ServletException) Item(com.sun.syndication.feed.rss.Item) WireFeedInput(com.sun.syndication.io.WireFeedInput) ArrayList(java.util.ArrayList) NodeList(org.w3c.dom.NodeList) List(java.util.List) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) NodeList(org.w3c.dom.NodeList) Channel(com.sun.syndication.feed.rss.Channel) IOException(java.io.IOException) XmlReader(com.sun.syndication.io.XmlReader) FileInputStream(java.io.FileInputStream) TransformerException(javax.xml.transform.TransformerException) ServletException(javax.servlet.ServletException) TransformerConfigurationException(javax.xml.transform.TransformerConfigurationException) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) SAXException(org.xml.sax.SAXException) DocumentBuilder(javax.xml.parsers.DocumentBuilder) GeoRSSModule(com.sun.syndication.feed.module.georss.GeoRSSModule) GeoRSSData(org.apache.sis.index.tree.GeoRSSData)

Example 2 with Channel

use of com.sun.syndication.feed.rss.Channel in project halo by ruibaby.

the class HaloUtil method getRss.

/**
 * 生成rss
 * @param posts posts
 * @return string
 * @throws FeedException
 */
public static String getRss(List<Post> posts) throws FeedException {
    Channel channel = new Channel("rss_2.0");
    if (null == HaloConst.OPTIONS.get("site_title")) {
        channel.setTitle("");
    } else {
        channel.setTitle(HaloConst.OPTIONS.get("site_title"));
    }
    if (null == HaloConst.OPTIONS.get("site_url")) {
        channel.setLink("");
    } else {
        channel.setLink(HaloConst.OPTIONS.get("site_url"));
    }
    if (null == HaloConst.OPTIONS.get("seo_desc")) {
        channel.setDescription("");
    } else {
        channel.setDescription(HaloConst.OPTIONS.get("seo_desc"));
    }
    channel.setLanguage("zh-CN");
    List<Item> items = new ArrayList<>();
    for (Post post : posts) {
        Item item = new Item();
        item.setTitle(post.getPostTitle());
        Content content = new Content();
        String value = post.getPostContent();
        char[] xmlChar = value.toCharArray();
        for (int i = 0; i < xmlChar.length; ++i) {
            if (xmlChar[i] > 0xFFFD) {
                xmlChar[i] = ' ';
            } else if (xmlChar[i] < 0x20 && xmlChar[i] != 't' & xmlChar[i] != 'n' & xmlChar[i] != 'r') {
                xmlChar[i] = ' ';
            }
        }
        value = new String(xmlChar);
        content.setValue(value);
        item.setContent(content);
        item.setLink(HaloConst.OPTIONS.get("site_url") + "/article/" + post.getPostUrl());
        item.setPubDate(post.getPostDate());
        items.add(item);
    }
    channel.setItems(items);
    WireFeedOutput out = new WireFeedOutput();
    return out.outputString(channel);
}
Also used : Item(com.sun.syndication.feed.rss.Item) Post(cc.ryanc.halo.model.domain.Post) Content(com.sun.syndication.feed.rss.Content) Channel(com.sun.syndication.feed.rss.Channel) WireFeedOutput(com.sun.syndication.io.WireFeedOutput)

Example 3 with Channel

use of com.sun.syndication.feed.rss.Channel in project tale by otale.

the class TaleUtils method getRssXml.

/**
 * 获取RSS输出
 */
public static String getRssXml(java.util.List<Contents> articles) throws FeedException {
    Channel channel = new Channel("rss_2.0");
    channel.setTitle(TaleConst.OPTIONS.get("site_title", ""));
    channel.setLink(Commons.site_url());
    channel.setDescription(TaleConst.OPTIONS.get("site_description", ""));
    channel.setLanguage("zh-CN");
    java.util.List<Item> items = new ArrayList<>();
    articles.forEach(post -> {
        Item item = new Item();
        item.setTitle(post.getTitle());
        Content content = new Content();
        String value = Theme.article(post.getContent());
        char[] xmlChar = value.toCharArray();
        for (int i = 0; i < xmlChar.length; ++i) {
            if (xmlChar[i] > 0xFFFD) {
                // 直接替换掉0xb
                xmlChar[i] = ' ';
            } else if (xmlChar[i] < 0x20 && xmlChar[i] != 't' & xmlChar[i] != 'n' & xmlChar[i] != 'r') {
                // 直接替换掉0xb
                xmlChar[i] = ' ';
            }
        }
        value = new String(xmlChar);
        content.setValue(value);
        item.setContent(content);
        item.setLink(Theme.permalink(post.getCid(), post.getSlug()));
        item.setPubDate(DateKit.toDate(post.getCreated()));
        items.add(item);
    });
    channel.setItems(items);
    WireFeedOutput out = new WireFeedOutput();
    return out.outputString(channel);
}
Also used : Item(com.sun.syndication.feed.rss.Item) java.util(java.util) Content(com.sun.syndication.feed.rss.Content) Channel(com.sun.syndication.feed.rss.Channel) WireFeedOutput(com.sun.syndication.io.WireFeedOutput)

Aggregations

Channel (com.sun.syndication.feed.rss.Channel)3 Item (com.sun.syndication.feed.rss.Item)3 Content (com.sun.syndication.feed.rss.Content)2 WireFeedOutput (com.sun.syndication.io.WireFeedOutput)2 Post (cc.ryanc.halo.model.domain.Post)1 WireFeed (com.sun.syndication.feed.WireFeed)1 GeoRSSModule (com.sun.syndication.feed.module.georss.GeoRSSModule)1 WireFeedInput (com.sun.syndication.io.WireFeedInput)1 XmlReader (com.sun.syndication.io.XmlReader)1 FileInputStream (java.io.FileInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 URL (java.net.URL)1 java.util (java.util)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 ServletException (javax.servlet.ServletException)1 DocumentBuilder (javax.xml.parsers.DocumentBuilder)1 DocumentBuilderFactory (javax.xml.parsers.DocumentBuilderFactory)1