1 25 29 package org.jresearch.gossip.util; 30 31 import java.util.Map ; 32 33 import org.tiling.memo.LruCacheFactory; 34 35 39 public class HtmlGradient { 40 41 private static Map resultCache = new LruCacheFactory(1000).createCache(); 42 43 private final static String ASTR = "*"; 44 45 private final static String TABLE_START1 = "<table style=\"empty-cells: show;\" cellspacing=\"0\" cellpadding=\"0\" height=\""; 46 47 private final static String TABLE_START2 = "\" width=\""; 48 49 private final static String TABLE_START3 = "\" >"; 50 51 private final static String TABLE_END = "</table>"; 52 53 private final static String TR_START = "<tr>"; 54 55 private final static String TR_END = "</tr>"; 56 57 private final static String TD_START = "<td width=\"2\" bgcolor=\""; 58 59 private final static String TD_END = "\"></td>"; 60 61 private final static String SIZE = "100%"; 62 63 66 public final static int DIRECTION_V = 0; 67 68 71 public final static int DIRECTION_H = 1; 72 73 80 public static String makeHGradientHtml(String startColor, String endColor, 81 int dens, String height) { 82 83 return makeGradientHtml(startColor, endColor, dens, height, DIRECTION_H); 84 85 } 86 87 94 public static String makeVGradientHtml(String startColor, String endColor, 95 int dens, String width) { 96 return makeGradientHtml(startColor, endColor, dens, width, DIRECTION_V); 97 } 98 99 107 public static String makeGradientHtml(String startColor, String endColor, 108 int dens, String size, int direction) { 109 StringBuffer key = new StringBuffer (); 110 key.append(startColor); 111 key.append(ASTR); 112 key.append(endColor); 113 key.append(ASTR); 114 key.append(dens); 115 key.append(ASTR); 116 key.append(size); 117 key.append(ASTR); 118 key.append(direction); 119 Object value = resultCache.get(key); 120 121 if ((value == null) && !resultCache.containsKey(key)) { 122 String height = SIZE; 123 String width = SIZE; 124 String cell_start = TD_START; 125 String cell_end = TD_END; 126 switch (direction) { 127 case DIRECTION_V: 128 width = size; 129 cell_start = TR_START + cell_start; 130 cell_end += TR_END; 131 break; 132 case DIRECTION_H: 133 height = size; 134 break; 135 } 136 137 int[] sColor = { Integer.parseInt(startColor.substring(0, 2), 16), 138 Integer.parseInt(startColor.substring(2, 4), 16), 139 Integer.parseInt(startColor.substring(4), 16) }; 140 int[] cDelta = { 141 Integer.parseInt(endColor.substring(0, 2), 16) - sColor[0], 142 Integer.parseInt(endColor.substring(2, 4), 16) - sColor[1], 143 Integer.parseInt(endColor.substring(4), 16) - sColor[2] }; 144 145 StringBuffer result = new StringBuffer (); 146 result.append(TABLE_START1); 147 result.append(height); 148 result.append(TABLE_START2); 149 result.append(width); 150 result.append(TABLE_START3); 151 if (direction == DIRECTION_H) { 152 result.append(TR_START); 153 } 154 155 for (int i = 0; i < dens; i++) { 156 result.append(cell_start); 157 result.append(Integer.toHexString(sColor[0] 158 + Math.round(i * cDelta[0] / dens))); 159 result.append(Integer.toHexString(sColor[1] 160 + Math.round(i * cDelta[1] / dens))); 161 result.append(Integer.toHexString(sColor[2] 162 + Math.round(i * cDelta[2] / dens))); 163 result.append(cell_end); 164 } 165 if (direction == DIRECTION_H) { 166 result.append(TR_END); 167 } 168 result.append(TABLE_END); 169 value = result.toString(); 170 resultCache.put(key, value); 171 } 172 173 return (String ) value; 174 } 175 } | Popular Tags |