160 lines
4.9 KiB
XML
160 lines
4.9 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<script>
|
|
<name>MapValidator</name>
|
|
<code xml:space="preserve">import java.io.BufferedWriter;
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.util.Iterator;
|
|
import net.sf.gridarta.model.gameobject.GameObject;
|
|
import net.sf.gridarta.model.io.RecursiveFileIterator;
|
|
import net.sf.gridarta.model.validation.ErrorCollector;
|
|
import net.sf.gridarta.model.validation.errors.ValidationError;
|
|
|
|
void log(String message) {
|
|
print(message);
|
|
if (logFile != null) {
|
|
logFile.write(message);
|
|
logFile.write('\n');
|
|
}
|
|
}
|
|
|
|
void checkMap(File mapFile, String mapPath) {
|
|
try {
|
|
map = mapManager.openMapFile(mapFile, false);
|
|
} catch (IOException ex) {
|
|
String message = ex.getMessage();
|
|
if (!message.startsWith("unexpected first line of map ")) {
|
|
print("Cannot load map '"+mapFile+"': "+ex.getMessage());
|
|
}
|
|
return;
|
|
}
|
|
|
|
ErrorCollector errorCollector;
|
|
try {
|
|
try {
|
|
validators.validateAll(map.getMapModel());
|
|
} finally {
|
|
errorCollector = map.getMapModel().getErrors();
|
|
}
|
|
} finally {
|
|
mapManager.release(map);
|
|
}
|
|
|
|
StringBuffer sb = new StringBuffer();
|
|
int numberOfErrors = 0;
|
|
Iterator it = errorCollector.iterator();
|
|
while (it.hasNext()) {
|
|
ValidationError validationError = it.next();
|
|
|
|
if (errorLimit > 0 && numberOfErrors >= errorLimit) {
|
|
log("- <skipping more errors>");
|
|
break;
|
|
}
|
|
|
|
if (numberOfErrors == 0) {
|
|
log(mapPath + ":");
|
|
}
|
|
numberOfErrors++;
|
|
|
|
sb.setLength(0);
|
|
sb.append("- ");
|
|
|
|
sb.append(validationError);
|
|
|
|
Iterator it2 = validationError.getGameObjects().iterator();
|
|
while (it2.hasNext()) {
|
|
GameObject gameObject = it2.next();
|
|
sb.append(" [").append(gameObject.getBestName()).append(']');
|
|
}
|
|
|
|
String parameter0 = validationError.getParameter(0);
|
|
if (parameter0 != null) {
|
|
sb.append(" [").append(parameter0);
|
|
String parameter1 = validationError.getParameter(1);
|
|
if (parameter1 != null) {
|
|
sb.append(", ").append(parameter1);
|
|
}
|
|
sb.append(']');
|
|
}
|
|
|
|
log(sb.toString());
|
|
}
|
|
}
|
|
|
|
Writer logFile = logFilename.length() <= 0 ? null : new BufferedWriter(new FileWriter(logFilename));
|
|
try {
|
|
if (baseDirectory == null || baseDirectory.length() <= 0) {
|
|
baseDirectory = "/";
|
|
}
|
|
log("Checking maps below " + baseDirectory + "...");
|
|
if (baseDirectory.endsWith("/")) {
|
|
baseDirectory = baseDirectory.substring(0, baseDirectory.length() - 1);
|
|
}
|
|
|
|
String mapDefaultFolder = globalSettings.getMapsDirectory().getPath();
|
|
String rootDirectory = mapDefaultFolder + baseDirectory;
|
|
Iterator it = new RecursiveFileIterator(new File(rootDirectory));
|
|
while (it.hasNext()) {
|
|
File file = it.next();
|
|
String name = file.getName();
|
|
String path = file.getPath();
|
|
if (file.isFile()
|
|
&& path.startsWith(rootDirectory)
|
|
&& !name.endsWith(".animation")
|
|
&& !name.endsWith(".msg")
|
|
&& !name.endsWith(".png")
|
|
&& !name.endsWith(".ppm")
|
|
&& !name.endsWith(".py")
|
|
&& !name.endsWith(".pyc")
|
|
&& !name.endsWith(".quests")
|
|
&& !name.endsWith(".txt")
|
|
&& !name.endsWith(".zip")
|
|
&& !name.equals(".emergency")
|
|
&& !name.equals(".gitignore")
|
|
&& !name.equals("COPYING")
|
|
&& !name.equals("ChangeLog")
|
|
&& !name.equals("TODO")
|
|
&& !name.equals("__pycache__")
|
|
&& !name.equals("pshop_copier")
|
|
&& !name.equals("pshops_changelog")
|
|
&& !name.equalsIgnoreCase("README")
|
|
&& !path.contains("/.git/")
|
|
&& !path.contains("/Info/")
|
|
&& !path.contains("/editor/scripts/")) {
|
|
checkMap(file, file.getPath().substring(mapDefaultFolder.length()));
|
|
}
|
|
}
|
|
|
|
log("Done.");
|
|
} finally {
|
|
if (logFile != null) {
|
|
logFile.close();
|
|
}
|
|
}</code>
|
|
<mode>
|
|
<autoboot>false</autoboot>
|
|
<bash>true</bash>
|
|
<filter>false</filter>
|
|
</mode>
|
|
<parameter>
|
|
<name>baseDirectory</name>
|
|
<description>Base Directory</description>
|
|
<type>MapPathParameter</type>
|
|
<value>/</value>
|
|
</parameter>
|
|
<parameter>
|
|
<name>errorLimit</name>
|
|
<description>Maximum number of errors to show for each map; 0=show all errors</description>
|
|
<type>java.lang.Integer</type>
|
|
<value>20</value>
|
|
<minimum>0</minimum>
|
|
<maximum>2147483647</maximum>
|
|
</parameter>
|
|
<parameter>
|
|
<name>logFilename</name>
|
|
<description>Copy errors to this file; empty=no copy to file</description>
|
|
<type>java.lang.String</type>
|
|
<value/>
|
|
</parameter>
|
|
</script>
|