package net.curisit.securis.beans; import java.util.Collections; import java.util.List; import java.util.Objects; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonPropertyOrder; @JsonAutoDetect @JsonInclude(Include.NON_NULL) @JsonPropertyOrder({ "appCode", "activationCode", "licenseTypeCode", "packCode", "arch", "osName", "customerCode", "macAddresses", "crcLogo" }) public class RequestBean { private String appCode; private String activationCode; private String customerCode; private String crcLogo; private String licenseTypeCode; private String packCode; private List macAddresses; private String osName; private String arch; public String getActivationCode() { return activationCode; } public void setActivationCode(String activationCode) { this.activationCode = activationCode; } public String getCustomerCode() { return customerCode; } public void setCustomerCode(String customerCode) { this.customerCode = customerCode; } public String getCrcLogo() { return crcLogo; } public void setCrcLogo(String crcLogo) { this.crcLogo = crcLogo; } public List getMacAddresses() { return macAddresses; } public void setMacAddresses(List macAddresses) { // We need to be sure that the same mac addresses are always shown in // the same order, to generate a valid hash if (macAddresses != null) { Collections. sort(macAddresses); } this.macAddresses = macAddresses; } public String getOsName() { return osName; } public void setOsName(String osName) { this.osName = osName; } public String getArch() { return arch; } public void setArch(String arch) { this.arch = arch; } public boolean match(RequestBean rb) { boolean result = true; if (activationCode != null) { result = result && activationCode.equals(rb.activationCode); // appCode is optional result = result && (appCode == null || appCode.equals(rb.appCode)); } else { // If activationCode exists then we ignore other license identifiers result = result && licenseTypeCode != null && licenseTypeCode.equals(rb.licenseTypeCode); result = result && (customerCode != null && customerCode.equals(rb.customerCode)); result = result && (packCode != null && packCode.equals(rb.packCode)); } result = result && (arch != null && arch.equals(rb.arch)); // CRC Logo validation is optional, only if request file contains it result = result && (crcLogo == null || crcLogo.equals(rb.crcLogo)); result = result && (osName != null && osName.equals(rb.osName)); result = result && (macAddresses != null && rb.macAddresses != null) && anyMacIsIncluded(rb.getMacAddresses()); return result; } private boolean anyMacIsIncluded(List macList) { for (String mac : macList) { if (macAddresses.contains(mac)) return true; } return false; } @Override public int hashCode() { int code = 0; code += appCode != null ? appCode.hashCode() : 0; code += activationCode != null ? activationCode.hashCode() : 0; code += licenseTypeCode != null ? licenseTypeCode.hashCode() : 0; code += arch != null ? arch.hashCode() : 0; code += crcLogo != null ? crcLogo.hashCode() : 0; code += packCode != null ? packCode.hashCode() : 0; code += customerCode != null ? customerCode.hashCode() : 0; code += osName != null ? osName.hashCode() : 0; code += macAddresses != null ? macAddresses.hashCode() : 0; return code; }; @Override public boolean equals(Object obj) { if (!(obj instanceof RequestBean)) return false; RequestBean rb = (RequestBean) obj; boolean result = true; result = result && Objects.equals(appCode, rb.appCode); result = result && Objects.equals(activationCode, rb.activationCode); result = result && Objects.equals(licenseTypeCode, rb.licenseTypeCode); result = result && Objects.equals(packCode, rb.packCode); result = result && Objects.equals(arch, rb.arch); result = result && Objects.equals(crcLogo, rb.crcLogo); result = result && Objects.equals(customerCode, rb.customerCode); result = result && Objects.equals(osName, rb.osName); result = result && Objects.equals(macAddresses, rb.macAddresses); return result; } public String getPackCode() { return packCode; } public void setPackCode(String packCode) { this.packCode = packCode; } public String getLicenseTypeCode() { return licenseTypeCode; } public void setLicenseTypeCode(String licenseTypeCode) { this.licenseTypeCode = licenseTypeCode; } public String getAppCode() { return appCode; } public void setAppCode(String appCode) { this.appCode = appCode; } }