Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@
<configLocation>checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>false</failsOnError>
<failsOnError>true</failsOnError>
<failOnViolation>false</failOnViolation>
<linkXRef>false</linkXRef>
</configuration>
Expand Down
2 changes: 1 addition & 1 deletion src/main/antlr4/com/chaudhuri/plist/Plist.g4
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ fragment NameStartChar

// parser rules
parse: dictionary | list;
dictionary: LBRACE (keyvaluepair (SEMI keyvaluepair?)*)? RBRACE;
dictionary: LBRACE (keyvaluepair (SEMI keyvaluepair)* SEMI?)? RBRACE;
keyvaluepair: STRING EQUALS value;
value: string | number | list | dictionary;
string: STRING;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import org.apache.logging.log4j.Logger;

/**
*
* @author hiran
* Comparator for expansion manifests.
* Helps sorting expansions.
*
* @author oocube
*/
public class ExpansionManifestComparator implements Comparator<ExpansionManifest> {
private static final Logger log = LogManager.getLogger();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@

/**
* Genson converter to serialize ExpansionManifest.
* @author hiran
*
* @author oocube
*/
public class ExpansionManifestConverter implements Converter<ExpansionManifest> {
private static final Logger log = LogManager.getLogger();
Expand Down
14 changes: 10 additions & 4 deletions src/main/java/com/chaudhuri/ooliteaddonscanner2/AddonsUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
/**
* Contains utility functions for handling the Oolite addons model.
*
* @author hiran
* @author oocube
*/
public class AddonsUtil {
private static final Logger log = LogManager.getLogger();
Expand Down Expand Up @@ -241,7 +241,7 @@ public static void readShips(String url, InputStream in, Registry registry, Expa
registry.addShipList(expansion, shipList);
} else {
in.reset();
PlistParser.DictionaryContext dc = PlistParserUtil.parsePlistDictionary(in, url);
PlistParser.DictionaryContext dc = PlistParserUtil.parsePlistDictionary(in, url, expansion);
checkPlistKeys(dc, expansion);
registry.addShipList(expansion, dc);
}
Expand Down Expand Up @@ -476,7 +476,7 @@ public static void readOxps(ExpansionCache cache, Registry registry) {

for(Expansion oxp: registry.getExpansions()) {
i++;
log.info("Reading expansions ({}/{})...", i, total);
log.info("Reading expansions... ({}/{} {})", i, total, oxp.getIdentifier());

readOxp(cache, registry, oxp);
}
Expand Down Expand Up @@ -505,7 +505,13 @@ public static void readOxp(ExpansionCache cache, Registry registry, Expansion ex
ZipInputStream zin = new ZipInputStream(new BufferedInputStream(cache.getPluginInputStream(expansion.getDownloadUrl())));
ZipEntry zentry = null;
while ((zentry = zin.getNextEntry()) != null) {
readOxpEntry(zin, zentry, registry, expansion);
try {
readOxpEntry(zin, zentry, registry, expansion);
} catch (Exception ex) {
String message = String.format("Could not parse %s!%s", expansion.getDownloadUrl(), zentry.getName());
log.error(message, ex);
expansion.addWarning(message + "\n" + ex.getMessage());
}
}
} catch (EOFException e) {
log.warn("Incomplete plugin archive for {}", expansion.getDownloadUrl(), e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -893,6 +893,12 @@ protected void processDependencies() {
});
}

/**
* Returns the list of expansions that match the given dependency.
*
* @param dependency the dependency to search for
* @return the list of expansions
*/
public List<Expansion> getExpansionsByDependency(Expansion.Dependency dependency) {
return expansions.values().stream()
.filter((man) -> isMatch(man, dependency))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import static com.chaudhuri.ooliteaddonscanner2.Scanner.HTML_EXTENSION;
import static com.chaudhuri.ooliteaddonscanner2.Scanner.PLANTUML_EXTENSION;
import static com.chaudhuri.ooliteaddonscanner2.Scanner.SVG_EXTENSION;
import com.chaudhuri.ooliteaddonscanner2.model.Equipment;
import com.chaudhuri.ooliteaddonscanner2.model.Expansion;
import com.chaudhuri.ooliteaddonscanner2.model.Ship;
Expand All @@ -15,8 +14,9 @@
import org.apache.logging.log4j.Logger;

/**
* Wrapper methods for the FTL template engine.
*
* @author hiran
* @author oocube
*/
public class TemplateUtil {
private static final Logger log = LogManager.getLogger();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -689,10 +689,20 @@ public int compareTo(Expansion other) {
return identifier.compareTo(other.getIdentifier());
}

/**
* Adds a dependent OXP to the list.
*
* @param dependent the OXP
*/
public void addDependentOxp(Dependency dependent) {
dependentOxps.add(dependent);
}


/**
* Returns the list of dependent OXPs.
*
* @return the list
*/
public List<Dependency> getDependentOxps() {
return dependentOxps;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
*/
package com.chaudhuri.ooliteaddonscanner2.plist;

import com.chaudhuri.ooliteaddonscanner2.model.Expansion;
import com.chaudhuri.plist.PlistLexer;
import com.chaudhuri.plist.PlistParser;
import java.io.IOException;
Expand All @@ -17,12 +18,14 @@
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
* Wrapper for the ANTLR generated plist parser.
*
* @author hiran
* @author oocube
*/
public class PlistParserUtil {
private static final Logger log = LogManager.getLogger();
Expand Down Expand Up @@ -92,7 +95,34 @@ public static PlistParser.ListContext parsePlistList(InputStream data, String so
* @throws IOException something went wrong
*/
public static PlistParser.DictionaryContext parsePlistDictionary(InputStream data, String source) throws IOException {
return prepareParser(data, source).dictionary();
PlistParser parser = prepareParser(data, source);
PlistParser.DictionaryContext parseTree = parser.dictionary();

return parseTree;
}

/**
* Parses a plist dictionary from the given inputstream and validates it.
* Warnings will be added to the expansion.
*
* @param data the inputstream to read from
* @param source the source of the data for good error messages
* @param expansion
* @return the parsed dictionary
* @throws IOException something went wrong
*/
public static PlistParser.DictionaryContext parsePlistDictionary(InputStream data, String source, Expansion expansion) throws IOException {
PlistParser.DictionaryContext parseTree = parsePlistDictionary(data, source);

// validate the dictionary
ValidationListener vl = new ValidationListener();
ParseTreeWalker walker = new ParseTreeWalker();
walker.walk(vl, parseTree);
for (String warning: vl.getWarnings()) {
expansion.addWarning(warning);
}

return parseTree;
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
*/
package com.chaudhuri.ooliteaddonscanner2.plist;

import com.chaudhuri.plist.PlistBaseListener;
import com.chaudhuri.plist.PlistParser;
import java.util.ArrayList;
import java.util.List;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenSource;
import org.antlr.v4.runtime.tree.ParseTree;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
* Validates a plist Dictionary and collects the warnings.
* Apply this listener via ParseTreeWalker, then retrieve the collected
* warnings.
*
* @author oocube
*/
public class ValidationListener extends PlistBaseListener {
private static final Logger log = LogManager.getLogger();

private final List<String> warnings;

/**
* Creates a new instance.
*/
public ValidationListener() {
warnings = new ArrayList<>();
}

/**
* check the last element is a semicolon.
* @param ctx
*/
@Override
public void exitDictionary(PlistParser.DictionaryContext ctx) {
log.debug("exitDictionary({})", ctx);
if (ctx.children == null) {
log.warn("plist dictionary without content?");
return;
}
if (ctx.children.size()<2) {
log.warn("plist dictionary without braces?");
return;
}
int posSEMI = ctx.children.size() -2;
ParseTree pt = ctx.children.get(posSEMI);
log.debug("semicolon: {}", pt);
if (pt.getPayload() instanceof Token token) {
if (token.getType() == PlistParser.LBRACE) {
// we are looking at an empty plist. we are good
return;
}
if (token.getType() == PlistParser.SEMI) {
// assumed semicolon found. we are good
return;
}
}

TokenSource ts = ctx.getStop().getTokenSource();
String msg = String.format("Expected semicolon in %s after dictionary entry at [%s:%s]", ts.getSourceName(), ts.getLine(), ts.getCharPositionInLine());
warnings.add(msg);
}

/**
* Returns the collected warnings.
*
* @return the warnings
*/
public List<String> getWarnings() {
return new ArrayList<String>(warnings);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<body>
<table border="0" width="100%">
<tr>
<td>Back to <a href='../index.html'>Index</a></td>
<td>Back to <a href='../../index.html'>Index</a></td>
<td align="right"><small>Page generated: ${.now}</small></td>
</tr>
</table>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<body>
<table border="0" width="100%">
<tr>
<td>Back to <a href='../index.html'>Index</a></td>
<td>Back to <a href='../../index.html'>Index</a></td>
<td align="right"><small>Page generated: ${.now}</small></td>
</tr>
</table>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<body>
<table border="0" width="100%">
<tr>
<td>Back to <a href='../index.html'>Index</a></td>
<td>Back to <a href='../../index.html'>Index</a></td>
<td align="right"><small>Page generated: ${.now}</small></td>
</tr>
</table>
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.plist.CountingErrorListener"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.plist.PlistParserUtil"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.plist.XMLPlistParser"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.plist.ValidationListener"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.Registry"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.Scanner"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.TemplateEngine"/>
Expand Down
3 changes: 2 additions & 1 deletion src/test/resources/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<Logger level="warn" name="com.chaudhuri.cataloggenerator.ExpansionManifestConverter"/>
<Logger level="warn" name="com.chaudhuri.cataloggenerator.Generator"/>
<Logger level="warn" name="com.chaudhuri.cataloggenerator.GeneratorTest"/>
<Logger level="trace" name="com.chaudhuri.ooliteaddonscanner2.AddonsUtil"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.AddonsUtil"/>
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.AddonsUtilTest"/>
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.ExpansionCache"/>
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.ExpansionCacheTest"/>
Expand All @@ -26,6 +26,7 @@
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.plist.ThrowingErrorListenerTest"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.plist.XMLPlistParser"/>
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.plist.XMLPlistParserTest"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.plist.ValidationListener"/>
<Logger level="info" name="com.chaudhuri.ooliteaddonscanner2.Registry"/>
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.RegistryTest"/>
<Logger level="warn" name="com.chaudhuri.ooliteaddonscanner2.RegistryExceptionTest"/>
Expand Down
Loading