package com.example.services.impl;
import com.example.services.Event;
import com.example.services.FileOperation;
import com.google.gson.JsonObject;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.WatchEvent;
import java.util.HashMap;
import java.util.Map;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
public class S3FileEvent implements Event {
private FileOperation operation;
private File file;
private boolean isDirectory;
private String originator;
private static Map<String, FileOperation> operationAsStringMap = new HashMap<String, FileOperation>();
private static Map<WatchEvent.Kind, FileOperation> operationAsKindMap = new HashMap<WatchEvent.Kind, FileOperation>();
static {
operationAsKindMap.put(ENTRY_CREATE, FileOperation.CREATE);
operationAsKindMap.put(ENTRY_DELETE, FileOperation.DELETE);
operationAsKindMap.put(ENTRY_MODIFY, FileOperation.MODIFY);
operationAsStringMap.put("CREATE", FileOperation.CREATE);
operationAsStringMap.put("DELETE", FileOperation.DELETE);
operationAsStringMap.put("MODIFY", FileOperation.MODIFY);
}
public S3FileEvent(FileOperation operation, File file, String originator) {
this.operation = operation;
this.file = file;
this.isDirectory = file.isDirectory();
this.originator = originator;
}
public S3FileEvent(FileOperation operation, File file, String originator, boolean isDirectory) {
this(operation, file, originator);
this.isDirectory = isDirectory;
}
@Override
public FileOperation getOperation() {
return operation;
}
@Override
public File getFile() {
return file;
}
@Override
public boolean isDirectory() {
return isDirectory;
}
@Override
public String getOriginator() {
return originator;
}
public String toJson(Path baseDir) {
JsonObject o = new JsonObject();
o.addProperty("operation", this.getOperation().toString());
Path path = baseDir.relativize(file.toPath());
if (file.isDirectory()) {
o.addProperty("file", path.toString() + "/");
} else {
o.addProperty("file", path.toString());
}
o.addProperty("originator", originator);
return o.toString();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof S3FileEvent)) {
return false;
}
S3FileEvent o = (S3FileEvent)obj;
return this.operation == o.operation && this.file.getAbsolutePath().equals(o.getFile().getAbsolutePath());
}
@Override
public int hashCode() {
int hash = 1;
hash = hash * 17 + operation.ordinal();
hash = hash * 17 + (isDirectory ? 1 : 0);
hash = hash * 17 + file.getAbsolutePath().hashCode();
return hash;
}
public static FileOperation getFileOperation(String op) {
return operationAsStringMap.get(op);
}
public static FileOperation getFileOperation(WatchEvent.Kind op) {
return operationAsKindMap.get(op);
}
}