View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de Paris
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:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.portal.service.csv;
35  
36  import org.apache.commons.lang.StringUtils;
37  
38  
39  /**
40   * Describe an error that occurred during the reading of a CSV file.
41   */
42  public class CSVMessageDescriptor implements Comparable<CSVMessageDescriptor>
43  {
44      private CSVMessageLevel _messageLevel;
45      private int _nLineNumber;
46      private String _strMessageContent;
47  
48      /**
49       * Default constructor
50       */
51      public CSVMessageDescriptor(  )
52      {
53      }
54  
55      /**
56       * Creates a new <i>CSVMessageDescriptor</i> with every attributes
57       * initialized
58       * @param messageLevel The level of the message
59       * @param nLineNumber The number of the line associated with the message
60       * @param strMessageContent The content of the message
61       */
62      public CSVMessageDescriptor( CSVMessageLevel messageLevel, int nLineNumber, String strMessageContent )
63      {
64          this._messageLevel = messageLevel;
65          this._nLineNumber = nLineNumber;
66          this._strMessageContent = strMessageContent;
67      }
68  
69      /**
70       * Get the level of the message
71       * @return The level of the message
72       */
73      public CSVMessageLevel getMessageLevel(  )
74      {
75          return _messageLevel;
76      }
77  
78      /**
79       * Set the level of the message
80       * @param messageLevel the level of the message
81       */
82      public void setMessageLevel( CSVMessageLevel messageLevel )
83      {
84          this._messageLevel = messageLevel;
85      }
86  
87      /**
88       * Get the number of the line of the CSV file associated with this message.
89       * @return The number of the line of the CSV file associated with this
90       *         message.
91       */
92      public int getLineNumber(  )
93      {
94          return _nLineNumber;
95      }
96  
97      /**
98       * Set the number of the line of the CSV file associated with this error.
99       * @param nLineNumber The number of the line of the CSV file associated with
100      *            this error.
101      */
102     public void setLineNumber( int nLineNumber )
103     {
104         this._nLineNumber = nLineNumber;
105     }
106 
107     /**
108      * Get the description of the message
109      * @return The description of the message
110      */
111     public String getMessageContent(  )
112     {
113         return _strMessageContent;
114     }
115 
116     /**
117      * Set the description of the message
118      * @param strMessageContent The description of the message
119      */
120     public void setMessageContent( String strMessageContent )
121     {
122         this._strMessageContent = strMessageContent;
123     }
124 
125     /**
126      * compare this CSVMessageDescriptor with another.<br />
127      * <b>This method returns 0 for objects that are not equals ! Use with care
128      * in collections !</b>
129      * @param o Object to compare to
130      * @return Returns :<br />
131      *         <ul>
132      *         <li>
133      *         -1 if the line number of this object is greater than the line
134      *         number of the other object, or if this object has an
135      *         {@link CSVMessageLevel#INFO INFO} level and the other one an
136      *         {@link CSVMessageLevel#ERROR ERROR} level if they have the same
137      *         line number.</li>
138      *         <li>
139      *         0 if they both have the same line number and level, regardless of
140      *         their description</li>
141      *         <li>1 if the other object is null, if its line number if greater
142      *         than the line number of the current object, or if this object has
143      *         a {@link CSVMessageLevel#ERROR ERROR} level whereas the other has
144      *         the {@link CSVMessageLevel#INFO INFO} level if they have the same
145      *         line number.</li>
146      *         </ul>
147      */
148     @Override
149     public int compareTo( CSVMessageDescriptor o )
150     {
151         if ( null == o )
152         {
153             return 1;
154         }
155 
156         if ( this.getLineNumber(  ) == o.getLineNumber(  ) )
157         {
158             if ( this.getMessageLevel(  ) == CSVMessageLevel.ERROR )
159             {
160                 if ( o.getMessageLevel(  ) == CSVMessageLevel.ERROR )
161                 {
162                     return getMessageContent(  ).compareTo( o.getMessageContent(  ) );
163                 }
164 
165                 return 1;
166             }
167 
168             if ( o.getMessageLevel(  ) == CSVMessageLevel.INFO )
169             {
170                 return getMessageContent(  ).compareTo( o.getMessageContent(  ) );
171             }
172 
173             return -1;
174         }
175 
176         if ( this.getLineNumber(  ) > o.getLineNumber(  ) )
177         {
178             return 1;
179         }
180 
181         return -1;
182     }
183 
184     /**
185      * {@inheritDoc}
186      */
187     @Override
188     public boolean equals( Object o )
189     {
190         if ( !( o instanceof CSVMessageDescriptor ) )
191         {
192             return false;
193         }
194 
195         CSVMessageDescriptor other = (CSVMessageDescriptor) o;
196 
197         return ( getLineNumber(  ) == other.getLineNumber(  ) ) &&
198         ( ( ( getMessageLevel(  ) == null ) && ( other.getMessageLevel(  ) == null ) ) ||
199         getMessageLevel(  ).equals( other.getMessageLevel(  ) ) ) &&
200         StringUtils.equals( getMessageContent(  ), other.getMessageContent(  ) );
201     }
202 
203     /**
204      * {@inheritDoc}
205      */
206     @Override
207     public int hashCode(  )
208     {
209         return ( this.getLineNumber(  ) * 1000 ) + this.getMessageLevel(  ).hashCode(  );
210     }
211 }