diff options
Diffstat (limited to 'application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java')
-rw-r--r-- | application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java b/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java new file mode 100644 index 00000000000..1762a4b9884 --- /dev/null +++ b/application-preprocessor/src/main/java/com/yahoo/application/preprocessor/ApplicationPreprocessor.java @@ -0,0 +1,68 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.application.preprocessor; + +import com.yahoo.config.application.api.ApplicationPackage; +import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.config.model.application.provider.BaseDeployLogger; +import com.yahoo.config.model.application.provider.FilesApplicationPackage; +import com.yahoo.config.provision.*; +import com.yahoo.yolean.Exceptions; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; +import java.io.File; +import java.io.IOException; +import java.util.Optional; + +/** + * Main entry for preprocessing an application package. + * + * @author lulf + * @since 5.25 + */ +public class ApplicationPreprocessor { + private final File applicationDir; + private final Optional<File> outputDir; + private final Optional<Environment> environment; + private final Optional<RegionName> region; + + public ApplicationPreprocessor(File applicationDir, Optional<File> outputDir, Optional<Environment> environment, Optional<RegionName> region) { + this.applicationDir = applicationDir; + this.outputDir = outputDir; + this.environment = environment; + this.region = region; + } + + public void run() throws IOException, TransformerException, ParserConfigurationException, SAXException { + DeployLogger logger = new BaseDeployLogger(); + FilesApplicationPackage.Builder applicationPackageBuilder = new FilesApplicationPackage.Builder(applicationDir); + outputDir.ifPresent(applicationPackageBuilder::preprocessedDir); + ApplicationPackage preprocessed = applicationPackageBuilder.build().preprocess( + new Zone(environment.orElse(Environment.defaultEnvironment()), region.orElse(RegionName.defaultName())), + (a, b) -> { + }, logger); + preprocessed.validateXML(logger); + } + + + public static void main(String args[]) { + int argCount = args.length; + if (argCount < 1) { + System.out.println("Usage: application-preprocessor <application> [environment] [region] [outputDirectory]"); + System.exit(1); + } + File applicationDir = new File(args[0]); + Optional<Environment> environment = (argCount > 1) ? Optional.of(Environment.valueOf(args[1])) : Optional.empty(); + Optional<RegionName> region = (argCount > 2) ? Optional.of(RegionName.from(args[2])) : Optional.empty(); + Optional<File> outputDir = (argCount > 3) ? Optional.of(new File(args[3])) : Optional.empty(); + ApplicationPreprocessor preprocessor = new ApplicationPreprocessor(applicationDir, outputDir, environment, region); + try { + preprocessor.run(); + System.out.println("Application preprocessed successfully. Preprocessed application stored in " + new File(applicationDir, ".preprocessed").getAbsolutePath()); + } catch (Exception e) { + System.err.println("Error validating application package: " + Exceptions.toMessageString(e)); + System.exit(1); + } + } +} |