package org.netbeans.gradle.project.license; import java.nio.file.Path; import org.jtrim.concurrent.TaskExecutor; import org.jtrim.utils.ExceptionHelper; import org.netbeans.gradle.project.model.NbGradleModel; import org.netbeans.gradle.project.util.NbBiFunction; import org.netbeans.gradle.project.util.NbFileUtils; import org.netbeans.gradle.project.util.NbFunction; import org.netbeans.gradle.project.util.NbTaskExecutors; public final class LicenseManagers { public static LicenseManager<NbGradleModel> createProjectLicenseManager(LicenseStore<DefaultLicenseDef> licenseStore) { NbFunction<NbGradleModel, Path> licenseRootProvider = new NbFunction<NbGradleModel, Path>() { @Override public Path apply(NbGradleModel ownerModel) { return ownerModel.getSettingsDir(); } }; NbFunction<NbGradleModel, String> modelNameProvider = new NbFunction<NbGradleModel, String>() { @Override public String apply(NbGradleModel ownerModel) { return NbFileUtils.getFileNameStr(ownerModel.getSettingsDir()); } }; TaskExecutor executor = NbTaskExecutors.DEFAULT_EXECUTOR; return createLicenseManager(executor, licenseStore, licenseRootProvider, modelNameProvider); } public static <T> LicenseManager<T> createLicenseManager( final TaskExecutor executor, final LicenseStore<DefaultLicenseDef> licenseStore, final NbFunction<? super T, ? extends Path> licenseRootProvider, final NbFunction<? super T, ? extends String> modelNameProvider) { ExceptionHelper.checkNotNullArgument(licenseStore, "licenseStore"); ExceptionHelper.checkNotNullArgument(licenseRootProvider, "licenseRootProvider"); ExceptionHelper.checkNotNullArgument(modelNameProvider, "modelNameProvider"); NbBiFunction<T, LicenseHeaderInfo, DefaultLicenseKey> licenseKeyFactory = new NbBiFunction<T, LicenseHeaderInfo, DefaultLicenseKey>() { @Override public DefaultLicenseKey apply(T ownerModel, LicenseHeaderInfo licenseHeader) { return tryCreateLicenseKey(ownerModel, licenseHeader, licenseRootProvider); } }; NbBiFunction<T, DefaultLicenseKey, DefaultLicenseDef> licenseDefFactory = new NbBiFunction<T, DefaultLicenseKey, DefaultLicenseDef>() { @Override public DefaultLicenseDef apply(T ownerModel, DefaultLicenseKey licenseKey) { return createLicenseDef(ownerModel, licenseKey, modelNameProvider); } }; return new LicenseManager<>(executor, licenseStore, licenseKeyFactory, licenseDefFactory); } private static <T> DefaultLicenseKey tryCreateLicenseKey( T ownerModel, LicenseHeaderInfo licenseHeader, NbFunction<? super T, ? extends Path> licenseRootProvider) { Path licenseTemplateFile = licenseHeader.getLicenseTemplateFile(); if (licenseTemplateFile == null) { return null; } Path rootPath = licenseRootProvider.apply(ownerModel); Path srcPath = rootPath.resolve(licenseTemplateFile); return new DefaultLicenseKey(licenseHeader.getLicenseName(), srcPath); } private static <T> DefaultLicenseDef createLicenseDef( T ownerModel, DefaultLicenseKey licenseKey, NbFunction<? super T, ? extends String> modelNameProvider) { String name = licenseKey.getName(); String modelName = modelNameProvider.apply(ownerModel); String displayName = name + " (" + modelName + ")"; return new DefaultLicenseDef(licenseKey.getSrcPath(), name, displayName); } private LicenseManagers() { throw new AssertionError(); } }