blob: 80aeeecf9ce8ec09e61376579dd2e110efaaee91 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG 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
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.model.ext.maven.internal;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import org.apache.commons.lang.StringUtils;
import org.eclipse.skalli.commons.HtmlUtils;
import org.eclipse.skalli.model.Severity;
import org.eclipse.skalli.model.ext.maven.MavenProjectExt;
import org.eclipse.skalli.services.extension.PropertyValidatorBase;
public class RelativePomPathValidator extends PropertyValidatorBase {
public RelativePomPathValidator(Severity severity, String caption) {
super(severity, MavenProjectExt.class, MavenProjectExt.PROPERTY_REACTOR_POM, caption);
}
@Override
protected String getInvalidMessageFromCaption(Object value) {
return HtmlUtils.formatEscaped("{0}: ''{1}'' is not a valid path. If the reactor POM is in the project's " +
"root directory, leave the field empty. Otherwise enter the path relative to the project's root " +
"directory. Note that the path must not start or end with a slash, must not contain /../ segments " +
"or backslashes, and must not end with /pom.xml",
caption, value);
}
@Override
protected String getDefaultInvalidMessage(Object value) {
return HtmlUtils.formatEscaped("{0}: ''{1}'' is not a valid path. If the reactor POM is in the project's " +
"root directory, leave the field empty. Otherwise enter the path relative to the project's root " +
"directory. Note that the path must not start or end with a slash, must not contain /../ segments " +
"or backslashes, and must not end with /pom.xml",
property, value);
}
@Override
public boolean isValid(UUID entity, Object value) {
String relativePomPath = (String) value;
if (StringUtils.isBlank(relativePomPath)) {
return true;
}
// must have forward slashes
// must not be relative (i.e. point outside the project)
// must not include the pom.xml
// must be valid filenames
if (relativePomPath.indexOf('\\') >= 0) {
return false;
}
if (relativePomPath.charAt(0) == '/') {
return false;
}
if (relativePomPath.charAt(relativePomPath.length() - 1) == '/') {
return false;
}
if (relativePomPath.endsWith("pom.xml")) { //$NON-NLS-1$
return false;
}
if (relativePomPath.indexOf("..") >= 0 || //$NON-NLS-1$
relativePomPath.startsWith("./") || //$NON-NLS-1$
relativePomPath.endsWith("/.") || //$NON-NLS-1$
relativePomPath.indexOf("/./") >= 0) { //$NON-NLS-1$
return false;
}
try {
File f = new File(relativePomPath);
// http://stackoverflow.com/questions/468789/is-there-a-way-in-java-to-determine-if-a-path-is-valid-without-attempting-to-crea/469105#469105
f.getCanonicalPath();
return true;
} catch (IOException e) {
return false;
}
}
}