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.
012package org.apache.tapestry5.versionmigrator;
013
014import java.util.Optional;
015import java.util.function.Function;
016import java.util.regex.Pattern;
017
018/**
019 * Interface that defines a file refactor parser.
020 */
021public interface FileRefactorCommitParser extends Function<String, Optional<ClassRefactor>> 
022{
023    /**
024     * Extracts a package or class name from a string which may contain <code>src/main/java/</code>
025     * or <code>src/test/java/</code>
026     */
027    static String extractPackageOrClassName(String string) 
028    {
029        return string
030                .replace("src/main/java/", "")
031                .replace("src/test/java/", "")
032                .replace("/", ".");
033    }
034    
035    /**
036     * Builds a class name given some parts.
037     */
038    static String buildClassName(final String rootPackageName, String packageNameSuffix, final String className) 
039    {
040        return (rootPackageName + packageNameSuffix.replace("/", ".") + "." + className.replace("/", "."))
041                .replaceAll(Pattern.quote(".."), ".");
042    }
043
044    
045}