import static java.util.Objects.requireNonNull;
import com.google.common.base.MoreObjects;
+import com.google.common.collect.Maps;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.maven.plugins.annotations.Parameter;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.Identifiable;
+import org.opendaylight.yangtools.concepts.WritableObject;
-public final class FileGeneratorArg implements Identifiable<String> {
+public final class FileGeneratorArg implements Identifiable<String>, WritableObject {
@Parameter
private final Map<String, String> configuration = new HashMap<>();
private String identifier;
public FileGeneratorArg() {
-
+ // Default constructor
}
public FileGeneratorArg(final String identifier) {
public String toString() {
return MoreObjects.toStringHelper(this).add("id", identifier).add("configuration", configuration).toString();
}
+
+ public static @NonNull FileGeneratorArg readFrom(final DataInput in) throws IOException {
+ final var identifier = in.readUTF();
+ final var size = in.readInt();
+ final var configuration = Maps.<String, String>newHashMapWithExpectedSize(size);
+ for (int i = 0; i < size; ++i) {
+ configuration.put(in.readUTF(), in.readUTF());
+ }
+ return new FileGeneratorArg(identifier, configuration);
+ }
+
+ @Override
+ public void writeTo(final DataOutput out) throws IOException {
+ out.writeUTF(identifier);
+ out.writeInt(configuration.size());
+ for (String key : configuration.keySet().stream().sorted().toList()) {
+ out.writeUTF(key);
+ out.writeUTF(configuration.getOrDefault(key, ""));
+ }
+ }
}
private final YangParserFactory parserFactory;
private final File yangFilesRootDir;
private final Set<File> excludedFiles;
- private final Map<String, FileGeneratorArg> fileGeneratorArgs;
+ private final ImmutableMap<String, FileGeneratorArg> fileGeneratorArgs;
private final @NonNull MavenProject project;
private final boolean inspectDependencies;
private final BuildContext buildContext;
}
// FIXME: store these files into state, so that we can verify/clean up
- final var outputState = new YangToSourcesState(new FileStateSet(ImmutableMap.copyOf(uniqueOutputFiles)));
+ final var outputState = new YangToSourcesState(fileGeneratorArgs,
+ new FileStateSet(ImmutableMap.copyOf(uniqueOutputFiles)));
buildContext.setValue(BUILD_CONTEXT_STATE_NAME, outputState);
if (buildContext.getValue(BUILD_CONTEXT_STATE_NAME) == null) {
LOG.debug("{} BuildContext did not retain state, persisting", LOG_PREFIX);
import static java.util.Objects.requireNonNull;
+import com.google.common.collect.ImmutableMap;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.util.Collection;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.WritableObject;
*/
// FIXME: expand to capture:
// - input YANG files
-// - code generators and their config
-record YangToSourcesState(@NonNull FileStateSet outputFiles) implements WritableObject {
+record YangToSourcesState(
+ @NonNull ImmutableMap<String, FileGeneratorArg> fileGeneratorArgs,
+ @NonNull FileStateSet outputFiles) implements WritableObject {
YangToSourcesState {
+ requireNonNull(fileGeneratorArgs);
requireNonNull(outputFiles);
}
static @NonNull YangToSourcesState readFrom(final DataInput in) throws IOException {
- return new YangToSourcesState(FileStateSet.readFrom(in));
+ return new YangToSourcesState(readConfigurations(in), FileStateSet.readFrom(in));
}
@Override
public void writeTo(final DataOutput out) throws IOException {
+ writeConfigurations(out, fileGeneratorArgs.values());
outputFiles.writeTo(out);
}
+
+ private static void writeConfigurations(final DataOutput out, final Collection<FileGeneratorArg> configurations)
+ throws IOException {
+ out.writeInt(configurations.size());
+ for (var arg : configurations) {
+ arg.writeTo(out);
+ }
+ }
+
+ private static @NonNull ImmutableMap<String, FileGeneratorArg> readConfigurations(final DataInput in)
+ throws IOException {
+ final int size = in.readInt();
+ if (size == 0) {
+ return ImmutableMap.of();
+ }
+ final var configurations = ImmutableMap.<String, FileGeneratorArg>builderWithExpectedSize(size);
+ for (int i = 0; i < size; ++i) {
+ final var arg = FileGeneratorArg.readFrom(in);
+ configurations.put(arg.getIdentifier(), arg);
+ }
+ return configurations.build();
+ }
}