@@ -38,7 +38,7 @@ public class ScaffoldGenerator extends LoggingObject {
38
38
protected ObjectMapper objectMapper ;
39
39
private PrettyPrinter prettyPrinter = new DefaultPrettyPrinter ();
40
40
41
- public void generateScaffold (String path , AppConfig config ) {
41
+ public void generateScaffold (String path , AppInputs appInputs ) {
42
42
if (objectMapper == null ) {
43
43
objectMapper = ObjectMapperFactory .getObjectMapper ();
44
44
}
@@ -50,29 +50,58 @@ public void generateScaffold(String path, AppConfig config) {
50
50
File modulesDir = getModulesDir (rootDir );
51
51
modulesDir .mkdirs ();
52
52
53
- generateContentDatabaseFile (configDir , config );
54
- generateSecurityFiles (configDir , config );
53
+ generateDatabaseFiles (configDir );
54
+ if (appInputs .isWithUsersAndRoles ()) {
55
+ generateSecurityFiles (configDir , appInputs .getAppName ());
56
+ }
57
+ if (appInputs .isWithRestServer ()) {
58
+ generateRestApiFile (configDir );
59
+ generateRestPropertiesFile (modulesDir );
60
+ generateSearchOptions (modulesDir , appInputs .getAppName ());
61
+ }
62
+ }
63
+
64
+ /**
65
+ *
66
+ * @param path
67
+ * @param config
68
+ * @deprecated since 4.6.0; use the method using {@code ScaffoldInputs} instead.
69
+ */
70
+ @ Deprecated
71
+ public void generateScaffold (String path , AppConfig config ) {
72
+ if (objectMapper == null ) {
73
+ objectMapper = ObjectMapperFactory .getObjectMapper ();
74
+ }
75
+ File rootDir = new File (path );
76
+
77
+ File configDir = getConfigDir (rootDir );
78
+ configDir .mkdirs ();
79
+
80
+ File modulesDir = getModulesDir (rootDir );
81
+ modulesDir .mkdirs ();
55
82
83
+ generateDatabaseFiles (configDir );
84
+ generateSecurityFiles (configDir , config .getName ());
56
85
if (!config .isNoRestServer ()) {
57
- generateRestApiFile (configDir , config );
58
- generateRestPropertiesFile (modulesDir , config );
59
- generateSearchOptions (modulesDir , config );
86
+ generateRestApiFile (configDir );
87
+ generateRestPropertiesFile (modulesDir );
88
+ generateSearchOptions (modulesDir , config . getName () );
60
89
}
61
90
62
91
}
63
92
64
- private void generateSearchOptions (File modulesDir , AppConfig config ) {
93
+ private void generateSearchOptions (File modulesDir , String appName ) {
65
94
File optionsDir = new File (modulesDir , "options" );
66
95
optionsDir .mkdirs ();
67
96
String xml = "<options xmlns='http://marklogic.com/appservices/search'>\n <search-option>unfiltered</search-option>\n <quality-weight>0</quality-weight>\n </options>" ;
68
- writeFile (xml .getBytes (), new File (optionsDir , config . getName () + "-options.xml" ));
97
+ writeFile (xml .getBytes (), new File (optionsDir , appName + "-options.xml" ));
69
98
}
70
99
71
- protected void generateRestPropertiesFile (File modulesDir , AppConfig config ) {
72
- writeFile (buildRestPropertiesJson (config ), new File (modulesDir , "rest-properties.json" ));
100
+ protected void generateRestPropertiesFile (File modulesDir ) {
101
+ writeFile (buildRestPropertiesJson (), new File (modulesDir , "rest-properties.json" ));
73
102
}
74
103
75
- protected ObjectNode buildRestPropertiesJson (AppConfig config ) {
104
+ protected ObjectNode buildRestPropertiesJson () {
76
105
ObjectNode node = objectMapper .createObjectNode ();
77
106
node .put ("debug" , false );
78
107
node .put ("validate-queries" , true );
@@ -81,70 +110,70 @@ protected ObjectNode buildRestPropertiesJson(AppConfig config) {
81
110
return node ;
82
111
}
83
112
84
- protected void generateSecurityFiles (File configDir , AppConfig config ) {
113
+ protected void generateSecurityFiles (File configDir , String appName ) {
85
114
File rolesDir = new File (configDir , "security/roles" );
86
115
rolesDir .mkdirs ();
87
- writeFile (buildNobodyRole (config ), new File (rolesDir , "1-" + config . getName () + "-nobody-role.json" ));
88
- writeFile (buildReaderRole (config ), new File (rolesDir , "2-" + config . getName () + "-reader-role.json" ));
89
- writeFile (buildWriterRole (config ), new File (rolesDir , "3-" + config . getName () + "-writer-role.json" ));
90
- writeFile (buildInternalRole (config ), new File (rolesDir , "4-" + config . getName () + "-internal-role.json" ));
91
- writeFile (buildAdminRole (config ), new File (rolesDir , "5-" + config . getName () + "-admin-role.json" ));
116
+ writeFile (buildNobodyRole (appName ), new File (rolesDir , "1-" + appName + "-nobody-role.json" ));
117
+ writeFile (buildReaderRole (appName ), new File (rolesDir , "2-" + appName + "-reader-role.json" ));
118
+ writeFile (buildWriterRole (appName ), new File (rolesDir , "3-" + appName + "-writer-role.json" ));
119
+ writeFile (buildInternalRole (appName ), new File (rolesDir , "4-" + appName + "-internal-role.json" ));
120
+ writeFile (buildAdminRole (appName ), new File (rolesDir , "5-" + appName + "-admin-role.json" ));
92
121
93
122
File usersDir = new File (configDir , "security/users" );
94
123
usersDir .mkdirs ();
95
- writeFile (buildReaderUser (config ), new File (usersDir , config . getName () + "-reader-user.json" ));
96
- writeFile (buildWriterUser (config ), new File (usersDir , config . getName () + "-writer-user.json" ));
97
- writeFile (buildAdminUser (config ), new File (usersDir , config . getName () + "-admin-user.json" ));
124
+ writeFile (buildReaderUser (appName ), new File (usersDir , appName + "-reader-user.json" ));
125
+ writeFile (buildWriterUser (appName ), new File (usersDir , appName + "-writer-user.json" ));
126
+ writeFile (buildAdminUser (appName ), new File (usersDir , appName + "-admin-user.json" ));
98
127
}
99
128
100
- protected ObjectNode buildNobodyRole (AppConfig config ) {
129
+ protected ObjectNode buildNobodyRole (String appName ) {
101
130
ObjectNode node = objectMapper .createObjectNode ();
102
- node .put ("role-name" , config . getName () + "-nobody" );
131
+ node .put ("role-name" , appName + "-nobody" );
103
132
node .put ("description" , "Unauthenticated user" );
104
133
node .putArray ("role" );
105
134
return node ;
106
135
}
107
136
108
- protected ObjectNode buildReaderRole (AppConfig config ) {
137
+ protected ObjectNode buildReaderRole (String appName ) {
109
138
ObjectNode node = objectMapper .createObjectNode ();
110
- node .put ("role-name" , config . getName () + "-reader" );
139
+ node .put ("role-name" , appName + "-reader" );
111
140
node .put ("description" , "Can view documents, but not edit" );
112
141
ArrayNode array = node .putArray ("role" );
113
142
array .add ("rest-reader" );
114
- array .add (config . getName () + "-nobody" );
143
+ array .add (appName + "-nobody" );
115
144
return node ;
116
145
}
117
146
118
- protected ObjectNode buildWriterRole (AppConfig config ) {
147
+ protected ObjectNode buildWriterRole (String appName ) {
119
148
ObjectNode node = objectMapper .createObjectNode ();
120
- node .put ("role-name" , config . getName () + "-writer" );
149
+ node .put ("role-name" , appName + "-writer" );
121
150
node .put ("description" , "Can read and write documents" );
122
151
ArrayNode array = node .putArray ("role" );
123
152
array .add ("rest-writer" );
124
- array .add (config . getName () + "-reader" );
153
+ array .add (appName + "-reader" );
125
154
array = node .putArray ("privilege" );
126
155
array .add (buildPrivilege ("any-uri" , "http://marklogic.com/xdmp/privileges/any-uri" , "execute" ));
127
156
array .add (buildPrivilege ("unprotected-collections" , "http://marklogic.com/xdmp/privileges/unprotected-collections" , "execute" ));
128
157
return node ;
129
158
}
130
159
131
- protected ObjectNode buildInternalRole (AppConfig config ) {
160
+ protected ObjectNode buildInternalRole (String appName ) {
132
161
ObjectNode node = objectMapper .createObjectNode ();
133
- node .put ("role-name" , config . getName () + "-internal" );
162
+ node .put ("role-name" , appName + "-internal" );
134
163
node .put ("description" , "Internal role used for amping" );
135
164
ArrayNode array = node .putArray ("role" );
136
- array .add (config . getName () + "-writer" );
165
+ array .add (appName + "-writer" );
137
166
return node ;
138
167
}
139
168
140
- protected ObjectNode buildAdminRole (AppConfig config ) {
169
+ protected ObjectNode buildAdminRole (String appName ) {
141
170
ObjectNode node = objectMapper .createObjectNode ();
142
- node .put ("role-name" , config . getName () + "-admin" );
171
+ node .put ("role-name" , appName + "-admin" );
143
172
node .put ("description" , "Non-admin administrator" );
144
173
ArrayNode array = node .putArray ("role" );
145
174
array .add ("rest-admin" );
146
175
array .add ("manage-admin" );
147
- array .add (config . getName () + "-writer" );
176
+ array .add (appName + "-writer" );
148
177
array = node .putArray ("privilege" );
149
178
array .add (buildPrivilege ("any-uri" , "http://marklogic.com/xdmp/privileges/any-uri" , "execute" ));
150
179
array .add (buildPrivilege ("xdbc:insert-in" , "http://marklogic.com/xdmp/privileges/xdbc-insert-in" , "execute" ));
@@ -160,54 +189,56 @@ protected ObjectNode buildPrivilege(String name, String action, String kind) {
160
189
return node ;
161
190
}
162
191
163
- protected ObjectNode buildReaderUser (AppConfig config ) {
192
+ protected ObjectNode buildReaderUser (String appName ) {
164
193
ObjectNode node = objectMapper .createObjectNode ();
165
- String name = config . getName () + "-reader" ;
194
+ String name = appName + "-reader" ;
166
195
node .put ("user-name" , name );
167
196
node .put ("password" , name );
168
197
ArrayNode roles = node .putArray ("role" );
169
- roles .add (config . getName () + "-reader" );
198
+ roles .add (appName + "-reader" );
170
199
return node ;
171
200
}
172
201
173
- protected ObjectNode buildWriterUser (AppConfig config ) {
202
+ protected ObjectNode buildWriterUser (String appName ) {
174
203
ObjectNode node = objectMapper .createObjectNode ();
175
- String name = config . getName () + "-writer" ;
204
+ String name = appName + "-writer" ;
176
205
node .put ("user-name" , name );
177
206
node .put ("password" , name );
178
207
ArrayNode roles = node .putArray ("role" );
179
- roles .add (config . getName () + "-writer" );
208
+ roles .add (appName + "-writer" );
180
209
return node ;
181
210
}
182
211
183
- protected ObjectNode buildAdminUser (AppConfig config ) {
212
+ protected ObjectNode buildAdminUser (String appName ) {
184
213
ObjectNode node = objectMapper .createObjectNode ();
185
- String name = config . getName () + "-admin" ;
214
+ String name = appName + "-admin" ;
186
215
node .put ("user-name" , name );
187
216
node .put ("password" , name );
188
217
ArrayNode roles = node .putArray ("role" );
189
- roles .add (config . getName () + "-admin" );
218
+ roles .add (appName + "-admin" );
190
219
return node ;
191
220
}
192
221
193
- protected void generateRestApiFile (File configDir , AppConfig config ) {
194
- writeFile (buildRestApiJson (config ).getBytes (), new File (configDir , "rest-api.json" ));
222
+ protected void generateRestApiFile (File configDir ) {
223
+ writeFile (buildRestApiJson ().getBytes (), new File (configDir , "rest-api.json" ));
195
224
}
196
225
197
- protected String buildRestApiJson (AppConfig config ) {
226
+ protected String buildRestApiJson () {
198
227
return RestApiUtil .buildDefaultRestApiJson ();
199
228
}
200
229
201
- protected void generateContentDatabaseFile (File configDir , AppConfig config ) {
230
+ protected void generateDatabaseFiles (File configDir ) {
202
231
File databasesDir = new File (configDir , "databases" );
203
232
databasesDir .mkdirs ();
204
233
205
- writeFile (buildContentDatabaseJson (config ), new File (databasesDir , "content-database.json" ));
234
+ writeFile (buildContentDatabaseJson (), new File (databasesDir , "content-database.json" ));
235
+ writeFile (buildSchemasDatabaseJson (), new File (databasesDir , "schemas-database.json" ));
206
236
}
207
237
208
- protected ObjectNode buildContentDatabaseJson (AppConfig config ) {
238
+ protected ObjectNode buildContentDatabaseJson () {
209
239
ObjectNode node = objectMapper .createObjectNode ();
210
240
node .put ("database-name" , "%%DATABASE%%" );
241
+ node .put ("schema-database" , "%%SCHEMAS_DATABASE%%" );
211
242
ArrayNode array = node .putArray ("range-element-index" );
212
243
ObjectNode index = array .addObject ();
213
244
index .put ("scalar-type" , "string" );
@@ -219,6 +250,12 @@ protected ObjectNode buildContentDatabaseJson(AppConfig config) {
219
250
return node ;
220
251
}
221
252
253
+ protected ObjectNode buildSchemasDatabaseJson () {
254
+ ObjectNode node = objectMapper .createObjectNode ();
255
+ node .put ("database-name" , "%%SCHEMAS_DATABASE%%" );
256
+ return node ;
257
+ }
258
+
222
259
protected void writeFile (ObjectNode node , File f ) {
223
260
try {
224
261
byte [] bytes = objectMapper .writer (prettyPrinter ).writeValueAsBytes (node );
@@ -258,4 +295,32 @@ public void setObjectMapper(ObjectMapper objectMapper) {
258
295
public void setPrettyPrinter (PrettyPrinter prettyPrinter ) {
259
296
this .prettyPrinter = prettyPrinter ;
260
297
}
298
+
299
+ public static class AppInputs {
300
+ final private String appName ;
301
+ final private boolean withRestServer ;
302
+ final private boolean withUsersAndRoles ;
303
+
304
+ public AppInputs (String appName ) {
305
+ this (appName , true , true );
306
+ }
307
+
308
+ public AppInputs (String appName , boolean withRestServer , boolean withUsersAndRoles ) {
309
+ this .appName = appName ;
310
+ this .withRestServer = withRestServer ;
311
+ this .withUsersAndRoles = withUsersAndRoles ;
312
+ }
313
+
314
+ public String getAppName () {
315
+ return appName ;
316
+ }
317
+
318
+ public boolean isWithRestServer () {
319
+ return withRestServer ;
320
+ }
321
+
322
+ public boolean isWithUsersAndRoles () {
323
+ return withUsersAndRoles ;
324
+ }
325
+ }
261
326
}
0 commit comments