Skip to content

Commit e488569

Browse files
committed
Add a parameter in the input file to allow subclasses of the Provider
You can know define a "has_subclasses" flag to remove the final keyword from the generated ContentProvider
1 parent 1b379df commit e488569

4 files changed

Lines changed: 13 additions & 7 deletions

File tree

generator/example/format.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
in the Content class. Useful if you also have a model class with the same name as
1414
your table (They will be named DbMyClass and MyClass instead of both MyClass).
1515
Default is "".
16+
"has_subclasses":false, // Optional. Whether the generated provider has subclasses. This
17+
will remove the final keyword and change some fields to protected
1618
"version":1 // Required. Version of the database.
1719
},
1820
"tables":[ // your tables

generator/res/provider.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import java.util.ArrayList;
2424
* <p>
2525
* (More information available https://github.com/foxykeep/ContentProviderCodeGenerator)
2626
*/
27-
public final class %3$sProvider extends ContentProvider {
27+
public %14$sclass %3$sProvider extends ContentProvider {
2828

2929
private static final String LOG_TAG = %3$sProvider.class.getSimpleName();
3030

generator/src/com/foxykeep/cpcodegenerator/Main.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,20 +87,22 @@ public static void main(final String[] args) {
8787
String classPackage, classesPrefix, contentClassesPrefix, dbAuthorityPackage,
8888
providerFolder;
8989
int dbVersion;
90+
boolean hasProviderSubclasses;
9091
classPackage = jsonDatabase.getString("package");
9192
classesPrefix = jsonDatabase.getString("classes_prefix");
9293
contentClassesPrefix = jsonDatabase.optString("content_classes_prefix", "");
9394
dbAuthorityPackage = jsonDatabase.optString("authority_package", classPackage);
9495
providerFolder = jsonDatabase.optString("provider_folder",
9596
PathUtils.PROVIDER_DEFAULT);
9697
dbVersion = jsonDatabase.getInt("version");
98+
hasProviderSubclasses = jsonDatabase.optBoolean("hasSubclasses");
9799

98100
ArrayList<TableData> classDataList = TableData.getClassesData(root.getJSONArray(
99101
"tables"), contentClassesPrefix, dbVersion);
100102

101103
// Database generation
102104
DatabaseGenerator.generate(fileName, classPackage, dbVersion, dbAuthorityPackage,
103-
classesPrefix, classDataList, providerFolder);
105+
classesPrefix, classDataList, providerFolder, hasProviderSubclasses);
104106

105107
FileCache.saveFile(PathUtils.getAndroidFullPath(fileName, classPackage,
106108
providerFolder + "." + PathUtils.UTIL) + "ColumnMetadata.java",

generator/src/com/foxykeep/cpcodegenerator/generator/DatabaseGenerator.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ private DatabaseGenerator() {
5252

5353
public static void generate(final String fileName, final String classPackage,
5454
final int dbVersion, final String dbAuthorityPackage, final String classesPrefix,
55-
final ArrayList<TableData> tableDataList, final String providerFolder) {
55+
final ArrayList<TableData> tableDataList, final String providerFolder,
56+
boolean hasProviderSubclasses) {
5657
if (classPackage == null || classPackage.length() == 0 || classesPrefix == null
5758
|| classesPrefix.length() == 0 || tableDataList == null || tableDataList.isEmpty()) {
5859
System.out.println("Error : You must provide a class package, a class prefix and a " +
@@ -62,7 +63,7 @@ public static void generate(final String fileName, final String classPackage,
6263
generateContentClass(fileName, classPackage, classesPrefix, tableDataList, dbVersion,
6364
providerFolder);
6465
generateProviderClass(fileName, classPackage, dbVersion, dbAuthorityPackage, classesPrefix,
65-
tableDataList, providerFolder);
66+
tableDataList, providerFolder, hasProviderSubclasses);
6667
}
6768

6869
private static void generateContentClass(final String fileName, final String classPackage,
@@ -374,7 +375,8 @@ private static void generateContentClass(final String fileName, final String cla
374375

375376
private static void generateProviderClass(final String fileName, final String classPackage,
376377
final int dbVersion, final String dbAuthorityPackage, final String classesPrefix,
377-
final ArrayList<TableData> tableDataList, final String providerFolder) {
378+
final ArrayList<TableData> tableDataList, final String providerFolder,
379+
boolean hasProviderSubclasses) {
378380

379381
final StringBuilder sbImports = new StringBuilder();
380382
final StringBuilder sbUriTypes = new StringBuilder();
@@ -386,7 +388,7 @@ private static void generateProviderClass(final String fileName, final String cl
386388
final StringBuilder sbUpgradeDatabaseComment = new StringBuilder();
387389
final StringBuilder sbUpgradeDatabaseCommentFields = new StringBuilder();
388390

389-
int minUpgradeWithoutChanges = 1;
391+
int minUpgradeWithoutChanges;
390392

391393
String bulkText;
392394
final StringBuilder sb = new StringBuilder();
@@ -521,7 +523,7 @@ private static void generateProviderClass(final String fileName, final String cl
521523
sbImports.toString(), classesPrefix, dbAuthorityPackage, sbUriTypes.toString(),
522524
sbCreateTables.toString(), sbUpgradeTables.toString(), sbCaseWithId.toString(),
523525
sbCaseWithoutId.toString(), sbBulk.toString(), providerFolder, dbVersion,
524-
sbUpgradeDatabaseComment.toString()));
526+
sbUpgradeDatabaseComment.toString(), hasProviderSubclasses ? "" : "final "));
525527

526528
}
527529

0 commit comments

Comments
 (0)