Search in sources :

Example 1 with EmptyCodeStorage

use of org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.EmptyCodeStorage in project legend-pure by finos.

the class TestJavaStandaloneLibraryGenerator method setUp.

@BeforeClass
public static void setUp() {
    MutableCodeStorage codeStorage = new PureCodeStorage(null, new ClassLoaderCodeStorage(CodeRepository.newPlatformCodeRepository()), new EmptyCodeStorage(new GenericCodeRepository("test", "test::.*", PlatformCodeRepository.NAME)));
    setUpRuntime(codeStorage, codeStorage.getAllRepositories(), Tuples.pair("/test/standalone/tests.pure", "import test::standalone::*;\n" + "\n" + "Enum test::standalone::TestEnumeration\n" + "{\n" + "    TYPE1, TYPE2, TYPE3\n" + "}\n" + "\n" + "Class test::standalone::TestClassA\n" + "{\n" + "    name : String[1];\n" + "}\n" + "\n" + "Class test::standalone::TestClassB\n" + "{\n" + "    id:Integer[1];\n" + "    type:TestEnumeration[1];\n" + "}\n" + "\n" + "Association test::standalone::TestAssociation\n" + "{\n" + "    toA:TestClassA[1];\n" + "    toB:TestClassB[1];\n" + "}\n" + "\n" + "function <<access.externalizable>> test::standalone::joinWithCommas(strings:String[*]):String[1]\n" + "{\n" + "    $strings->joinStrings(', ');\n" + "}\n" + "\n" + "function <<access.externalizable>> test::standalone::testWithReflection(prefix:String[1]):String[1]\n" + "{\n" + "    let f = testWithReflection_String_1__String_1_;\n" + "    let class = TestClassA;\n" + "    let association = TestAssociation;\n" + "    let b = ^TestClassB(id=43, type=TestEnumeration.TYPE3, toA=^TestClassA(name=$prefix));\n" + "    if($class == $association, |'ERROR', |$b.toA.name + $f.functionName->toOne());\n" + "}\n"));
}
Also used : EmptyCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.EmptyCodeStorage) MutableCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.MutableCodeStorage) ClassLoaderCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.classpath.ClassLoaderCodeStorage) PureCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.PureCodeStorage) GenericCodeRepository(org.finos.legend.pure.m3.serialization.filesystem.repository.GenericCodeRepository) BeforeClass(org.junit.BeforeClass)

Example 2 with EmptyCodeStorage

use of org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.EmptyCodeStorage in project legend-pure by finos.

the class PureJarSerializer method writePureRepositoryJars.

