package org.netbeans.gradle.project.properties; import java.net.URI; import java.net.URISyntaxException; import java.util.logging.Level; import java.util.logging.Logger; import org.jtrim.utils.ExceptionHelper; import org.netbeans.gradle.project.NbStrings; import org.netbeans.gradle.project.properties.GradleLocation.Applier; import org.netbeans.gradle.project.tasks.vars.StringResolver; import org.netbeans.gradle.project.tasks.vars.StringResolvers; public final class GradleLocationDistribution implements GradleLocation { private static final Logger LOGGER = Logger.getLogger(GradleLocationDistribution.class.getName()); public static final String UNIQUE_TYPE_NAME = "DIST"; private final URI location; public GradleLocationDistribution(URI location) { ExceptionHelper.checkNotNullArgument(location, "location"); this.location = location; } public static GradleLocationRef getLocationRef(final String rawUri) { ExceptionHelper.checkNotNullArgument(rawUri, "rawUri"); return new GradleLocationRef() { @Override public String getUniqueTypeName() { return UNIQUE_TYPE_NAME; } @Override public String asString() { return rawUri; } @Override public GradleLocation getLocation(StringResolver resolver) { String resolvedUri = resolver.resolveStringIfValid(rawUri); if (resolvedUri == null) { return GradleLocationDefault.DEFAULT; } URI uri = tryParseUri(resolvedUri); if (uri == null) { return GradleLocationDefault.DEFAULT; } return new GradleLocationDistribution(uri); } }; } private static URI tryParseUri(String uri) { try { return new URI(StringResolvers.getDefaultGlobalResolver().resolveString(uri)); } catch (URISyntaxException ex) { LOGGER.log(Level.INFO, "Invalid URI for Gradle distribution: " + uri, ex); return null; } } @Override public void applyLocation(Applier applier) { applier.applyDistribution(location); } @Override public String toLocalizedString() { return NbStrings.getGradleLocationDist(location); } }