package org.netbeans.gradle.project.model; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import org.jtrim.utils.ExceptionHelper; import org.netbeans.gradle.project.NbGradleProject; import org.netbeans.gradle.project.util.SerializationUtils2; public final class PersistentProjectModelStoreFactory { public PersistentProjectModelStoreFactory() { } public ModelPersister<NbGradleModel> getModelPersister() { return ProjectModelPersister.INSANCE; } public PersistentModelStore<NbGradleModel> createModelStore(NbGradleProject ownerProject) { return new PersistentProjectModelStore(ownerProject); } private enum ProjectModelPersister implements ModelPersister<NbGradleModel> { INSANCE; @Override public void persistModel(NbGradleModel model, Path dest) throws IOException { Path destDir = dest.getParent(); if (destDir != null) { Files.createDirectories(destDir); } SerializedNbGradleModels toSave = SerializedNbGradleModels.createSerialized(model); SerializationUtils2.serializeToFile(dest, toSave); } } private static final class PersistentProjectModelStore implements PersistentModelStore<NbGradleModel> { private final NbGradleProject ownerProject; public PersistentProjectModelStore(NbGradleProject ownerProject) { ExceptionHelper.checkNotNullArgument(ownerProject, "ownerProject"); this.ownerProject = ownerProject; } @Override public void persistModel(NbGradleModel model, Path dest) throws IOException { ProjectModelPersister.INSANCE.persistModel(model, dest); } @Override public NbGradleModel tryLoadModel(Path src) throws IOException { if (!Files.isRegularFile(src)) { return null; } SerializedNbGradleModels serializedModel = (SerializedNbGradleModels)SerializationUtils2.deserializeFile(src); return serializedModel != null ? serializedModel.deserializeModel(ownerProject) : null; } } }