package de.luhmer.owncloudnewsreader.database.generator;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import de.greenrobot.daogenerator.DaoGenerator;
public class DatabaseOrmGenerator {
private static final String SCHEMA_OUTPUT_DIR = "./News-Android-App/src/main/java/";
/**
* Generator main application which builds all of the schema versions
* (including older versions used for migration test purposes) and ensures
* business rules are met; these include ensuring we only have a single
* current schema instance and the version numbering is correct.
*
* @param args
*
* @throws Exception
* @throws IOException
*/
public static void main(String[] args) throws Exception {
List<SchemaVersion> versions = new ArrayList<>();
versions.add(new Version6(true));
validateSchemas(versions);
for (SchemaVersion version : versions) {
// NB: Test output creates stubs, we have an established testing
// standard which should be followed in preference to generating
// these stubs.
new DaoGenerator().generateAll(version.getSchema(),
SCHEMA_OUTPUT_DIR);
}
}
/**
* Validate the schema, throws
*
* @param versions
* @throws IllegalArgumentException
* if data is invalid
*/
public static void validateSchemas(List<SchemaVersion> versions)
throws IllegalArgumentException {
int numCurrent = 0;
Set<Integer> versionNumbers = new HashSet<>();
for (SchemaVersion version : versions) {
if (version.isCurrent()) {
numCurrent++;
}
int versionNumber = version.getVersionNumber();
if (versionNumbers.contains(versionNumber)) {
throw new IllegalArgumentException(
"Unable to process schema versions, multiple instances with version number : "
+ version.getVersionNumber());
}
versionNumbers.add(versionNumber);
}
if (numCurrent != 1) {
throw new IllegalArgumentException(
"Unable to generate schema, exactly one schema marked as current is required.");
}
}
}