/**
*
*/
package org.sakaiproject.search.tool;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.sakaiproject.component.cover.ServerConfigurationService;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.search.api.SearchService;
import org.sakaiproject.search.tool.api.SherlockSearchBean;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.tool.api.ToolManager;
import org.sakaiproject.util.FormattedText;
/**
* @author ieb
*/
public class SherlockSearchBeanImpl implements SherlockSearchBean
{
private static final String IMAGE_ICON = "/images/sherlock.gif";
static final String UPDATE_URL = "/sakai.src";
static final String UPDATE_IMAGE = "/sakai.gif";
private SiteService siteService;
private String placementId;
private String siteId;
private Site currentSite;
private String baseURL;
private String portalBaseURL;
private ServletContext context;
public SherlockSearchBeanImpl(HttpServletRequest request, ServletContext context,
SearchService searchService, SiteService siteService,
ToolManager toolManager) throws IdUnusedException
{
this.context = context;
this.siteService = siteService;
this.placementId = toolManager.getCurrentPlacement().getId();
this.siteId = toolManager.getCurrentPlacement().getContext();
this.currentSite = this.siteService.getSite(this.siteId);
baseURL = getBaseURL();
portalBaseURL = getPortalBaseURL();
}
private String getBaseURL()
{
return ServerConfigurationService.getPortalUrl() + "/tool/"
+ placementId;
}
private String getPortalBaseURL()
{
return ServerConfigurationService.getPortalUrl() + "/directtool/"
+ placementId;
}
public String getSearchURL()
{
return portalBaseURL + "/index";
}
public String getSiteName()
{
return FormattedText.escapeHtml(currentSite.getTitle(),false);
}
public String getUpdateIcon()
{
return FormattedText.escapeHtml(baseURL + UPDATE_IMAGE,false);
}
public String getUpdateURL()
{
return FormattedText.escapeHtml(baseURL + UPDATE_URL,false);
}
public void sendIcon(HttpServletResponse response)
{
String realPath = context.getRealPath(IMAGE_ICON);
File f = new File(realPath);
int nbytes = (int) f.length();
response.setContentLength(nbytes);
InputStream is = null;
try
{
is = new FileInputStream(f);
byte[] b = new byte[4096];
OutputStream out = response.getOutputStream();
for (; nbytes > 0;)
{
int nb = is.read(b);
if (nb > 0)
{
out.write(b, 0, nb);
nbytes -= nb;
}
else
{
Thread.yield();
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
public String getSystemName()
{
return FormattedText.escapeHtml(ServerConfigurationService.getString("ui.service","Sakai"),false);
}
}