001/** 002 * Copyright (c) 2004-2011 QOS.ch 003 * All rights reserved. 004 * 005 * Permission is hereby granted, free of charge, to any person obtaining 006 * a copy of this software and associated documentation files (the 007 * "Software"), to deal in the Software without restriction, including 008 * without limitation the rights to use, copy, modify, merge, publish, 009 * distribute, sublicense, and/or sell copies of the Software, and to 010 * permit persons to whom the Software is furnished to do so, subject to 011 * the following conditions: 012 * 013 * The above copyright notice and this permission notice shall be 014 * included in all copies or substantial portions of the Software. 015 * 016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 017 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 018 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 019 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 020 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 021 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 022 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 023 * 024 */ 025package org.slf4j.migrator.line; 026 027import java.util.regex.Matcher; 028import java.util.regex.Pattern; 029 030/** 031 * This class represents a conversion rule It uses a Pattern and defines for 032 * each capturing group of this Pattern a replacement text 033 * 034 * @author jean-noelcharpin 035 * 036 */ 037public class MultiGroupConversionRule implements ConversionRule { 038 039 // It is extremely unlikely to encounter more than 10 groups in one of 040 // our conversion reg-expressions 041 final private static int MAX_GROUPS = 10; 042 043 private final Pattern pattern; 044 private final String[] replacementTable = new String[MAX_GROUPS]; 045 046 public MultiGroupConversionRule(Pattern pattern) { 047 this.pattern = pattern; 048 } 049 050 /* 051 * (non-Javadoc) 052 * 053 * @see org.slf4j.converter.ConversionRule#getPattern() 054 */ 055 public Pattern getPattern() { 056 return pattern; 057 } 058 059 public void addReplacement(int groupIndex, String replacement) { 060 if (groupIndex == 0) { 061 throw new IllegalArgumentException("regex groups start at 1, not zero"); 062 } 063 replacementTable[groupIndex] = replacement; 064 } 065 066 /* 067 * (non-Javadoc) 068 * 069 * @see org.slf4j.converter.ConversionRule#getReplacement(java.lang.Integer) 070 */ 071 public String getReplacement(int groupIndex) { 072 return replacementTable[groupIndex]; 073 } 074 075 /* 076 * (non-Javadoc) 077 * 078 * @see org.slf4j.converter.ConversionRule#replace(java.util.regex.Matcher) 079 */ 080 public String replace(Matcher matcher) { 081 StringBuilder replacementBuffer = new StringBuilder(); 082 String replacementText; 083 084 for (int group = 1; group <= matcher.groupCount(); group++) { 085 replacementText = getReplacement(group); 086 if (replacementText != null) { 087 // System.out.println("replacing group " + group + " : " 088 // + matcher.group(group) + " with " + replacementText); 089 replacementBuffer.append(replacementText); 090 } else { 091 replacementBuffer.append(matcher.group(group)); 092 } 093 } 094 return replacementBuffer.toString(); 095 } 096 097 public String getAdditionalLine() { 098 return null; 099 } 100}