001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU General
007: * Public License Version 2 only ("GPL") or the Common Development and Distribution
008: * License("CDDL") (collectively, the "License"). You may not use this file except in
009: * compliance with the License. You can obtain a copy of the License at
010: * http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
011: * License for the specific language governing permissions and limitations under the
012: * License. When distributing the software, include this License Header Notice in
013: * each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP. Sun
014: * designates this particular file as subject to the "Classpath" exception as
015: * provided by Sun in the GPL Version 2 section of the License file that
016: * accompanied this code. If applicable, add the following below the License Header,
017: * with the fields enclosed by brackets [] replaced by your own identifying
018: * information: "Portions Copyrighted [year] [name of copyright owner]"
019: *
020: * Contributor(s):
021: *
022: * The Original Software is NetBeans. The Initial Developer of the Original Software
023: * is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
024: * Rights Reserved.
025: *
026: * If you wish your version of this file to be governed by only the CDDL or only the
027: * GPL Version 2, indicate your decision by adding "[Contributor] elects to include
028: * this software in this distribution under the [CDDL or GPL Version 2] license." If
029: * you do not indicate a single choice of license, a recipient has the option to
030: * distribute your version of this file under either the CDDL, the GPL Version 2 or
031: * to extend the choice of license to its licensees as provided above. However, if
032: * you add GPL Version 2 code and therefore, elected the GPL Version 2 license, then
033: * the option applies only if the new code is made subject to such option by the
034: * copyright holder.
035: */
036:
037: package org.netbeans.installer.infra.server.client.servlets;
038:
039: import java.io.IOException;
040: import java.io.PrintWriter;
041: import java.util.ArrayList;
042: import java.util.List;
043: import javax.ejb.EJB;
044: import javax.servlet.ServletException;
045: import javax.servlet.http.HttpServlet;
046: import javax.servlet.http.HttpServletRequest;
047: import javax.servlet.http.HttpServletResponse;
048: import org.netbeans.installer.infra.server.ejb.Manager;
049: import org.netbeans.installer.infra.server.ejb.ManagerException;
050: import org.netbeans.installer.product.components.Product;
051: import org.netbeans.installer.utils.StringUtils;
052: import org.netbeans.installer.utils.SystemUtils;
053:
054: /**
055: *
056: * @author Kirill Sorokin
057: * @version
058: */
059: public class Feed extends HttpServlet {
060: @EJB
061: private Manager manager;
062:
063: protected void doGet(HttpServletRequest request,
064: HttpServletResponse response) throws ServletException,
065: IOException {
066: final PrintWriter out = response.getWriter();
067: final String[] registries = request
068: .getParameterValues("registry");
069:
070: try {
071: List<Product> components;
072: String feedType;
073:
074: // if the user did not specify any registry to look for the components,
075: // we cannot guess for him - will return an empty feed
076: if ((registries == null) || (registries.length == 0)) {
077: components = new ArrayList<Product>();
078: } else {
079: components = manager.getProducts(registries);
080: }
081:
082: feedType = request.getParameter("feed-type");
083: if (feedType == null) {
084: feedType = "rss-2.0";
085: }
086:
087: response.setContentType("text/xml");
088:
089: out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
090:
091: if (feedType.equals("rss-2.0")) {
092: buildRss(components, out);
093: }
094: } catch (ManagerException e) {
095: response
096: .setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
097: e.printStackTrace(out);
098: }
099:
100: out.close();
101: }
102:
103: private void buildRss(List<Product> components, PrintWriter out)
104: throws IOException {
105: out.println("<rss version=\"2.0\">");
106: out.println(" <channel>");
107:
108: out
109: .println(" <title><![CDATA[NetBeans Installer Components Feed]]></title>");
110: out.println(" <link>http://localhost/</link>");
111: out
112: .println(" <description><![CDATA[NetBeans Installer Components Feed]]></description>");
113:
114: for (Product component : components) {
115: out.println(" <item>");
116: out.println(" <guid>" + component.getUid()
117: + "_" + component.getVersion() + "</guid>");
118: out.println(" <title><![CDATA["
119: + component.getDisplayName() + "]]></title>");
120: out
121: .println(" <link>http://localhost/</link>");
122: out.println(" <description><![CDATA["
123: + component.getDescription() + "]]></description>");
124: out.println(" <pubDate>"
125: + StringUtils.httpFormat(component.getBuildDate())
126: + "</pubDate>");
127: out.println(" </item>");
128: }
129:
130: out.println(" </channel>");
131: out.println("</rss>");
132: }
133: }
|