package org.jetbrains.jps.android; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.builders.storage.StorageProvider; import org.jetbrains.jps.incremental.storage.StorageOwner; import java.io.*; /** * @author Eugene.Kudelevsky */ public class AndroidPackagingStateStorage implements StorageOwner { private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.android.AndroidPackagingStateStorage"); private final File myFile; private AndroidPackagingStateStorage(@NotNull File file) { myFile = file; } @Override public void flush(boolean memoryCachesOnly) { } @Override public void clean() throws IOException { FileUtil.delete(myFile); } @Override public void close() throws IOException { } @Nullable public MyState read() { try { final DataInputStream input = new DataInputStream(new FileInputStream(myFile)); try { final boolean release = input.readBoolean(); return new MyState(release); } finally { input.close(); } } catch (FileNotFoundException ignored) { } catch (IOException e) { LOG.info(e); } return null; } public void saveState(@NotNull MyState state) { FileUtil.createParentDirs(myFile); try { final DataOutputStream output = new DataOutputStream(new FileOutputStream(myFile)); try { output.writeBoolean(state.myRelease); } finally { output.close(); } } catch (IOException e) { LOG.info(e); } } public static class MyState { private final boolean myRelease; public MyState(boolean release) { myRelease = release; } public boolean isRelease() { return myRelease; } } public static class Provider extends StorageProvider<AndroidPackagingStateStorage> { public static final Provider INSTANCE = new Provider(); private Provider() { } @NotNull @Override public AndroidPackagingStateStorage createStorage(File targetDataDir) throws IOException { return new AndroidPackagingStateStorage(new File(targetDataDir, "android_packaging_options" + File.separator + "data")); } } }