/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.link; import java.util.regex.Matcher; import java.util.regex.Pattern; public abstract class NativeLinkListener { private final LinkScanner scanner = new LinkScanner(); private final static Pattern PATTERN = Pattern.compile( "^([a-z]+)://([0-9]+).*" ); public void process( String input ) { for ( LinkMatch match : this.scanner.scan( input ) ) { processLink( match.getLink() ); } } private void processLink( String link ) { Matcher matcher = PATTERN.matcher( link ); if ( matcher.find() ) { String scheme = matcher.group( 1 ); Integer key = toInteger( matcher.group( 2 ) ); if ( ( scheme == null ) || ( key == null ) ) { return; } if ( "image".equalsIgnoreCase( scheme ) ) { onImageLink( key, link ); } else if ( "attachment".equalsIgnoreCase( scheme ) ) { onBinaryLink( key, link ); } else if ( "content".equalsIgnoreCase( scheme ) ) { onContentLink( key, link ); } } } private Integer toInteger( String value ) { try { return new Integer( value ); } catch ( Exception e ) { return null; } } public abstract void onImageLink( int key, String link ); public abstract void onBinaryLink( int key, String link ); public abstract void onContentLink( int key, String link ); }