César Calvo
2016-09-28 e1d59acfb21c99b8b1b0ca0504b599f9ac444d19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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<String> 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<String> getMacAddresses() {
        return macAddresses;
    }
    public void setMacAddresses(List<String> 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.<String> 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<String> 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;
    }
}