From 36fd88ab60aba832da367325110367164f6a5bdd Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Thu, 20 Dec 2018 00:41:23 +0000
Subject: [PATCH] Difftool...
---
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 105 insertions(+), 3 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
index b4d8c24..b751326 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
@@ -1,19 +1,24 @@
package de.micromata.borgbutler.json.borg;
-import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.Serializable;
public class BorgFilesystemItem implements Serializable, Comparable<BorgFilesystemItem> {
+ private transient static Logger log = LoggerFactory.getLogger(BorgFilesystemItem.class);
private static final long serialVersionUID = -5545350851640655468L;
/**
* If running in diff mode, this flag specifies the type of difference. Null represents unmodified.
*/
public enum DiffStatus {NEW, REMOVED, MODIFIED}
+
/**
* d (directory), - (file)
*/
@@ -24,6 +29,7 @@
* Unix mode, e. g. <tt>drwxr-xr-x</tt>
*/
@Getter
+ @Setter
private String mode;
@Getter
private String user;
@@ -51,6 +57,7 @@
@Setter
private String mtime;
@Getter
+ @Setter
private long size;
/**
* Represents the number of the file in the archive (for downloading). This field is created and only known by BorgButler.
@@ -75,7 +82,6 @@
* This String may used for displaying.
*/
@Getter
- @Setter
private String differences;
@Override
@@ -87,8 +93,104 @@
return -1;
}
if (o.path == null) {
- return 1;
+ return 1;
}
return path.compareToIgnoreCase(o.path);
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (obj == this) {
+ return true;
+ }
+ if (obj.getClass() != getClass()) {
+ return false;
+ }
+ BorgFilesystemItem rhs = (BorgFilesystemItem) obj;
+ return new EqualsBuilder()
+ .append(path, rhs.path)
+ .append(type, rhs.type)
+ .append(mode, rhs.mode)
+ .append(user, rhs.user)
+ .append(group, rhs.group)
+ .append(uid, rhs.uid)
+ .append(gid, rhs.gid)
+ .append(mtime, rhs.mtime)
+ .append(size, rhs.size)
+ .append(flags, rhs.flags)
+ .isEquals();
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(path)
+ .append(type)
+ .append(mode)
+ .append(user)
+ .append(group)
+ .append(uid)
+ .append(gid)
+ .append(mtime)
+ .append(size)
+ .append(flags)
+ .toHashCode();
+ }
+
+ /**
+ * Compares all fields and creates human readable string with differences.
+ */
+ public void buildDifferencesString() {
+ if (diffItem == null) {
+ // Nothing to do.
+ return;
+ }
+ if (!StringUtils.equals(this.path, diffItem.path)) {
+ log.error("*** Internal error: Differences should only be made on same path object: current='" + path + "', other='" + diffItem.path + "'.");
+ return;
+ }
+ StringBuilder sb = new StringBuilder();
+ appendDiff(sb, "type", this.type, diffItem.type);
+ appendDiff(sb, "mode", this.mode, diffItem.mode);
+ appendDiff(sb, "user", this.user, diffItem.user);
+ appendDiff(sb, "group", this.group, diffItem.group);
+ appendDiff(sb, "uid", this.uid, diffItem.uid);
+ appendDiff(sb, "gid", this.gid, diffItem.gid);
+ appendDiff(sb, "mtime", this.mtime, diffItem.mtime);
+ appendDiff(sb, "size", this.size, diffItem.size);
+ if (sb.length() > 0) {
+ diffStatus = DiffStatus.MODIFIED;
+ this.differences = sb.toString();
+ }
+ }
+
+ private void appendDiff(StringBuilder sb, String field, String current, String other) {
+ if (StringUtils.equals(current, other)) {
+ // Not modified.
+ return;
+ }
+ if (sb.length() > 0) {
+ sb.append(", ");
+ }
+ sb.append(field + ":['" + other + "'->'" + current + "']");
+ }
+
+ private void appendDiff(StringBuilder sb, String field, long current, long other) {
+ if (current == other) {
+ // Not modified.
+ return;
+ }
+ if (sb.length() > 0) {
+ sb.append(", ");
+ }
+ sb.append(field + ": ['" + current + "' -> '" + other + "']");
+ }
+
+ @Override
+ public String toString() {
+ return path;
+ }
}
--
Gitblit v1.10.0