package org.osbl.client.wings;
import org.wings.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.net.URLEncoder;
import java.io.UnsupportedEncodingException;
public class XLabel
extends SLabel
implements LowLevelEventListener
{
private static final Pattern PATTERN = Pattern.compile("\\[[^\\[\\]]+\\]");
String rawText;
boolean ajaxLinking;
private String event;
public boolean isAjaxLinking() {
return ajaxLinking;
}
public void setAjaxLinking(boolean ajaxLinking) {
this.ajaxLinking = ajaxLinking;
setText(parse(rawText));
}
public void setXText(String rawText) {
this.rawText = rawText;
setText(parse(rawText));
}
protected String parse(String xText) {
if (xText == null)
return null;
StringBuffer buffer = new StringBuffer("<html>");
Matcher matcher = PATTERN.matcher(xText);
while (matcher.find()) {
String link = xText.substring(matcher.start() + 1, matcher.end() - 1);
int pos = link.indexOf(' ');
if (pos != -1)
matcher.appendReplacement(buffer, "<a href=\"" + encode(link.substring(0, pos)) + "\">" + link.substring(pos + 1) + "</a>");
else
matcher.appendReplacement(buffer, "<a href=\"" + encode(link) + "\">" + link + "</a>");
}
matcher.appendTail(buffer);
return buffer.toString();
}
private String encode(String link) {
if (ajaxLinking) {
int pos = link.indexOf('?');
if (pos != -1)
link = link.substring(pos + 1);
try {
link = URLEncoder.encode(link, "UTF-8");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "javascript:wingS.request.sendEvent(null,true,true,'" + getName() + "', '1&" + link + "');";
}
else
return link;
}
public void processLowLevelEvent(String name, String[] values) {
event = values[0];
SForm.addArmedComponent(this);
}
public void fireIntermediateEvents() {
}
public void fireFinalEvents() {
super.fireFinalEvents();
if (event != null) {
handleEvent();
event = null;
}
}
protected void handleEvent() {
}
public boolean isEpochCheckEnabled() {
return false;
}
}
|