package com.aconex.scrutineer; public class IdAndVersionConsistencyFailure { private static final int EXPECTED_NUM_FIELDS = 3; private final ConsistencyFailureMode failureMode; private final String primaryId; private final String primaryVersion; public IdAndVersionConsistencyFailure(ConsistencyFailureMode failureMode, String primaryId, String primaryVersion) { this.failureMode = failureMode; this.primaryId = primaryId; this.primaryVersion = primaryVersion; } public static IdAndVersionConsistencyFailure fromString(String s) { String[] fields = s.split("\t"); if (fields == null || fields.length < EXPECTED_NUM_FIELDS) { throw new IllegalArgumentException(String.format("String '%s' does not look like a tab-separated String with enough fields (3)", s)); } ConsistencyFailureMode failureMode = ConsistencyFailureMode.valueOf(fields[0]); return new IdAndVersionConsistencyFailure(failureMode, fields[1], fields[2]); } public String getPrimaryId() { return primaryId; } public String getPrimaryVersion() { return primaryVersion; } public boolean isNotInPrimary() { return failureMode == ConsistencyFailureMode.NOTINPRIMARY; } public boolean isMismatch() { return failureMode == ConsistencyFailureMode.MISMATCH; } public static enum ConsistencyFailureMode { NOTINSECONDARY, NOTINPRIMARY, MISMATCH, } public boolean isNotInSecondary() { return failureMode == ConsistencyFailureMode.NOTINSECONDARY; } }