--- /dev/null
+/*
+ * Copyright (c) 2016 Red Hat, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.checkstyle;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.util.Optional;
+
+/**
+ * Utility to convert absolute file name to path relative to project.
+ *
+ * <p>Current implementation use a sad heuristic based on detecting a pom.xml.
+ * This is of course sub-optimal to say the very least. Improvements welcome.
+ *
+ * @see <a href="https://groups.google.com/forum/#!topic/checkstyle-devel/Rfwx81YhVQk">checkstyle-devel list thread</a>
+ */
+public class FileNameUtil {
+
+ private FileNameUtil() {
+ }
+
+ static File getPathRelativeToMavenProjectRootIfPossible(File absoluteFile) {
+ return getOptionalPathRelativeToMavenProjectRoot(absoluteFile).orElse(absoluteFile);
+ }
+
+ static Optional<File> getOptionalPathRelativeToMavenProjectRoot(File absoluteFile) {
+ if (!absoluteFile.isAbsolute()) {
+ return Optional.of(absoluteFile);
+ }
+ File projectRoot = absoluteFile;
+ while (!isProjectRootDir(projectRoot) && projectRoot.getParentFile() != null) {
+ projectRoot = projectRoot.getParentFile();
+ }
+ if (isProjectRootDir(projectRoot)) {
+ Path absolutePath = absoluteFile.toPath();
+ Path basePath = projectRoot.toPath();
+ Path relativePath = basePath.relativize(absolutePath);
+ return Optional.of(relativePath.toFile());
+ }
+ return Optional.empty();
+ }
+
+ private static boolean isProjectRootDir(File file) {
+ return new File(file, "pom.xml").exists();
+ }
+
+}