package org.netbeans.gradle.project.license;
import java.nio.file.Path;
import java.util.Map;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.model.util.CollectionUtils;
/**
* Defines the license and associated properties what can be added to
* newly created files.
* <P>
* Instances of this class are immutable.
*/
public final class LicenseHeaderInfo {
private final String licenseName;
private final Map<String, String> properties;
private final Path licenseTemplateFile;
/**
* Creates the license information with the given properties.
*
* @param licenseName the name of the license with which users can
* reference the license. This argument cannot be {@code null}.
* @param properties variables and their values to replace references
* to them in the license template. This argument cannot be {@code null},
* and cannot contain {@code null} elements.
* @param licenseTemplateFile the path to the license file. This path can
* be relative, in which case it is resolved against the root project
* directory. This argument can be {@code null}, if the IDE is expected
* to have a license with the given name.
*/
public LicenseHeaderInfo(
@Nonnull String licenseName,
@Nonnull Map<String, String> properties,
@Nullable Path licenseTemplateFile) {
ExceptionHelper.checkNotNullArgument(licenseName, "licenseName");
ExceptionHelper.checkNotNullArgument(properties, "properties");
this.licenseName = licenseName;
this.properties = CollectionUtils.copyNullSafeHashMap(properties);
this.licenseTemplateFile = licenseTemplateFile;
}
/**
* Returns the file containing the license. The license might contain
* variables to be replaced. The values of these variables are defined by
* the {@link #getProperties() getProperties()} method.
* <P>
* The returned path can be relative, in which case the path is resolved
* against the root path of the project where the license is applied.
* <P>
* Having a license file is optional. If there is no license file,
* the license is solely identified by its {@link #getLicenseName() name}
* and it is assumed that the IDE can recognize the license by its name.
*
* @return the file containing the license or {@code null} if the license
* is identified by its name only
*/
@Nullable
public Path getLicenseTemplateFile() {
return licenseTemplateFile;
}
/**
* Returns the name of the license as specified by the user. The name
* must be something that is meaningful to the user. If there is no
* {@link #getLicenseTemplateFile() license template file}, the license
* is solely identified by its name.
*
* @return the name of the license as specified by the user. This method
* never returns {@code null}.
*/
@Nonnull
public String getLicenseName() {
return licenseName;
}
/**
* Returns the values (and names) of the variables to be replaced in the
* license template. The keys of the returned maps are the names of the
* variables and their associated value is the value.
*
* @return the values (and names) of the variables to be replaced in the
* license template. This method never returns {@code null} and does not
* contain {@code null} elements.
*/
@Nonnull
public Map<String, String> getProperties() {
return properties;
}
}