/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.core.license; import java.util.Collections; import java.util.List; import java.util.Objects; import com.rapidminer.license.AlreadyRegisteredException; import com.rapidminer.license.ConstraintNotRestrictedException; import com.rapidminer.license.InvalidProductException; import com.rapidminer.license.License; import com.rapidminer.license.LicenseManager; import com.rapidminer.license.LicenseManagerListener; import com.rapidminer.license.LicenseValidationException; import com.rapidminer.license.StudioLicenseConstants; import com.rapidminer.license.UnknownProductException; import com.rapidminer.license.location.LicenseLoadingException; import com.rapidminer.license.location.LicenseLocation; import com.rapidminer.license.location.LicenseStoringException; import com.rapidminer.license.product.Constraint; import com.rapidminer.license.product.Product; import com.rapidminer.license.utils.Pair; import com.rapidminer.license.violation.LicenseConstraintViolation; import com.rapidminer.license.violation.LicenseViolation; /** * The {@link LicenseManager} which is installed by the {@link ProductConstraintManager} in case no * other LicenseManager is available on {@link ProductConstraintManager} initialization. It has a * hard-coded basic edition license with a default user and cannot store any new licenses. * * @author Nils Woehler * @since 6.5.0 * */ public class OpenSourceLicenseManager implements LicenseManager { private final License license = new OpenSourceLicense(); @Override public void registerProduct(Product newProduct) throws AlreadyRegisteredException, LicenseLoadingException, InvalidProductException { if (!StudioLicenseConstants.PRODUCT_ID.equals(newProduct.getProductId())) { throw new InvalidProductException("LicenseManager does not allow to register products.", newProduct.getProductId()); } } @Override public List<LicenseViolation> checkAnnotationViolations(Object obj, boolean informListeners) { return Collections.emptyList(); } @Override public <S, C> LicenseConstraintViolation<S, C> checkConstraintViolation(Product product, Constraint<S, C> constraint, C checkedValue, boolean informListeners) { return checkConstraintViolation(product, constraint, checkedValue, null, informListeners); } @Override public <S, C> LicenseConstraintViolation<S, C> checkConstraintViolation(Product product, Constraint<S, C> constraint, C checkedValue, String i18nKey, boolean informListeners) { if (StudioLicenseConstants.PRODUCT_ID.equals(product.getProductId())) { return null; // ignore } else { // all other products are not allowed to be used try { return new LicenseConstraintViolation<S, C>(null, constraint, getConstraintValue(product, constraint), null, i18nKey); } catch (ConstraintNotRestrictedException e) { // cannot happen return null; } } } @Override public License getActiveLicense(Product product) { if (StudioLicenseConstants.PRODUCT_ID.equals(product.getProductId())) { return license; } else { // no license available for other products return null; } } @Override public <S, C> S getConstraintValue(Product product, Constraint<S, C> constraint) throws ConstraintNotRestrictedException { return constraint.getDefaultValue(); } @Override public List<License> getLicenses(Product product) { return Collections.singletonList(license); } @Override public License getUpcomingLicense(License license) throws UnknownProductException { return null; } @Override public License getUpcomingLicense(Product product) { return null; } @Override public <S, C> boolean isAllowed(Product product, Constraint<S, C> constraint, C checkedValue) { return true; } @Override public boolean isAllowedByAnnotations(Object obj) { return true; } @Override public Pair<Product, License> validateLicense(Product product, String licenseText) throws UnknownProductException, LicenseValidationException { Objects.requireNonNull(product); if (StudioLicenseConstants.PRODUCT_ID.equals(product.getProductId())) { return new Pair<Product, License>(product, license); } else { // do not return licenses other than for Studio throw new UnknownProductException(product.getProductId()); } } @Override public License storeNewLicense(String licenseText) throws LicenseStoringException, UnknownProductException, LicenseValidationException { throw new LicenseValidationException("Storing of licenses not supported by this LicenseManager.", null); } @Override public void registerLicenseManagerListener(LicenseManagerListener l) { // ignore } @Override public void removeLicenseManagerListener(LicenseManagerListener l) { // ignore } @Override public void setLicenseLocation(LicenseLocation location) { // ignore } @Override public List<License> getAllActiveLicenses() { return Collections.singletonList(license); } }