| /* |
| * $Id$ |
| * $Revision$ $Date$ |
| * |
| * ============================================================================== |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package wicket.extensions.markup.html.basic; |
| |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| import wicket.markup.ComponentTag; |
| import wicket.markup.MarkupStream; |
| import wicket.markup.html.basic.Label; |
| import wicket.model.IModel; |
| |
| /** |
| * If you have email addresses or web URLs in the data that you are displaying, |
| * then you can automatically display those pieces of data as hyperlinks, you |
| * will not have to take any action to convert that data. |
| * <p> |
| * Email addresses will be wrapped with a <a |
| * href="mailto:xxx">xxx</a> tag, where "xxx" is the email address that |
| * was detected. |
| * <p> |
| * Web URLs will be wrapped with a <a href="xxx">xxx</a> tag, where |
| * "xxx" is the URL that was detected (it can be any valid URL type, http://, |
| * https://, ftp://, etc...) |
| * |
| * @author Juergen Donnerstag |
| */ |
| public final class SmartLinkLabel extends Label |
| { |
| /** Email address pattern */ |
| private static final Pattern emailPattern = Pattern.compile("[\\w\\.-]+@[\\w\\.-]+", |
| Pattern.DOTALL); |
| |
| private static final String emailReplacePattern = "<a href=\"mailto:$0\">$0</a>"; |
| |
| /** URL pattern */ |
| private static final Pattern urlPattern = Pattern.compile( |
| "([a-zA-Z]+://[\\w\\.\\-\\:\\/]+)[\\w\\.:\\-/?&=%]*", Pattern.DOTALL); |
| |
| private static final String urlReplacePattern = "<a href=\"$0\">$1</a>"; |
| |
| /** |
| * @see Label#Label(String, String) |
| */ |
| public SmartLinkLabel(String name, String label) |
| { |
| super(name, label); |
| } |
| |
| /** |
| * @see Label#Label(String, IModel) |
| */ |
| public SmartLinkLabel(String name, IModel model) |
| { |
| super(name, model); |
| } |
| |
| /** |
| * @see wicket.Component#onComponentTagBody(wicket.markup.MarkupStream, |
| * wicket.markup.ComponentTag) |
| */ |
| protected void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) |
| { |
| replaceComponentTagBody(markupStream, openTag, smartLink(getModelObjectAsString())); |
| } |
| |
| /** |
| * Replace all email and URL addresses |
| * |
| * @param text |
| * Text to be modified |
| * @return Modified Text |
| */ |
| static String smartLink(final String text) |
| { |
| if (text == null) |
| { |
| return text; |
| } |
| |
| Matcher matcher = emailPattern.matcher(text); |
| String work = matcher.replaceAll(emailReplacePattern); |
| |
| matcher = urlPattern.matcher(work); |
| work = matcher.replaceAll(urlReplacePattern); |
| |
| return work; |
| } |
| } |
| |
| |