| package org.jetbrains.jps.android; |
| |
| import com.intellij.openapi.util.Condition; |
| import com.intellij.openapi.util.io.FileUtil; |
| import com.intellij.util.Processor; |
| import com.intellij.util.containers.HashMap; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.jps.incremental.storage.ValidityState; |
| |
| import java.io.DataInput; |
| import java.io.DataOutput; |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.Collection; |
| import java.util.Map; |
| |
| /** |
| * @author Eugene.Kudelevsky |
| */ |
| public class AndroidFileSetState implements ValidityState { |
| private final Map<String, Long> myTimestamps; |
| |
| public AndroidFileSetState(@NotNull Collection<String> roots, @NotNull final Condition<File> filter, boolean recursively) { |
| myTimestamps = new HashMap<String, Long>(); |
| |
| for (String rootPath : roots) { |
| final File root = new File(rootPath); |
| |
| if (recursively) { |
| FileUtil.processFilesRecursively(root, new Processor<File>() { |
| @Override |
| public boolean process(File file) { |
| if (filter.value(file)) { |
| myTimestamps.put(FileUtil.toSystemIndependentName(file.getPath()), file.lastModified()); |
| } |
| return true; |
| } |
| }); |
| } |
| else if (filter.value(root)) { |
| myTimestamps.put(FileUtil.toSystemIndependentName(root.getPath()), root.lastModified()); |
| } |
| } |
| } |
| |
| public AndroidFileSetState(DataInput in) throws IOException { |
| final int resourcesCount = in.readInt(); |
| myTimestamps = new HashMap<String, Long>(resourcesCount); |
| |
| for (int i = 0; i < resourcesCount; i++) { |
| final String filePath = in.readUTF(); |
| final long timestamp = in.readLong(); |
| |
| myTimestamps.put(filePath, timestamp); |
| } |
| } |
| |
| @Override |
| public boolean equalsTo(ValidityState otherState) { |
| return otherState instanceof AndroidFileSetState && |
| ((AndroidFileSetState)otherState).myTimestamps.equals(myTimestamps); |
| } |
| |
| @Override |
| public void save(DataOutput out) throws IOException { |
| out.writeInt(myTimestamps.size()); |
| |
| for (Map.Entry<String, Long> entry : myTimestamps.entrySet()) { |
| out.writeUTF(entry.getKey()); |
| out.writeLong(entry.getValue()); |
| } |
| } |
| } |