/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.app.webui.tagcloud; import java.io.IOException; import java.net.URLEncoder; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.SimpleTagSupport; import org.apache.log4j.Logger; import org.dspace.discovery.configuration.TagCloudConfiguration; import org.mcavallo.opencloud.Cloud; import org.mcavallo.opencloud.Tag; import org.mcavallo.opencloud.Cloud.Case; /** * @author kstamatis * */ public class TagCloudTag extends SimpleTagSupport{ private static Logger log = Logger.getLogger(TagCloudTag.class); TagCloudConfiguration parameters; Map<String, Integer> data; String index; String scope; String type = "0"; // 0=facet, 1=browse /** * */ public TagCloudTag() { // TODO Auto-generated constructor stub } public void doTag() throws JspException { PageContext pageContext = (PageContext) getJspContext(); JspWriter out = pageContext.getOut(); if (parameters == null) parameters = new TagCloudConfiguration(); try { Cloud cloud = new Cloud(); // create cloud if (parameters.getCloudCase().equals("Case.LOWER")) cloud.setTagCase(Case.LOWER); else if (parameters.getCloudCase().equals("Case.UPPER")) cloud.setTagCase(Case.UPPER); else if (parameters.getCloudCase().equals("Case.CAPITALIZATION")) cloud.setTagCase(Case.CAPITALIZATION); else if (parameters.getCloudCase().equals("Case.PRESERVE_CASE")) cloud.setTagCase(Case.PRESERVE_CASE); else if (parameters.getCloudCase().equals("Case.CASE_SENSITIVE")) cloud.setTagCase(Case.CASE_SENSITIVE); cloud.setMaxWeight(Double.parseDouble(parameters.getFontTo())); // max font size cloud.setMinWeight(Double.parseDouble(parameters.getFontFrom())); if (parameters.getTotalTags()==-1) cloud.setMaxTagsToDisplay(1000000); else cloud.setMaxTagsToDisplay(parameters.getTotalTags()); for (String subject : data.keySet()){ if (data.get(subject).intValue() > Integer.parseInt(parameters.getCuttingLevel())){ for (int i=0; i<data.get(subject).intValue(); i++){ Tag tag2 = new Tag(subject, ((HttpServletRequest) pageContext.getRequest()).getContextPath()+(scope!=null?scope:"")+(type.equals("0")?("/simple-search?filterquery="+URLEncoder.encode(subject,"UTF-8")+"&filtername="+index+"&filtertype=equals"):("/browse?type="+index+"&value="+subject))); cloud.addTag(tag2); } } } out.println("<div class=\"tagcloud\">"); int counter = 0; List<Tag> tagList = cloud.tags(new Tag.NameComparatorAsc()); if (parameters.getOrdering().equals("Tag.NameComparatorAsc")) tagList = cloud.tags(new Tag.NameComparatorAsc()); else if (parameters.getOrdering().equals("Tag.NameComparatorDesc")) tagList = cloud.tags(new Tag.NameComparatorDesc()); else if (parameters.getOrdering().equals("Tag.ScoreComparatorAsc")) tagList = cloud.tags(new Tag.ScoreComparatorAsc()); else if (parameters.getOrdering().equals("Tag.ScoreComparatorDesc")) tagList = cloud.tags(new Tag.ScoreComparatorDesc()); for (Tag tag : tagList) { String tagClass = ""; if (parameters.isRandomColors()){ if (counter==0){ tagClass = "tagcloud_1"; } else if (counter==1){ tagClass = "tagcloud_2"; } else if (counter==2){ tagClass = "tagcloud_3"; } } else { if (tag.getNormScore()>0.3f){ tagClass = "tagcloud_1"; } else if (tag.getNormScore()>0.2f){ tagClass = "tagcloud_2"; } else if (tag.getNormScore()>0.1f){ tagClass = "tagcloud_3"; } } String scoreSup = ""; if (parameters.isDisplayScore()){ scoreSup = "<span class=\"tag_sup\"><sup>("+tag.getScoreInt()+")</sup></span>"; } out.println("<a class=\""+tagClass+"\" href=\"" + tag.getLink().replace(" & ", " %26 ") +"\" style=\"font-size: "+ tag.getWeight() +"em;\">"+ tag.getName() + scoreSup +"</a>"); counter ++; if (counter == 3) counter = 0; } out.println("</div>"); } catch (IOException e) { e.printStackTrace(); } } /** * @param parameters the parameters to set */ public void setParameters(TagCloudConfiguration parameters) { this.parameters = parameters; } public void setData(Map<String, Integer> data) { this.data = data; } public void setIndex(String index) { this.index = index; } public void setScope(String scope) { this.scope = scope; } public void setType(String type) { this.type = type; } }