private static void writePureRepositoryJars(Path outputDirectory, Path sourceDirectory, String platformVersion, RichIterable<CodeRepository> repositories, Log log) throws IOException {
    SetIterable<CodeRepository> repositoriesForCompilation = PureCodeStorage.getRepositoryDependencies(PureRepositoriesExternal.repositories(), repositories);
    PureRuntime runtime;
    RichIterable<CodeRepository> repositoriesToSerialize;
    if (null == sourceDirectory) {
        log.info("    *Building code storage leveraging the class loader (as sourceDirectory is not specified)");
        ClassLoaderCodeStorage cs = new ClassLoaderCodeStorage(repositoriesForCompilation);
        log.info("      " + cs.getRepositories().collect(CodeRepository::getName) + " - " + cs.getUserFiles().size() + " files");
        MutableCodeStorage codeStorage = new PureCodeStorage(null, cs);
        Message message = getMessage(log, "      ");
        log.info("    *Starting file compilation");
        runtime = new PureRuntimeBuilder(codeStorage).setTransactionalByDefault(false).buildAndInitialize(message);
        repositoriesToSerialize = repositoriesForCompilation;
        log.info("      -> Finished compilation");
    } else {
        log.info("    *Building code storage leveraging the sourceDirectory " + sourceDirectory);
        PartitionIterable<CodeRepository> partition = repositories.partition(r -> Files.exists(sourceDirectory.resolve(r.getName())));
        RichIterable<CodeRepository> repositoriesWithSource = partition.getSelected();
        RichIterable<CodeRepository> repositoriesWithoutSource = partition.getRejected();
        // Code Storages
        MutableList<AbstractRepositoryCodeStorage> codeStoragesFromSource = Lists.mutable.withAll(repositoriesWithSource.collect(r -> new MutableFSCodeStorage(r, sourceDirectory.resolve(r.getName()))));
        MutableList<AbstractRepositoryCodeStorage> allCodeStorage = Lists.mutable.withAll(codeStoragesFromSource).withAll(repositoriesWithoutSource.collect(EmptyCodeStorage::new));
        log.info("    *Loading the following repo from PARs: " + repositoriesWithoutSource.collect(CodeRepository::getName));
        // Build the runtime
        MutableCodeStorage codeStorage = new PureCodeStorage(sourceDirectory, allCodeStorage.toArray(new RepositoryCodeStorage[0]));
        runtime = new PureRuntimeBuilder(codeStorage).setTransactionalByDefault(false).build();
        // Load the PARS
        MutableList<String> namesOfRepoWithoutAvailableSource = repositoriesWithoutSource.collect(CodeRepository::getName).toList();
        Message message = getMessage(log, "    ");
        PureRepositoryJarLibrary jarLibrary = SimplePureRepositoryJarLibrary.newLibrary(GraphLoader.findJars(namesOfRepoWithoutAvailableSource, PureJarSerializer.class.getClassLoader(), message));
        final GraphLoader loader = new GraphLoader(runtime.getModelRepository(), runtime.getContext(), runtime.getIncrementalCompiler().getParserLibrary(), runtime.getIncrementalCompiler().getDslLibrary(), runtime.getSourceRegistry(), runtime.getURLPatternLibrary(), jarLibrary);
        loader.loadAll(message);
        // Compile Sources
        log.info("    *Starting file compilation");
        codeStoragesFromSource.forEach(r -> log.info("      " + r.getRepositories().collect(CodeRepository::getName) + " - " + r.getUserFiles().size() + " files (from: " + ((FSCodeStorage) r).getRoot() + ")"));
        for (CodeRepository repository : repositoriesWithSource) {
            Path path = sourceDirectory.resolve(repository.getName());
            log.info("      Compiling repository '" + repository.getName() + "' in " + path);
            MutableFSCodeStorage fs = new MutableFSCodeStorage(repository, path);
            log.info("        Found " + fs.getUserFiles().size() + " files");
            runtime.loadAndCompile(new PureCodeStorage(sourceDirectory, fs).getUserFiles());
            log.info("        -> Finished compiling repository '" + repository.getName() + "'");
        }
        repositoriesToSerialize = repositoriesWithSource;
        log.info("      -> Finished compilation");
    }
    Files.createDirectories(outputDirectory);
    log.info("    *Starting serialization");
    for (String repositoryName : repositoriesToSerialize.collect(CodeRepository::getName)) {
        Path outputFile = outputDirectory.resolve("pure-" + repositoryName + "." + ARCHIVE_FILE_EXTENSION);
        log.info("      Writing " + outputFile);
        try (OutputStream outputStream = new BufferedOutputStream(Files.newOutputStream(outputFile))) {
            BinaryModelRepositorySerializer.serialize(outputStream, platformVersion, null, repositoryName, runtime);
        }
    }
}
Also used : Message(org.finos.legend.pure.m3.serialization.runtime.Message) CodeRepository(org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepository) Lists(org.eclipse.collections.api.factory.Lists) PureRepositoriesExternal(org.finos.legend.pure.configuration.PureRepositoriesExternal) SetIterable(org.eclipse.collections.api.set.SetIterable) SimplePureRepositoryJarLibrary(org.finos.legend.pure.m3.serialization.runtime.binary.SimplePureRepositoryJarLibrary) PureCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.PureCodeStorage) MutableList(org.eclipse.collections.api.list.MutableList) AbstractRepositoryCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.AbstractRepositoryCodeStorage) FSCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.fs.FSCodeStorage) BufferedOutputStream(java.io.BufferedOutputStream) PureRepositoryJarLibrary(org.finos.legend.pure.m3.serialization.runtime.binary.PureRepositoryJarLibrary) RichIterable(org.eclipse.collections.api.RichIterable) RepositoryCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.RepositoryCodeStorage) PureRuntimeBuilder(org.finos.legend.pure.m3.serialization.runtime.PureRuntimeBuilder) Path(java.nio.file.Path) OutputStream(java.io.OutputStream) Files(java.nio.file.Files) PureRuntime(org.finos.legend.pure.m3.serialization.runtime.PureRuntime) EmptyCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.EmptyCodeStorage) IOException(java.io.IOException) Log(org.apache.maven.plugin.logging.Log) ClassLoaderCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.classpath.ClassLoaderCodeStorage) MutableCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.MutableCodeStorage) GraphLoader(org.finos.legend.pure.m3.serialization.runtime.GraphLoader) Sets(org.eclipse.collections.impl.factory.Sets) PartitionIterable(org.eclipse.collections.api.partition.PartitionIterable) BinaryModelRepositorySerializer(org.finos.legend.pure.m3.serialization.runtime.binary.BinaryModelRepositorySerializer) MutableFSCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.fs.MutableFSCodeStorage) Path(java.nio.file.Path) PureRuntime(org.finos.legend.pure.m3.serialization.runtime.PureRuntime) CodeRepository(org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepository) Message(org.finos.legend.pure.m3.serialization.runtime.Message) BufferedOutputStream(java.io.BufferedOutputStream) OutputStream(java.io.OutputStream) PureRuntimeBuilder(org.finos.legend.pure.m3.serialization.runtime.PureRuntimeBuilder) SimplePureRepositoryJarLibrary(org.finos.legend.pure.m3.serialization.runtime.binary.SimplePureRepositoryJarLibrary) PureRepositoryJarLibrary(org.finos.legend.pure.m3.serialization.runtime.binary.PureRepositoryJarLibrary) AbstractRepositoryCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.AbstractRepositoryCodeStorage) GraphLoader(org.finos.legend.pure.m3.serialization.runtime.GraphLoader) ClassLoaderCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.classpath.ClassLoaderCodeStorage) MutableCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.MutableCodeStorage) FSCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.fs.FSCodeStorage) MutableFSCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.fs.MutableFSCodeStorage) PureCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.PureCodeStorage) MutableFSCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.fs.MutableFSCodeStorage) BufferedOutputStream(java.io.BufferedOutputStream) AbstractRepositoryCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.AbstractRepositoryCodeStorage) RepositoryCodeStorage(org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.RepositoryCodeStorage)

