blob: 205e752a58d8d1ff6e5d6a23c1d8ea89ae210b38 [file] [log] [blame]
package org.unicode.cldr.test;
import java.util.List;
import org.unicode.cldr.util.CLDRConfig;
import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.Factory;
import org.unicode.cldr.util.PathHeader;
/**
* Subclass of CheckCLDR that requires a factory during checking.
*
* @author jchye
*/
abstract class FactoryCheckCLDR extends CheckCLDR {
private Factory factory;
private CLDRFile resolvedCldrFileToCheck;
private PathHeader.Factory pathHeaderFactory;
public synchronized CLDRFile getEnglishFile() {
if (super.getEnglishFile() != null) {
return super.getEnglishFile();
}
try {
return getFactory().make("en", true);
} catch (Exception e) {
return CLDRConfig.getInstance().getEnglish();
}
}
public synchronized PathHeader.Factory getPathHeaderFactory() {
if (pathHeaderFactory == null) {
pathHeaderFactory = PathHeader.getFactory(getEnglishFile() != null ? getEnglishFile() : getFactory().make("en", true));
}
return pathHeaderFactory;
}
public FactoryCheckCLDR(Factory factory) {
super();
this.factory = factory;
}
public CLDRFile getResolvedCldrFileToCheck() {
if (resolvedCldrFileToCheck == null) {
resolvedCldrFileToCheck = factory.make(getCldrFileToCheck().getLocaleID(), true);
}
return resolvedCldrFileToCheck;
}
@Override
public CheckCLDR setCldrFileToCheck(CLDRFile cldrFileToCheck, Options options,
List<CheckStatus> possibleErrors) {
super.setCldrFileToCheck(cldrFileToCheck, options, possibleErrors);
resolvedCldrFileToCheck = null;
return this;
}
public Factory getFactory() {
return factory;
}
public String getPathReferenceForMessage(String path, boolean codeOnly) {
PathHeader pathHeader = getPathHeaderFactory().fromPath(path);
String referenceToOther;
String code = codeOnly ? pathHeader.getCode() : pathHeader.getHeaderCode();
if (getPhase() == Phase.FINAL_TESTING) {
referenceToOther = code; // later make this more readable.
} else {
referenceToOther = "<a href=\""
+ CLDRConfig.getInstance().urls().forPathHeader(getCldrFileToCheck().getLocaleID(), pathHeader)
+ "\">" +
code
+ "</a>";
}
return referenceToOther;
}
}