3033 |
15 Dec 06 |
nicklas |
1 |
/** |
3033 |
15 Dec 06 |
nicklas |
$Id$ |
3033 |
15 Dec 06 |
nicklas |
3 |
|
3675 |
16 Aug 07 |
jari |
Copyright (C) 2006, 2007 Nicklas Nordborg |
3033 |
15 Dec 06 |
nicklas |
5 |
|
3033 |
15 Dec 06 |
nicklas |
This file is part of BASE - BioArray Software Environment. |
3033 |
15 Dec 06 |
nicklas |
Available at http://base.thep.lu.se/ |
3033 |
15 Dec 06 |
nicklas |
8 |
|
3033 |
15 Dec 06 |
nicklas |
BASE is free software; you can redistribute it and/or |
3033 |
15 Dec 06 |
nicklas |
modify it under the terms of the GNU General Public License |
4479 |
05 Sep 08 |
jari |
as published by the Free Software Foundation; either version 3 |
3033 |
15 Dec 06 |
nicklas |
of the License, or (at your option) any later version. |
3033 |
15 Dec 06 |
nicklas |
13 |
|
3033 |
15 Dec 06 |
nicklas |
BASE is distributed in the hope that it will be useful, |
3033 |
15 Dec 06 |
nicklas |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
3033 |
15 Dec 06 |
nicklas |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3033 |
15 Dec 06 |
nicklas |
GNU General Public License for more details. |
3033 |
15 Dec 06 |
nicklas |
18 |
|
3033 |
15 Dec 06 |
nicklas |
You should have received a copy of the GNU General Public License |
4515 |
11 Sep 08 |
jari |
along with BASE. If not, see <http://www.gnu.org/licenses/>. |
3033 |
15 Dec 06 |
nicklas |
21 |
*/ |
3033 |
15 Dec 06 |
nicklas |
22 |
package net.sf.basedb.util.overview; |
3033 |
15 Dec 06 |
nicklas |
23 |
|
3045 |
20 Dec 06 |
nicklas |
24 |
import java.util.Arrays; |
3045 |
20 Dec 06 |
nicklas |
25 |
import java.util.LinkedList; |
3045 |
20 Dec 06 |
nicklas |
26 |
import java.util.List; |
3045 |
20 Dec 06 |
nicklas |
27 |
|
5384 |
13 Aug 10 |
nicklas |
28 |
import net.sf.basedb.util.EqualsHelper; |
6047 |
18 Apr 12 |
nicklas |
29 |
import net.sf.basedb.util.overview.extensions.ValidationRuleAction; |
3051 |
08 Jan 07 |
nicklas |
30 |
|
3033 |
15 Dec 06 |
nicklas |
31 |
/** |
3033 |
15 Dec 06 |
nicklas |
Holds information about a failed validation. Note that all |
3033 |
15 Dec 06 |
nicklas |
rules are always validated. Use a {@link ValidationOptions} |
3033 |
15 Dec 06 |
nicklas |
object to keep track of which validators that should be |
3033 |
15 Dec 06 |
nicklas |
ignored, generate warnings or errors. |
3062 |
15 Jan 07 |
nicklas |
<p> |
3062 |
15 Jan 07 |
nicklas |
NOTE! The implementation of the {@link #equals(Object)} method of |
3062 |
15 Jan 07 |
nicklas |
this object is a bit unorthodox. Two failures are considered equal |
3062 |
15 Jan 07 |
nicklas |
if they have the same validator but different nodes referencing the |
4134 |
08 Feb 08 |
nicklas |
same item with the same descriptor. Two failures on the same node |
4134 |
08 Feb 08 |
nicklas |
are never equal. This allows us to filter out duplicate failures that |
4134 |
08 Feb 08 |
nicklas |
happens because there can be several ways to reach a certain item (for |
4134 |
08 Feb 08 |
nicklas |
example a reference sample that is used on all hybridizations). |
3062 |
15 Jan 07 |
nicklas |
44 |
|
3033 |
15 Dec 06 |
nicklas |
@author Nicklas |
3033 |
15 Dec 06 |
nicklas |
@version 2.2 |
3033 |
15 Dec 06 |
nicklas |
@base.modified $Date$ |
3033 |
15 Dec 06 |
nicklas |
@see Validator |
3033 |
15 Dec 06 |
nicklas |
@see ValidationOptions |
4789 |
24 Feb 09 |
nicklas |
@see GenericOverview#getFailures() |
4789 |
24 Feb 09 |
nicklas |
@see GenericOverview#getValidationOptions() |
3033 |
15 Dec 06 |
nicklas |
52 |
*/ |
3033 |
15 Dec 06 |
nicklas |
53 |
public class Failure |
3033 |
15 Dec 06 |
nicklas |
54 |
{ |
3033 |
15 Dec 06 |
nicklas |
55 |
|
6047 |
18 Apr 12 |
nicklas |
56 |
private ValidationRuleAction rule; |
3033 |
15 Dec 06 |
nicklas |
57 |
private Node node; |
3045 |
20 Dec 06 |
nicklas |
58 |
private String message; |
3045 |
20 Dec 06 |
nicklas |
59 |
private List<Fix> fixes; |
4134 |
08 Feb 08 |
nicklas |
60 |
private Object descriptor; |
3033 |
15 Dec 06 |
nicklas |
61 |
|
3033 |
15 Dec 06 |
nicklas |
62 |
/** |
3033 |
15 Dec 06 |
nicklas |
Create a new validation failure. |
6047 |
18 Apr 12 |
nicklas |
@param rule The validation rule that fails |
3033 |
15 Dec 06 |
nicklas |
@param node The node that contains the failure |
3033 |
15 Dec 06 |
nicklas |
66 |
*/ |
6047 |
18 Apr 12 |
nicklas |
67 |
public Failure(ValidationRuleAction rule, Node node) |
3033 |
15 Dec 06 |
nicklas |
68 |
{ |
6047 |
18 Apr 12 |
nicklas |
69 |
this(rule, node, null, (Fix[])null); |
3045 |
20 Dec 06 |
nicklas |
70 |
} |
3045 |
20 Dec 06 |
nicklas |
71 |
|
3062 |
15 Jan 07 |
nicklas |
72 |
/** |
3062 |
15 Jan 07 |
nicklas |
Create a new validation failure with a detailed message. |
6047 |
18 Apr 12 |
nicklas |
@param rule The validation rule that fails |
3062 |
15 Jan 07 |
nicklas |
@param node The node that contains the failure |
3062 |
15 Jan 07 |
nicklas |
@param message A detailed message about the failue, if null |
3062 |
15 Jan 07 |
nicklas |
the {@link Validator#getFailureSummary()} is used |
3062 |
15 Jan 07 |
nicklas |
78 |
*/ |
6047 |
18 Apr 12 |
nicklas |
79 |
public Failure(ValidationRuleAction rule, Node node, String message) |
3045 |
20 Dec 06 |
nicklas |
80 |
{ |
6047 |
18 Apr 12 |
nicklas |
81 |
this(rule, node, message, (Fix[])null); |
3045 |
20 Dec 06 |
nicklas |
82 |
} |
3045 |
20 Dec 06 |
nicklas |
83 |
|
3062 |
15 Jan 07 |
nicklas |
84 |
/** |
3062 |
15 Jan 07 |
nicklas |
Create a new validation failure with a detailed message and a list |
3062 |
15 Jan 07 |
nicklas |
of suggested fixes. |
3062 |
15 Jan 07 |
nicklas |
87 |
|
6047 |
18 Apr 12 |
nicklas |
@param rule The validation rule that fails |
3062 |
15 Jan 07 |
nicklas |
@param node The node that contains the failure |
3062 |
15 Jan 07 |
nicklas |
@param message A detailed message about the failue, if null |
3062 |
15 Jan 07 |
nicklas |
the {@link Validator#getFailureSummary()} is used |
3062 |
15 Jan 07 |
nicklas |
@param fixes A list of suggested fixes |
3062 |
15 Jan 07 |
nicklas |
93 |
*/ |
6047 |
18 Apr 12 |
nicklas |
94 |
public Failure(ValidationRuleAction rule, Node node, String message, Fix... fixes) |
3045 |
20 Dec 06 |
nicklas |
95 |
{ |
6047 |
18 Apr 12 |
nicklas |
96 |
this.rule = rule; |
3033 |
15 Dec 06 |
nicklas |
97 |
this.node = node; |
3045 |
20 Dec 06 |
nicklas |
98 |
this.message = message; |
3045 |
20 Dec 06 |
nicklas |
99 |
this.fixes = new LinkedList<Fix>(); |
3045 |
20 Dec 06 |
nicklas |
100 |
if (fixes != null) this.fixes.addAll(Arrays.asList(fixes)); |
3033 |
15 Dec 06 |
nicklas |
101 |
} |
3033 |
15 Dec 06 |
nicklas |
102 |
|
3033 |
15 Dec 06 |
nicklas |
103 |
/** |
4134 |
08 Feb 08 |
nicklas |
Set a descriptor on this failure. This affects the {@link #equals(Object)} |
4134 |
08 Feb 08 |
nicklas |
method, since the descriptor must be equal for two failures to be |
4134 |
08 Feb 08 |
nicklas |
equal. |
4134 |
08 Feb 08 |
nicklas |
<p> |
4134 |
08 Feb 08 |
nicklas |
NOTE! The main reason for this property is that we need to discriminate |
5807 |
14 Oct 11 |
nicklas |
between failures on different positions on physical bioassays. |
4134 |
08 Feb 08 |
nicklas |
@param descriptor Any object |
4134 |
08 Feb 08 |
nicklas |
@since 2.6 |
4134 |
08 Feb 08 |
nicklas |
112 |
*/ |
4134 |
08 Feb 08 |
nicklas |
113 |
public void setDescriptor(Object descriptor) |
4134 |
08 Feb 08 |
nicklas |
114 |
{ |
4134 |
08 Feb 08 |
nicklas |
115 |
this.descriptor = descriptor; |
4134 |
08 Feb 08 |
nicklas |
116 |
} |
4134 |
08 Feb 08 |
nicklas |
117 |
/** |
4134 |
08 Feb 08 |
nicklas |
@return The descriptor |
4134 |
08 Feb 08 |
nicklas |
@since 2.6 |
4134 |
08 Feb 08 |
nicklas |
@see #setDescriptor(Object) |
4134 |
08 Feb 08 |
nicklas |
121 |
*/ |
4134 |
08 Feb 08 |
nicklas |
122 |
public Object getDescriptor() |
4134 |
08 Feb 08 |
nicklas |
123 |
{ |
4134 |
08 Feb 08 |
nicklas |
124 |
return descriptor; |
4134 |
08 Feb 08 |
nicklas |
125 |
} |
4134 |
08 Feb 08 |
nicklas |
126 |
|
4134 |
08 Feb 08 |
nicklas |
127 |
/** |
3033 |
15 Dec 06 |
nicklas |
Get the validation rule that failed. |
6047 |
18 Apr 12 |
nicklas |
@since 3.2 |
3033 |
15 Dec 06 |
nicklas |
130 |
*/ |
6047 |
18 Apr 12 |
nicklas |
131 |
public ValidationRuleAction getValidator() |
3033 |
15 Dec 06 |
nicklas |
132 |
{ |
6047 |
18 Apr 12 |
nicklas |
133 |
return rule; |
3033 |
15 Dec 06 |
nicklas |
134 |
} |
3033 |
15 Dec 06 |
nicklas |
135 |
|
3033 |
15 Dec 06 |
nicklas |
136 |
/** |
3033 |
15 Dec 06 |
nicklas |
Get the node that failed validation. |
3033 |
15 Dec 06 |
nicklas |
138 |
*/ |
3033 |
15 Dec 06 |
nicklas |
139 |
public Node getNode() |
3033 |
15 Dec 06 |
nicklas |
140 |
{ |
3033 |
15 Dec 06 |
nicklas |
141 |
return node; |
3033 |
15 Dec 06 |
nicklas |
142 |
} |
3033 |
15 Dec 06 |
nicklas |
143 |
|
3045 |
20 Dec 06 |
nicklas |
144 |
/** |
3045 |
20 Dec 06 |
nicklas |
Get a message explaining the failure. |
3045 |
20 Dec 06 |
nicklas |
146 |
*/ |
3045 |
20 Dec 06 |
nicklas |
147 |
public String getMessage() |
3045 |
20 Dec 06 |
nicklas |
148 |
{ |
6047 |
18 Apr 12 |
nicklas |
149 |
return message != null ? message : rule.getFailureSummary(); |
3045 |
20 Dec 06 |
nicklas |
150 |
} |
3045 |
20 Dec 06 |
nicklas |
151 |
|
3062 |
15 Jan 07 |
nicklas |
152 |
/** |
3062 |
15 Jan 07 |
nicklas |
Get a list of suggested fixes. |
3062 |
15 Jan 07 |
nicklas |
@return A list of suggested fixes, or null if there are none |
3062 |
15 Jan 07 |
nicklas |
155 |
*/ |
3045 |
20 Dec 06 |
nicklas |
156 |
public List<Fix> getFixes() |
3045 |
20 Dec 06 |
nicklas |
157 |
{ |
3045 |
20 Dec 06 |
nicklas |
158 |
return fixes; |
3045 |
20 Dec 06 |
nicklas |
159 |
} |
3045 |
20 Dec 06 |
nicklas |
160 |
|
3062 |
15 Jan 07 |
nicklas |
161 |
/** |
3062 |
15 Jan 07 |
nicklas |
Add a suggested fix to this failure. |
4034 |
05 Dec 07 |
martin |
@param fix The fix to add. |
3062 |
15 Jan 07 |
nicklas |
164 |
*/ |
3045 |
20 Dec 06 |
nicklas |
165 |
public void addFix(Fix fix) |
3045 |
20 Dec 06 |
nicklas |
166 |
{ |
3045 |
20 Dec 06 |
nicklas |
167 |
fixes.add(fix); |
3045 |
20 Dec 06 |
nicklas |
168 |
} |
3045 |
20 Dec 06 |
nicklas |
169 |
|
3062 |
15 Jan 07 |
nicklas |
170 |
/* |
3062 |
15 Jan 07 |
nicklas |
From the Object class |
3062 |
15 Jan 07 |
nicklas |
172 |
------------------------------------------- |
3062 |
15 Jan 07 |
nicklas |
173 |
*/ |
6127 |
14 Sep 12 |
nicklas |
174 |
@Override |
3045 |
20 Dec 06 |
nicklas |
175 |
public String toString() |
3045 |
20 Dec 06 |
nicklas |
176 |
{ |
3045 |
20 Dec 06 |
nicklas |
177 |
return getMessage(); |
3045 |
20 Dec 06 |
nicklas |
178 |
} |
3051 |
08 Jan 07 |
nicklas |
179 |
|
3051 |
08 Jan 07 |
nicklas |
180 |
/** |
3051 |
08 Jan 07 |
nicklas |
One failure is the same as another if they have the same validator |
4134 |
08 Feb 08 |
nicklas |
but different nodes referencing the same item with equal descriptors. |
3051 |
08 Jan 07 |
nicklas |
183 |
*/ |
3051 |
08 Jan 07 |
nicklas |
184 |
@Override |
3051 |
08 Jan 07 |
nicklas |
185 |
public boolean equals(Object o) |
3051 |
08 Jan 07 |
nicklas |
186 |
{ |
5384 |
13 Aug 10 |
nicklas |
187 |
if (this == o) return true; |
3051 |
08 Jan 07 |
nicklas |
188 |
if (o == null || o.getClass() != this.getClass()) return false; |
3051 |
08 Jan 07 |
nicklas |
189 |
Failure other = (Failure)o; |
3051 |
08 Jan 07 |
nicklas |
190 |
boolean sameNode = this.node == other.node; |
3051 |
08 Jan 07 |
nicklas |
191 |
boolean sameItem = sameNode || this.node.getItem() == other.node.getItem(); |
6047 |
18 Apr 12 |
nicklas |
192 |
boolean sameRule = this.rule == other.rule; |
5384 |
13 Aug 10 |
nicklas |
193 |
boolean sameSpecificator = sameNode || EqualsHelper.equals(this.descriptor, other.descriptor); |
6047 |
18 Apr 12 |
nicklas |
194 |
return !sameNode && sameItem && sameRule && sameSpecificator; |
3051 |
08 Jan 07 |
nicklas |
195 |
} |
3051 |
08 Jan 07 |
nicklas |
196 |
|
3051 |
08 Jan 07 |
nicklas |
197 |
@Override |
3051 |
08 Jan 07 |
nicklas |
198 |
public int hashCode() |
3051 |
08 Jan 07 |
nicklas |
199 |
{ |
6047 |
18 Apr 12 |
nicklas |
200 |
return rule.hashCode(); |
3051 |
08 Jan 07 |
nicklas |
201 |
} |
3062 |
15 Jan 07 |
nicklas |
202 |
// ------------------------------------------- |
3033 |
15 Dec 06 |
nicklas |
203 |
} |