1 28 29 package com.idaremedia.antx.valueuri; 30 31 import org.apache.tools.ant.Project; 32 33 import com.idaremedia.antx.apis.Requester; 34 import com.idaremedia.antx.helpers.Tk; 35 import com.idaremedia.antx.starters.ValueURIHandlerSkeleton; 36 37 61 62 public final class ShortenStringURIHandler extends ValueURIHandlerSkeleton 63 { 64 static final int LEFT=0; 65 static final int RIGHT=LEFT+1; 66 private static final String DDD="..."; 67 68 71 public static final int MAXLEN= 41; 72 73 76 public static final int MINLEN= DDD.length(); 77 78 79 82 public ShortenStringURIHandler() 83 { 84 super(); 85 } 86 87 88 93 public String valueFrom(String uriFragment, String fullUri, Requester clnt) 94 { 95 final Project P = clnt.getProject(); 96 int maxlength = MAXLEN; 97 String ellipses= DDD; 98 int dropped = LEFT; 99 String longstring = uriFragment; 100 final int urilen= uriFragment.length(); 101 102 int i = longstring.indexOf("?"); 103 if (i>=0) { 104 longstring = longstring.substring(0,i++); 105 if (i<urilen) { 106 String s; 107 int j = uriFragment.indexOf(",,",i); 108 if (j>=0) { 109 s = Tk.resolveString(P,uriFragment.substring(i,j),true); 110 maxlength = Tk.integerFrom(s,MAXLEN); 111 112 i = uriFragment.indexOf(",,",j+2); 113 if (i<0) { 114 s = uriFragment.substring(j+2); 115 dropped = leftOrRight(s,LEFT,P); 116 } else { 117 s = uriFragment.substring(j+2,i); 118 dropped = leftOrRight(s,LEFT,P); 119 i += 2; 120 if (i<urilen) { 121 s = uriFragment.substring(i); 122 ellipses = Tk.resolveString(P,s,true); 123 } 124 } 125 } else { 126 s = Tk.resolveString(P,uriFragment.substring(i),true); 127 maxlength = Tk.integerFrom(s,MAXLEN); 128 } 129 } 130 } 131 if (maxlength<MINLEN) { 132 maxlength=MINLEN; 133 } 134 longstring = Tk.resolveString(P,longstring,true); 135 final int strlen = longstring.length(); 136 if (strlen>maxlength) { 137 switch (dropped) { 138 case LEFT: { 139 int from = strlen-maxlength+ellipses.length(); 140 if (from>=strlen) { 141 from = strlen-maxlength+DDD.length(); 142 ellipses = DDD; 143 } 144 longstring= ellipses+longstring.substring(from); 145 break; 146 } 147 default: { 148 int to = maxlength-ellipses.length(); 149 if (to<=0) { 150 to = maxlength-DDD.length(); 151 ellipses = DDD; 152 } 153 longstring = longstring.substring(0,to)+ellipses; 154 break; 155 } 156 } 157 } 158 return longstring; 159 } 160 161 162 static int leftOrRight(String s, int dflt, Project P) 163 { 164 s = Tk.resolveString(P,s,true); 165 s = s.toLowerCase(); 166 167 if ("left".equals(s)) { 168 return LEFT; 169 } 170 if ("right".equals(s)) { 171 return RIGHT; 172 } 173 return dflt; 174 } 175 } 176 177 178 | Popular Tags |