1 package com.atlassian.plugin.webresource;
2
3 import org.apache.commons.lang.StringEscapeUtils;
4 import org.apache.commons.lang.StringUtils;
5 import org.apache.commons.lang.BooleanUtils;
6
7 import java.util.Map;
8 import java.util.List;
9 import java.util.Arrays;
10
11 public class CssWebResource extends AbstractWebResourceFormatter
12 {
13 protected static final WebResourceFormatter FORMATTER = new CssWebResource();
14
15 private static final String CSS_EXTENSION = ".css";
16 private static final String MEDIA_PARAM = "media";
17 private static final String IEONLY_PARAM = "ieonly";
18 private static final String CONDITION_PARAM = "conditionalComment";
19
20 private static final List<String> HANDLED_PARAMETERS = Arrays.asList("title", MEDIA_PARAM, "charset");
21
22 public boolean matches(String name)
23 {
24 return name != null && name.endsWith(CSS_EXTENSION);
25 }
26
27 public String formatResource(String url, Map<String, String> params)
28 {
29 StringBuffer buffer = new StringBuffer();
30 buffer.append("<link type=\"text/css\" rel=\"stylesheet\" href=\"");
31 buffer.append(StringEscapeUtils.escapeHtml(url)).append("\"");
32 List attributes = getParametersAsAttributes(params);
33 if (attributes != null && attributes.size() > 0)
34 {
35 buffer.append(" ").append(StringUtils.join(attributes.iterator(), " "));
36 }
37
38
39 if (!params.containsKey(MEDIA_PARAM))
40 {
41 buffer.append(" media=\"all\"");
42 }
43 buffer.append(">\n");
44
45
46 if (params.containsKey(CONDITION_PARAM))
47 {
48 String condition = params.get(CONDITION_PARAM);
49 buffer.insert(0, "<!--[if " + condition + "]>\n");
50 buffer.append("<![endif]-->\n");
51 }
52 else if (BooleanUtils.toBoolean(params.get(IEONLY_PARAM)))
53 {
54 buffer.insert(0, "<!--[if IE]>\n");
55 buffer.append("<![endif]-->\n");
56 }
57
58 return buffer.toString();
59 }
60
61 protected List<String> getAttributeParameters()
62 {
63 return HANDLED_PARAMETERS;
64 }
65 }