package edu.illinois.codingspectator.refactoringproblems.logger;
/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.internal.resources.XMLWriter;
import org.eclipse.jdt.core.compiler.CategorizedProblem;
import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
/**
*
* Wraps the DefaultProblem type so that we can implement equals and hashCode for performing set
* operations
*
* @author Balaji Ambresh Rajkumar
* @author Mohsen Vakilian
* @author nchen
* @author Stas Negara
*
*/
@SuppressWarnings("restriction")
public class DefaultProblemWrapper {
private String problemMarker;
private String fileName;
private String message;
private int id;
private String[] arguments;
private int endPosition;
private int line;
private int startPosition;
private int severity;
public static String PROBLEM_TAG_NAME= "problem";
public DefaultProblemWrapper(String problemMarker, CategorizedProblem problem) {
this.problemMarker= problemMarker;
fileName= new String(problem.getOriginatingFileName());
message= problem.getMessage();
id= problem.getID();
arguments= problem.getArguments();
endPosition= problem.getSourceEnd();
line= problem.getSourceLineNumber();
startPosition= problem.getSourceStart();
severity= problem.isError() ? ProblemSeverities.Error : ProblemSeverities.Warning;
}
public static Set<DefaultProblemWrapper> initializeFromArrays(String problemMarker, CategorizedProblem[] categorizedProblems) {
Set<DefaultProblemWrapper> wrappers= new HashSet<DefaultProblemWrapper>(categorizedProblems.length);
for (CategorizedProblem categorizedProblem : categorizedProblems) {
wrappers.add(new DefaultProblemWrapper(problemMarker, categorizedProblem));
}
return wrappers;
}
/////////////////////////////////
// Auto-generated through Eclipse
/////////////////////////////////
@Override
public int hashCode() {
final int prime= 31;
int result= 1;
result= prime * result + Arrays.hashCode(arguments);
result= prime * result + endPosition;
result= prime * result + ((fileName == null) ? 0 : fileName.hashCode());
result= prime * result + id;
result= prime * result + line;
result= prime * result + ((message == null) ? 0 : message.hashCode());
result= prime * result + ((problemMarker == null) ? 0 : problemMarker.hashCode());
result= prime * result + severity;
result= prime * result + startPosition;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
DefaultProblemWrapper other= (DefaultProblemWrapper)obj;
if (!Arrays.equals(arguments, other.arguments)) {
return false;
}
if (endPosition != other.endPosition) {
return false;
}
if (fileName == null) {
if (other.fileName != null) {
return false;
}
} else if (!fileName.equals(other.fileName)) {
return false;
}
if (id != other.id) {
return false;
}
if (line != other.line) {
return false;
}
if (message == null) {
if (other.message != null) {
return false;
}
} else if (!message.equals(other.message)) {
return false;
}
if (problemMarker == null) {
if (other.problemMarker != null) {
return false;
}
} else if (!problemMarker.equals(other.problemMarker)) {
return false;
}
if (severity != other.severity) {
return false;
}
if (startPosition != other.startPosition) {
return false;
}
return true;
}
@Override
public String toString() {
return "DefaultProblemWrapper [problemMarker=" + problemMarker + ", fileName=" + fileName + ", message=" + message + ", id=" + id + ", arguments=" + Arrays.toString(arguments)
+ ", endPosition=" + endPosition + ", line=" + line + ", startPosition=" + startPosition + ", severity=" + severity + "]";
}
public void addTo(XMLWriter xmlWriter) throws UnsupportedEncodingException {
HashMap<String, Object> parameters= new HashMap<String, Object>();
parameters.put("problemMarker", problemMarker);
parameters.put("fileName", fileName);
parameters.put("message", message);
parameters.put("id", id);
parameters.put("arguments", Arrays.toString(arguments));
parameters.put("endPosition", endPosition);
parameters.put("line", line);
parameters.put("startPosition", startPosition);
parameters.put("severity", severity);
xmlWriter.startTag(PROBLEM_TAG_NAME, parameters);
xmlWriter.endTag(PROBLEM_TAG_NAME);
xmlWriter.flush();
}
}