1 /*
2 * Copyright (c) 2011-2022, jcabi.com
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met: 1) Redistributions of source code must retain the above
8 * copyright notice, this list of conditions and the following
9 * disclaimer. 2) Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution. 3) Neither the name of the jcabi.com nor
13 * the names of its contributors may be used to endorse or promote
14 * products derived from this software without specific prior written
15 * permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 package com.jcabi.w3c;
31
32 import com.jcabi.log.Logger;
33 import lombok.EqualsAndHashCode;
34
35 /**
36 * Validation defect (error or warning) produced by {@link ValidationResponse}.
37 *
38 * <p>Objects of this class are immutable and thread-safe.
39 *
40 * @see <a href="http://validator.w3.org/docs/api.html">W3C API</a>
41 * @since 0.1
42 * @checkstyle LineLength (2 lines)
43 */
44 @EqualsAndHashCode(of = { "iline", "icolumn", "isource", "iexplanation", "msg", "imessage" })
45 public final class Defect {
46
47 /**
48 * Line.
49 */
50 private final transient int iline;
51
52 /**
53 * Column.
54 */
55 private final transient int icolumn;
56
57 /**
58 * Source line.
59 */
60 private final transient String isource;
61
62 /**
63 * Explanation.
64 */
65 private final transient String iexplanation;
66
67 /**
68 * Message id.
69 */
70 private final transient String msg;
71
72 /**
73 * The message.
74 */
75 private final transient String imessage;
76
77 /**
78 * Protected ctor, to be called only from this package.
79 * @param line Line number
80 * @param column Column number
81 * @param source Source line
82 * @param explanation The explanation
83 * @param mid ID of the message
84 * @param message Message text
85 * @checkstyle ParameterNumber (5 lines)
86 */
87 Defect(final int line, final int column, final String source,
88 final String explanation, final String mid,
89 final String message) {
90 this.iline = line;
91 this.icolumn = column;
92 this.isource = source.trim();
93 this.iexplanation = explanation.trim();
94 this.msg = mid.trim();
95 this.imessage = message.trim();
96 }
97
98 @Override
99 public String toString() {
100 return Logger.format(
101 "[%d:%d] \"%s\", \"%s\", \"%s\", \"%s\"",
102 this.iline,
103 this.icolumn,
104 this.isource,
105 this.iexplanation,
106 this.msg,
107 this.imessage
108 );
109 }
110
111 /**
112 * Line number, where the defect was found.
113 * @return Line number
114 */
115 public int line() {
116 return this.iline;
117 }
118
119 /**
120 * Column number inside the line.
121 * @return Column number
122 */
123 public int column() {
124 return this.icolumn;
125 }
126
127 /**
128 * Source line, as quoted by W3C validator.
129 * @return Full text of the source line
130 */
131 public String source() {
132 return this.isource;
133 }
134
135 /**
136 * Explanation of the problem.
137 * @return Text
138 */
139 public String explanation() {
140 return this.iexplanation;
141 }
142
143 /**
144 * Message ID, according to W3C API.
145 * @return The ID
146 */
147 public String messageId() {
148 return this.msg;
149 }
150
151 /**
152 * Text of the message.
153 * @return The message returned by W3C server
154 */
155 public String message() {
156 return this.imessage;
157 }
158
159 }