001// Licensed under the Apache License, Version 2.0 (the "License"); 002// you may not use this file except in compliance with the License. 003// You may obtain a copy of the License at 004// 005// http://www.apache.org/licenses/LICENSE-2.0 006// 007// Unless required by applicable law or agreed to in writing, software 008// distributed under the License is distributed on an "AS IS" BASIS, 009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 010// See the License for the specific language governing permissions and 011// limitations under the License. 012 013package org.apache.tapestry5.versionmigrator.internal; 014 015import java.util.Optional; 016import java.util.regex.Matcher; 017import java.util.regex.Pattern; 018 019import org.apache.tapestry5.versionmigrator.ClassRefactor; 020import org.apache.tapestry5.versionmigrator.FileRefactorCommitParser; 021 022/** 023 * Parses lines like this, in which just the package is changed: 024 * <code>commons/src/main/java/org/apache/tapestry5/{ioc => commons}/Messages.java (98%)</code>. 025 */ 026public class PackageChangeRefactorCommitParser implements FileRefactorCommitParser { 027 028 final public static String EXAMPLE = "commons/src/main/java/org/apache/tapestry5/{ioc => commons}/Messages.java (98%)"; 029 030 final private static Pattern PATTERN = 031 Pattern.compile("([^/]*)/(.*)" + Pattern.quote("{") + "(.*)\\s=>\\s(.*)" + Pattern.quote("}/") + "([^\\.]*).*"); 032 033 @Override 034 public Optional<ClassRefactor> apply(String line) 035 { 036 final Matcher matcher = PATTERN.matcher(line); 037 ClassRefactor move = null; 038 if (matcher.matches()) 039 { 040 String newPackageNameSuffix = matcher.group(4); 041 String oldPackageNameSuffix = matcher.group(3); 042// System.out.printf("1(%s) 2(%s) 3(%s) 4(%s) 5(%s)\n", matcher.group(1), matcher.group(2), oldPackageNameSuffix, newPackageNameSuffix, matcher.group(5)); 043 044 final String rootPackageName = matcher.group(2) 045 .replace("src/main/java/", "") 046 .replace("/", "."); 047 final String className = matcher.group(5); 048 final String newClassName = FileRefactorCommitParser.buildClassName(rootPackageName, newPackageNameSuffix, className); 049 final String oldClassName = FileRefactorCommitParser.buildClassName(rootPackageName, oldPackageNameSuffix, className); 050 final String artifactName = matcher.group(1); 051 052 move = new ClassRefactor(newClassName, oldClassName, artifactName, artifactName); 053 } 054 return Optional.ofNullable(move); 055 } 056 057}