Bonjour,
çi dessous vous trouverez 2 claase java, trés compliqué ca d, j'arrive pas à les comprendre, est ce que quelqu'un pourrez bien m'expliquer pas à pas le fonctionnement de ces deux classes, svp, c'est urgent.
////////////////////////////////////////////////////
Validator.java
//////////////////////////////////////////////////////
package Validator;
import LongComparator.LongComparator;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Hashtable;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
import java.util.Vector;
import org.apache.log4j.Logger;
public class Validator {
static private Logger log = Logger.getLogger(Validator.class);
static private String entryDelimiter = ";";
static private String valuesDelimiter = ",";
// TODO refactor copy-paste
public Map validate(String validationFileName, Map parameterMap) {
// maps field name to valid values
Map output = new Hashtable();
Map parameters = new Hashtable();
Iterator parametersIterator = parameterMap.keySet().iterator();
while (parametersIterator.hasNext()) {
List params = new Vector();
Object key = parametersIterator.next();
StringTokenizer parametersTokenizer =
new StringTokenizer((String) parameterMap.get(key), valuesDelimiter);
while (parametersTokenizer.hasMoreTokens()) {
params.add(parametersTokenizer.nextToken().trim());
}
parameters.put(key, params);
}
// try to open the file stream
try {
FileReader validationFileReader = new FileReader(validationFileName);
LineNumberReader validationLNR = new LineNumberReader(validationFileReader);
String head = validationLNR.readLine();
List entryNames = new Vector();
StringTokenizer stringTokenizerHead = new StringTokenizer(head, entryDelimiter);
while (stringTokenizerHead.hasMoreTokens()) {
entryNames.add(stringTokenizerHead.nextToken().trim());
}
Iterator entryNamesIterator = entryNames.iterator();
while (entryNamesIterator.hasNext()) {
String entryName = (String) entryNamesIterator.next();
if (entryName.endsWith("#")) {
output.put(entryName, new TreeSet(new LongComparator()));
} else {
output.put(entryName, new TreeSet());
}
}
String line = validationLNR.readLine();
while (line != null && !line.equals("")) {
List lineValues = new Vector();
StringTokenizer stringTokenizerLine = new StringTokenizer(line, entryDelimiter);
while (stringTokenizerLine.hasMoreTokens()) {
List values = new Vector();
StringTokenizer valuesTokenizer =
new StringTokenizer(stringTokenizerLine.nextToken(), valuesDelimiter);
while (valuesTokenizer.hasMoreTokens()) {
values.add(valuesTokenizer.nextToken().trim());
}
lineValues.add(values);
}
for (int i = 0; i < entryNames.size(); i++) {
boolean add = true;
for (int j = 0; j < lineValues.size(); j++) {
if (i != j) {
List parameterValues = (List) parameters.get(entryNames.get(j));
if (parameterValues == null) {
throw new Exception("Parameter '" + entryNames.get(j) + "' is null!");
}
if (!parameterValues.isEmpty()) {
boolean addThis = true;
List values = (List) lineValues.get(j);
for (int k = 0; k < parameterValues.size(); k++) {
if (!values.contains(parameterValues.get(k))) {
addThis = false;
}
}
if (!addThis) {
add = false;
}
}
}
}
if (add) {
Set entrySet = (Set) output.get(entryNames.get(i));
List values = (List) lineValues.get(i);
for (int k = 0; k < values.size(); k++) {
entrySet.add(values.get(k));
}
}
}
line = validationLNR.readLine();
}
validationLNR.close();
return output;
} catch (FileNotFoundException ex) {
log.error(ex.getMessage());
return null;
} catch (IOException ex) {
log.error(ex.getMessage());
return null;
} catch (Exception ex) {
log.error(ex.getMessage());
return null;
}
}
public boolean isValid(String validationFileName, Map parameterMap) {
boolean valid = false;
Map parameters = new Hashtable();
Iterator parametersIterator = parameterMap.keySet().iterator();
while (parametersIterator.hasNext()) {
List params = new Vector();
Object key = parametersIterator.next();
StringTokenizer parametersTokenizer =
new StringTokenizer((String) parameterMap.get(key), valuesDelimiter);
while (parametersTokenizer.hasMoreTokens()) {
params.add(parametersTokenizer.nextToken().trim());
}
parameters.put(key, params);
}
// try to open the file stream
try {
FileReader validationFileReader = new FileReader(validationFileName);
LineNumberReader validationLNR = new LineNumberReader(validationFileReader);
String head = validationLNR.readLine();
List entryNames = new Vector();
StringTokenizer stringTokenizerHead = new StringTokenizer(head, entryDelimiter);
while (stringTokenizerHead.hasMoreTokens()) {
entryNames.add(stringTokenizerHead.nextToken().trim());
}
String line = validationLNR.readLine();
while (line != null && !line.equals("")) {
List lineValues = new Vector();
StringTokenizer stringTokenizerLine = new StringTokenizer(line, entryDelimiter);
while (stringTokenizerLine.hasMoreTokens()) {
List values = new Vector();
StringTokenizer valuesTokenizer =
new StringTokenizer(stringTokenizerLine.nextToken(), valuesDelimiter);
while (valuesTokenizer.hasMoreTokens()) {
values.add(valuesTokenizer.nextToken().trim());
}
lineValues.add(values);
}
boolean add = true;
for (int j = 0; j < lineValues.size(); j++) {
List parameterValues = (List) parameters.get(entryNames.get(j));
if (parameterValues == null) {
throw new Exception("Parameter '" + entryNames.get(j) + "' is null!");
}
if (!parameterValues.isEmpty()) {
boolean addThis = true;
List values = (List) lineValues.get(j);
for (int k = 0; k < parameterValues.size(); k++) {
if (!values.contains(parameterValues.get(k))) {
addThis = false;
}
}
if (!addThis) {
add = false;
}
}
}
if (add) {
valid = true;
break;
}
line = validationLNR.readLine();
}
validationLNR.close();
return valid;
} catch (FileNotFoundException ex) {
log.error(ex.getMessage());
return false;
} catch (IOException ex) {
log.error(ex.getMessage());
return false;
} catch (Exception ex) {
log.error(ex.getMessage());
return false;
}
}
}
////////////////////////////////////////////////////////////////////////
LongComparator.java
////////////////////////////////////////////////////////////////////////
package com.msc.extension.zvalidator;
import java.util.Comparator;
public class LongComparator implements Comparator {
private Long convertToLong(Object o) throws ClassCastException {
Long l;
if (o instanceof Long){
l = (Long) o;
} else if (o instanceof String) {
l = new Long((String) o);
} else {
throw new ClassCastException();
}
return l;
}
public int compare(Object o1, Object o2) throws ClassCastException {
Long l1 = convertToLong(o1);
Long l2 = convertToLong(o2);
return l1.compareTo(l2);
}
}
Configuration: Windows XP
Firefox 2.0.0.14