package cn.newgxu.bbs.common.filter.ubb;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import cn.newgxu.bbs.common.filter.AbstractBaseFilter;
import cn.newgxu.bbs.common.filter.Filter;
/**
*
* @author polly
* @since 4.0.0
* @version $Revision 1.1$
*/
public class MpFilter extends AbstractBaseFilter {
public MpFilter(Filter filter) {
super(filter);
}
// private static final String MP_PATTERN_STRING = "\\[mp=(.+?),(.+?)\\](.+?)\\[\\/mp\\]";
//
// private static final String MP_APPEND_1 = "<br><OBJECT class=OBJECT "
// + "id=MediaPlayer height=\"";
//
// private static final String MP_APPEND_2 = "\" width=\"";
//
// private static final String MP_APPEND_3 = "\" align=middle classid=CLSID:"
// + "22d6f312-b0f6-11d0-94ab-0080c74c7e95><PARAM NAME=\"ShowStatusBar\""
// + " VALUE=\"-1\"><PARAM NAME=\"Filename\" VALUE=\"";
//
// private static final String MP_APPEND_4 = "\"><embed type=application/"
// + "x-oleobject codebase=http://activex.microsoft.com/activex/controls/"
// + "mplayer/en/nsmp2inf.cab#Version=5,1,52,701 flename=mp src=\"";
//
// private static final String MP_APPEND_5 = "\" width=\"";
//
// private static final String MP_APPEND_6 = "\" height=\"";
//
// private static final String MP_APPEND_7 = "\"></embed></OBJECT><br>";
private static final String TEMP_CHAR="-!-!-!-!-";
private static final String MP_PATTERN_STRING = "\\[mp(.+?)\\](.+?)\\[\\/mp\\]";
private static final String MP_APPEND_1 = "<object type=\"application/x-shockwave-flash\" data=\"/js/audioplayer.swf\" width=\"290\" height=\"24\" id=\"ID70554\"><param name=\"movie\" "
+"value=\"/js/audioplayer.swf\" /><param name=\"FlashVars\" "
+"value=\"playerID=ID70554&bg=0xCDDFF3&leftbg=0x357DCE&lefticon=0xF2F2F2&rightbg=0x357DCE&rightbghover=0x4499EE&righticon=0xF2F2F2&righticonhover=0xFFFFFF&text=0x357DCE&slider=0x357DCE&track=0xFFFFFF&border=0xFFFFFF"
+"&loader=0x8EC2F4&loop=no&autostart=no&soundFile=";
private static final String MP_APPEND_2 = "\" /><param name=\"qualit\" value=\"high\" /><param name=\"menu\" value=\"false\" /><param name=\"wmode\" value=\"transparent\" /></object>";
//
// private static final String MP_APPEND_3 = "\" align=middle classid=CLSID:"
// + "22d6f312-b0f6-11d0-94ab-0080c74c7e95><PARAM NAME=\"ShowStatusBar\""
// + " VALUE=\"-1\"><PARAM NAME=\"Filename\" VALUE=\"";
//
// private static final String MP_APPEND_4 = "\"><embed type=application/"
// + "x-oleobject codebase=http://activex.microsoft.com/activex/controls/"
// + "mplayer/en/nsmp2inf.cab#Version=5,1,52,701 flename=mp src=\"";
//
// private static final String MP_APPEND_5 = "\" width=\"";
//
// private static final String MP_APPEND_6 = "\" height=\"";
//
// private static final String MP_APPEND_7 = "\"></embed></OBJECT><br>";
public String convert(String input) {
try {
return mpConverter(input);
} catch (Exception e) {
e.printStackTrace();
return input;
}
}
// private String mpConverter(String input) throws Exception {
// Pattern pattern = Pattern.compile(MP_PATTERN_STRING, 2);
// Matcher matcher = pattern.matcher(input);
// StringBuffer stringbuffer = new StringBuffer();
// for (boolean flag = matcher.find(); flag; flag = matcher.find()) {
// matcher.appendReplacement(stringbuffer, MP_APPEND_1
// + matcher.group(2) + MP_APPEND_2 + matcher.group(1)
// + MP_APPEND_3 + matcher.group(3) + MP_APPEND_4
// + matcher.group(3) + MP_APPEND_5 + matcher.group(1)
// + MP_APPEND_6 + matcher.group(2) + MP_APPEND_7);
// }
//
// matcher.appendTail(stringbuffer);
// return stringbuffer.toString();
// }
private String mpConverter(String input) throws Exception {
Pattern pattern = Pattern.compile(MP_PATTERN_STRING, 2);
Matcher matcher = pattern.matcher(input);
StringBuffer stringbuffer = new StringBuffer();
for (boolean flag = matcher.find(); flag; flag = matcher.find()) {
matcher.appendReplacement(stringbuffer, MP_APPEND_1
+ StringUtils.replace(matcher.group(2), ".yws", " ") + MP_APPEND_2);
}
matcher.appendTail(stringbuffer);
return stringbuffer.toString();
}
/**
* 文件名中有 $ ,要使用 convert 方法时,不能得到想要的结果。
* 这里使用其他路径得到想要的结果。
* 保留了原来的命名规则
*
* @param input
* @return
*/
public String newConvert(String input) {
try {
Pattern pattern = Pattern.compile(MP_PATTERN_STRING, 2);
Matcher matcher = pattern.matcher(input);
StringBuffer stringbuffer = new StringBuffer();
String temp=null;
for (boolean flag = matcher.find(); flag; flag = matcher.find()) {
temp=matcher.group(2);
temp=temp.replace("$",TEMP_CHAR);
matcher.appendReplacement(stringbuffer, MP_APPEND_1
+ StringUtils.replace(temp, ".yws", " ") + MP_APPEND_2);
}
stringbuffer=matcher.appendTail(stringbuffer);
temp=stringbuffer.toString();
return temp.replace(TEMP_CHAR,"$");
} catch (Exception e) {
e.printStackTrace();
return input;
}
}
public static void main(String a[]){
MpFilter mpf=new MpFilter(null);
System.out.println(mpf.newConvert("<br /><p>sasa</p><div>[mp=500,350]/upload/mp3/2011/10/8/16/$1318064231512_10.mp3[/mp]</div>"));
System.out.println(mpf.convert("<br /><p>sasa</p><div>[mp=500,350]/upload/mp3/2011/10/8/16/$1318064231512_10.mp3[/mp]</div>"));
}
}