001: /*
002: * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions
006: * are met:
007: *
008: * - Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: *
011: * - Redistribution in binary form must reproduce the above copyright
012: * notice, this list of conditions and the following disclaimer in
013: * the documentation and/or other materials provided with the
014: * distribution.
015: *
016: * Neither the name of Sun Microsystems, Inc. or the names of
017: * contributors may be used to endorse or promote products derived
018: * from this software without specific prior written permission.
019: *
020: * This software is provided "AS IS," without a warranty of any
021: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
022: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
023: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
024: * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
025: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
026: * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
027: * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
028: * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
029: * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
030: * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
031: * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
032: *
033: * You acknowledge that Software is not designed, licensed or intended
034: * any nuclear facility.
035: */
036: package com.sun.portal.search.providers.faces;
037:
038: import com.sun.portal.search.soif.SOIF;
039: import java.util.logging.Level;
040: import java.util.logging.Logger;
041: import javax.faces.context.ExternalContext;
042: import javax.faces.context.FacesContext;
043: import javax.portlet.PortletRequest;
044: import javax.servlet.http.HttpServletRequest;
045: import javax.servlet.http.HttpServletResponse;
046:
047: public class SearchHit {
048: // following constants were originally defined in com.sun.portal.portlet.impl.PortletRequestConstants
049: // keys for portlet request attributes
050: public static String HTTP_SERVLET_REQUEST = "javax.portlet.portletc.httpServletRequest";
051: public static String HTTP_SERVLET_RESPONSE = "javax.portlet.portletc.httpServletResponse";
052: // key for sso token in PortletRequest attributes
053: public static String SSO_TOKEN = "javax.portlet.portletc.ssotoken";
054: //key for portlet name
055: public static String PORTLET_NAME = "javax.portlet.portletc.portletname";
056:
057: protected SOIF soif;
058: protected Logger logger = SearchLogger.getLogger(SearchHit.class);
059: private SearchDatabase sourceDatabase;
060: private String sorceDatabaseName;
061:
062: public SearchHit() {
063: };
064:
065: public SearchHit(SOIF soif) {
066: this .soif = soif;
067: }
068:
069: protected static HttpServletRequest getHttpServletRequest() {
070: HttpServletRequest req = null;
071: ExternalContext eContext = FacesContext.getCurrentInstance()
072: .getExternalContext();
073: Object request = eContext.getRequest();
074: if (request instanceof PortletRequest) {
075: PortletRequest pReq = (PortletRequest) request;
076: req = (HttpServletRequest) pReq
077: .getAttribute(HTTP_SERVLET_REQUEST);
078: } else if (request instanceof HttpServletRequest) {
079: req = (HttpServletRequest) request;
080: }
081:
082: return req;
083: }
084:
085: public String getTitle() {
086: String value = soif.getValue("hl-title");
087: if (value == null || value.length() == 0) {
088: value = soif.getValue("title");
089: }
090: return value;
091: }
092:
093: public String getDescription() {
094: String value = soif.getValue("hl-description");
095: if (value == null || value.length() == 0) {
096: value = soif.getValue("description");
097: }
098: return value;
099: }
100:
101: protected void sendRedirect(String url) throws Exception {
102: FacesContext fContext = FacesContext.getCurrentInstance();
103: ExternalContext eContext = fContext.getExternalContext();
104: Object res = eContext.getResponse();
105: try {
106: PortletRedirect pr = new PortletRedirect();
107: if (pr.redirect(res, url)) {
108: return;
109: }
110: } catch (java.lang.ClassNotFoundException cne) {
111: logger.log(Level.FINEST,
112: "expected exception if not deployed as portlet",
113: cne);
114: } catch (Exception e) {
115: logger.log(Level.WARNING, "sendRedirect_failed", e);
116: }
117: if (res instanceof HttpServletResponse) {
118: HttpServletResponse hRes = (HttpServletResponse) res;
119: FacesContext.getCurrentInstance().responseComplete();
120: try {
121: hRes.sendRedirect(url);
122: } catch (java.io.IOException ioe) {
123: logger.log(Level.WARNING, "sendRedirect_failed", ioe);
124:
125: }
126: }
127: }
128:
129: public String gotoDocument() {
130: String url = null;
131: url = soif.getValue("rd-display-url");
132: if (url == null) {
133: url = soif.getURL();
134: }
135: if (url != null) {
136: try {
137: sendRedirect(url);
138: } catch (Exception e) {
139: logger.log(Level.WARNING, "sendRedirect_failed", e);
140:
141: }
142: }
143: return null;
144: }
145:
146: public boolean isHasParent() {
147: return false;
148: }
149:
150: public String gotoParent() {
151: return null;
152: }
153:
154: public boolean isHasCategory() {
155: return (getCategory() != null);
156: }
157:
158: public String gotoCategory() {
159: getSourceDatabase().getSearchHandler().setCurrentCategoryId(
160: this .getCategory());
161: return getSourceDatabase().getSearchHandler().doBrowse();
162:
163: }
164:
165: public String getAuthor() {
166: return soif.getValue("author");
167: }
168:
169: public String getCategory() {
170: return soif.getValue("classification");
171: }
172:
173: public SearchHit createInstance(SOIF soif, String defaultType) {
174: return new SearchHit(soif);
175: }
176:
177: public SearchDatabase getSourceDatabase() {
178: return sourceDatabase;
179: }
180:
181: public String getSourceDatabaseName() {
182: return this .sorceDatabaseName;
183: }
184:
185: public void setSourceDatabase(SearchDatabase sourceDatabase) {
186: this .sourceDatabase = sourceDatabase;
187: }
188:
189: public void setSourceDatabaseName(String databaseName) {
190: this.sorceDatabaseName = databaseName;
191: }
192:
193: }
|