Aggregations

PureCodeStorage (org.finos.legend.pure.m3.serialization.filesystem.PureCodeStorage)2 EmptyCodeStorage (org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.EmptyCodeStorage)2 MutableCodeStorage (org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.MutableCodeStorage)2 ClassLoaderCodeStorage (org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.classpath.ClassLoaderCodeStorage)2 BufferedOutputStream (java.io.BufferedOutputStream)1 IOException (java.io.IOException)1 OutputStream (java.io.OutputStream)1 Files (java.nio.file.Files)1 Path (java.nio.file.Path)1 Log (org.apache.maven.plugin.logging.Log)1 RichIterable (org.eclipse.collections.api.RichIterable)1 Lists (org.eclipse.collections.api.factory.Lists)1 MutableList (org.eclipse.collections.api.list.MutableList)1 PartitionIterable (org.eclipse.collections.api.partition.PartitionIterable)1 SetIterable (org.eclipse.collections.api.set.SetIterable)1 Sets (org.eclipse.collections.impl.factory.Sets)1 PureRepositoriesExternal (org.finos.legend.pure.configuration.PureRepositoriesExternal)1 CodeRepository (org.finos.legend.pure.m3.serialization.filesystem.repository.CodeRepository)1 GenericCodeRepository (org.finos.legend.pure.m3.serialization.filesystem.repository.GenericCodeRepository)1 AbstractRepositoryCodeStorage (org.finos.legend.pure.m3.serialization.filesystem.usercodestorage.AbstractRepositoryCodeStorage)1