Mercurial > hg > thermostat-tools-eclipse
view com.redhat.thermostat.tools.eclipse.plugin/src/com/redhat/thermostat/tools/eclipse/plugin/Validators.java @ 127:f64440e971ac
Validate thermostat versions in project wizard
author | Omair Majid <omajid@redhat.com> |
---|---|
date | Fri, 28 Mar 2014 12:52:27 -0400 |
parents | a0c68ec37305 |
children | 90f52517b764 |
line wrap: on
line source
package com.redhat.thermostat.tools.eclipse.plugin; import java.util.Objects; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.runtime.IStatus; public class Validators { public static class NonEmptyStringRequired implements IValidator { private String errorMessage; public NonEmptyStringRequired(String errorMessage) { this.errorMessage = errorMessage; } @Override public IStatus validate(Object value) { Objects.requireNonNull(value); if (!(value instanceof String)) { throw new AssertionError("Expected String, but got '" + value + "' (" + value.getClass() + ")."); } String text = (String) value; if (text.trim().length() == 0) { return ValidationStatus.error(errorMessage); } else { return ValidationStatus.ok(); } } } public static class PackageNameRequired implements IValidator { @Override public IStatus validate(Object value) { Objects.requireNonNull(value); if (!(value instanceof String)) { throw new AssertionError("Expected String, but got '" + value + "' (" + value.getClass() + ")."); } String packageName = (String) value; if (packageName.length() == 0) { return ValidationStatus.error("Package name must be specified"); } if (packageName.contains(" ")) { return ValidationStatus.error("Package name must be valid"); } return ValidationStatus.ok(); } } /** Validate maven's groupIds and artifactIds */ public static class ValidIdRequired implements IValidator { private String idName; public ValidIdRequired(String idName) { this.idName = idName; } @Override public IStatus validate(Object value) { Objects.requireNonNull(value); if (!(value instanceof String)) { throw new AssertionError("Expected String, but got '" + value + "' (" + value.getClass() + ")."); } String projectName = (String) value; if (projectName.length() == 0) { return ValidationStatus.error(idName + " must be specified"); } if (projectName.replace('\\', '/').indexOf('/', 1) > 0) { return ValidationStatus.error(idName + " must be valid"); } if (projectName.contains(" ")) { return ValidationStatus.error(idName + " must be valid"); } return ValidationStatus.ok(); } } /** * Matches SemVer and OSGi-style versions * * @see http://semver.org/ * @see http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/Version.html */ public static class VersionRequired implements IValidator { private String errorMessage; public VersionRequired(String errorMessage) { this.errorMessage = errorMessage; } @Override public IStatus validate(Object value) { Objects.requireNonNull(value); if (!(value instanceof String)) { throw new AssertionError("Expected String, but got '" + value + "' (" + value.getClass() + ")."); } String version = (String) value; if (version.trim().length() == 0) { return ValidationStatus.error(errorMessage); } final int INDEX_NOT_FOUND = -1; String rest = version; int endIndex; String versionPart; /* major */ endIndex = rest.indexOf('.'); if (endIndex == INDEX_NOT_FOUND) { if (isValidVersion(rest)) { return ValidationStatus.ok(); } else { return ValidationStatus.error(errorMessage); } } versionPart = rest.substring(0, endIndex); if (!isValidVersion(versionPart)) { return ValidationStatus.error(errorMessage); } rest = rest.substring(endIndex+1); /* minor */ endIndex = rest.indexOf('.'); if (endIndex == INDEX_NOT_FOUND) { if (isValidVersion(rest)) { return ValidationStatus.ok(); } else { return ValidationStatus.error(errorMessage); } } versionPart = rest.substring(0, endIndex); if (!isValidVersion(versionPart)) { return ValidationStatus.error(errorMessage); } rest = rest.substring(endIndex+1); /* micro */ int microEndIndexDot = rest.indexOf('.'); int microEndIndexDash = rest.indexOf('-'); if (microEndIndexDot == INDEX_NOT_FOUND && microEndIndexDash == INDEX_NOT_FOUND) { if (isValidVersion(rest)) { return ValidationStatus.ok(); } else { return ValidationStatus.error(errorMessage); } } if (microEndIndexDot == INDEX_NOT_FOUND) { versionPart = rest.substring(0, microEndIndexDash); } else { versionPart = rest.substring(0, microEndIndexDot); } if (!isValidVersion(versionPart)) { return ValidationStatus.error(errorMessage); } rest = version.substring(endIndex+1); if (rest.length() == 0) { return ValidationStatus.error(errorMessage); } return ValidationStatus.ok(); } private boolean isValidVersion(String part) { if (part.isEmpty()) { return false; } try { Integer.parseInt(part); } catch (NumberFormatException nfe) { return false; } return true; } } }