1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package gov.nasa.pds.tools.label.validate;
18
19 import java.util.HashSet;
20 import java.util.Iterator;
21 import java.util.List;
22 import java.util.Set;
23 import java.util.logging.Level;
24 import java.util.logging.Logger;
25
26 import gov.nasa.pds.tools.label.GroupStatement;
27 import gov.nasa.pds.tools.label.Label;
28 import gov.nasa.pds.tools.label.ObjectStatement;
29 import gov.nasa.pds.tools.label.Statement;
30 import gov.nasa.pds.tools.label.AttributeStatement;
31 import gov.nasa.pds.tools.logging.ToolsLogRecord;
32
33 /***
34 * @author pramirez
35 * @version $Revision: 3795 $
36 *
37 */
38 public class DuplicateIdentifierValidator implements LabelValidator {
39 private static Logger log = Logger.getLogger(DuplicateIdentifierValidator.class.getName());
40
41
42
43
44 public boolean isValid(Label label) {
45 return isValid(label, new DefaultValidationListener());
46 }
47
48
49
50
51 public boolean isValid(Label label, ValidationListener listener) {
52 return isValid(label.getStatements(), listener);
53 }
54
55 private boolean isValid(List statements, ValidationListener listener) {
56 boolean valid = true;
57 Set seenIdentifiers = new HashSet();
58
59 for (Iterator i = statements.iterator(); i.hasNext();) {
60 Statement statement = (Statement) i.next();
61 if (statement instanceof AttributeStatement) {
62 if (seenIdentifiers.contains(statement.getFilename() + "#" + statement.getIdentifier())) {
63 valid = false;
64 listener.reportError("Duplicate " + statement.getIdentifier() + "found.");
65 log.log(new ToolsLogRecord(Level.SEVERE, "Duplicate " + statement.getIdentifier() + " found.",
66 statement.getFilename(), statement.getContext(), statement.getLineNumber()));
67 } else {
68 seenIdentifiers.add(statement.getFilename() + "#" + statement.getIdentifier());
69 }
70 } else if (statement instanceof ObjectStatement) {
71 ObjectStatement object = (ObjectStatement) statement;
72 boolean pass = isValid(object.getStatements(), listener);
73 if (!pass)
74 valid = pass;
75 } else if (statement instanceof GroupStatement) {
76 GroupStatement group = (GroupStatement) statement;
77 boolean pass = isValid(group.getStatements(), listener);
78 if (!pass)
79 valid = pass;
80 }
81 }
82
83 return valid;
84 }
85
86 }