/* * * This file is part of the Hesperides distribution. * * (https://github.com/voyages-sncf-technologies/hesperides) * * Copyright (c) 2016 VSCT. * * * * Hesperides is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as * * published by the Free Software Foundation, version 3. * * * * Hesperides 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 * * General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package com.vsct.dt.hesperides.applications.event; import com.vsct.dt.hesperides.applications.PlatformKey; import com.vsct.dt.hesperides.applications.PlatformRegistryInterface; import com.vsct.dt.hesperides.applications.PropertiesSavedEvent; import com.vsct.dt.hesperides.applications.properties.PropertiesRegistryInterface; import com.vsct.dt.hesperides.exception.runtime.MissingResourceException; import com.vsct.dt.hesperides.storage.HesperidesCommand; import com.vsct.dt.hesperides.templating.platform.PlatformData; import com.vsct.dt.hesperides.templating.platform.PropertiesData; import java.util.Optional; /** * Created by emeric_martineau on 09/05/2016. */ public class PropertiesSavedCommand implements HesperidesCommand<PropertiesSavedEvent> { private final PlatformRegistryInterface platformRegistry; private final PropertiesRegistryInterface propertiesRegistry; private final PlatformKey platformKey; private final String path; private final PropertiesData properties; private final long platformVersionId; private final String comment; /** * The new platform to store in cache. */ private PlatformData updatedPlatform; public PropertiesSavedCommand(final PlatformRegistryInterface platformRegistry, final PropertiesRegistryInterface propertiesRegistry, final PlatformKey platformKey, final String path, final PropertiesData properties, final long platformVersionId, final String comment) { this.platformRegistry = platformRegistry; this.propertiesRegistry = propertiesRegistry; this.platformKey = platformKey; this.path = path; this.properties = properties; this.platformVersionId = platformVersionId; this.comment = comment; } @Override public PropertiesSavedEvent apply() { final String applicationName = platformKey.getApplicationName(); final String platformName = platformKey.getName(); final long platformVID = platformVersionId; final Optional<PlatformData> optionalPlatform = platformRegistry.getPlatform(platformKey); if (optionalPlatform.isPresent()) { final PlatformData platform = optionalPlatform.get(); platform.tryCompareVersionID(platformVID); //Properties are immutable, it is ok to store them directly updatedPlatform = PlatformData.withPlatformName(platform.getPlatformName()) .withApplicationName(platform.getApplicationName()) .withApplicationVersion(platform.getApplicationVersion()) .withModules(platform.getModules()) .withVersion(platform.getVersionID() + 1) .setProduction(platform.isProduction()) .build(); return new PropertiesSavedEvent(applicationName, platformName, path, properties, comment); } else { throw new MissingResourceException("Cannot create properties because platform " + applicationName + "/" + platformName + " does not exist"); } } @Override public void complete() { final String applicationName = platformKey.getApplicationName(); final String platformName = platformKey.getName(); propertiesRegistry.createOrUpdateProperties(applicationName, platformName, path, properties); platformRegistry.createOrUpdatePlatform(updatedPlatform); } }