com.fluxtion.builder.generation.GenerationContext Maven / Gradle / Ivy
/*
* Copyright (C) 2018 V12 Technology Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the Server Side Public License, version 1,
* as published by MongoDB, Inc.
*
* 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
* Server Side Public License for more details.
*
* You should have received a copy of the Server Side Public License
* along with this program. If not, see
* .
*/
package com.fluxtion.builder.generation;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import lombok.Data;
import net.openhft.compiler.CachedCompiler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Context for the generated output of the SEP. Provides functions to control
* generation outputs from Fluxtion, but is not used to describe the graph
* processing structure of a SEP.
*
* @author Greg Higgins
*/
@Data
public class GenerationContext {
public static GenerationContext SINGLETON;
private static final AtomicInteger COUNT = new AtomicInteger();
private final Map super Object, Map> cacheMap;
/**
* A global counter, can be used for generating unique class names.
*
* @return next id.
*/
public static int nextId() {
return COUNT.getAndIncrement();
}
private static class X{}
public int nextId(String className){
Map classCount = cacheMap.computeIfAbsent(X.class, k -> new HashMap() );
String key = packageName + "." + className;
Integer nextId = classCount.compute(key, (String k, Integer v) ->{
int ret = 0;
if(v!=null){
ret = v + 1;
}
return ret;
});
return nextId;
}
public static void setupStaticContext(String packageName, String className, File outputDirectory, File resourcesRootDirectory) {
setupStaticContext(packageName, className, outputDirectory, resourcesRootDirectory, false);
}
public static void setupStaticContext(String packageName, String className, File outputDirectory, File resourcesRootDirectory, boolean createResourceDirectory) {
SINGLETON = new GenerationContext(packageName, className, outputDirectory, resourcesRootDirectory);
SINGLETON.createDirectories();
if (createResourceDirectory) {
SINGLETON.createResourceDirectory();
}
}
public static void setupStaticContext(ClassLoader classLoader, String packageName, String className, File outputDirectory, File resourcesRootDirectory, boolean createResourceDirectory, File buildOutputDirectory, boolean createBuildOutputDirectory) {
SINGLETON = new GenerationContext(
classLoader,
packageName,
className,
outputDirectory,
resourcesRootDirectory,
buildOutputDirectory,
null
);
SINGLETON.createDirectories();
if (createResourceDirectory) {
SINGLETON.createResourceDirectory();
}
if (createBuildOutputDirectory && buildOutputDirectory != null) {
buildOutputDirectory.mkdirs();
}
}
public static void setupStaticContext(ClassLoader classLoader,
String packageName,
String className,
File outputDirectory,
File resourcesRootDirectory,
boolean createResourceDirectory,
File buildOutputDirectory,
boolean createBuildOutputDirectory,
CachedCompiler cachedCompiler) {
SINGLETON = new GenerationContext(
classLoader,
packageName,
className,
outputDirectory,
resourcesRootDirectory,
buildOutputDirectory,
cachedCompiler
);
SINGLETON.createDirectories();
if (createResourceDirectory) {
SINGLETON.createResourceDirectory();
}
if (createBuildOutputDirectory && buildOutputDirectory != null) {
buildOutputDirectory.mkdirs();
}
}
/**
* Map representing the name of the actual node class generated at SEP
* processing stage. Allowing a generic proxy class to be used in the SEP
* model processing phase and then replaced with the actual class reference
* during the code generation phase. The real class name is only known after
* the proxy has been generated.
*
*/
private final Map © 2015 - 2025 Weber Informatics LLC | Privacy Policy