@@ -38,7 +38,7 @@ public class ScaffoldGenerator extends LoggingObject {
3838 protected ObjectMapper objectMapper ;
3939 private PrettyPrinter prettyPrinter = new DefaultPrettyPrinter ();
4040
41- public void generateScaffold (String path , AppConfig config ) {
41+ public void generateScaffold (String path , AppInputs appInputs ) {
4242 if (objectMapper == null ) {
4343 objectMapper = ObjectMapperFactory .getObjectMapper ();
4444 }
@@ -50,29 +50,58 @@ public void generateScaffold(String path, AppConfig config) {
5050 File modulesDir = getModulesDir (rootDir );
5151 modulesDir .mkdirs ();
5252
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 ();
5582
83+ generateDatabaseFiles (configDir );
84+ generateSecurityFiles (configDir , config .getName ());
5685 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 () );
6089 }
6190
6291 }
6392
64- private void generateSearchOptions (File modulesDir , AppConfig config ) {
93+ private void generateSearchOptions (File modulesDir , String appName ) {
6594 File optionsDir = new File (modulesDir , "options" );
6695 optionsDir .mkdirs ();
6796 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" ));
6998 }
7099
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" ));
73102 }
74103
75- protected ObjectNode buildRestPropertiesJson (AppConfig config ) {
104+ protected ObjectNode buildRestPropertiesJson () {
76105 ObjectNode node = objectMapper .createObjectNode ();
77106 node .put ("debug" , false );
78107 node .put ("validate-queries" , true );
@@ -81,70 +110,70 @@ protected ObjectNode buildRestPropertiesJson(AppConfig config) {
81110 return node ;
82111 }
83112
84- protected void generateSecurityFiles (File configDir , AppConfig config ) {
113+ protected void generateSecurityFiles (File configDir , String appName ) {
85114 File rolesDir = new File (configDir , "security/roles" );
86115 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" ));
92121
93122 File usersDir = new File (configDir , "security/users" );
94123 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" ));
98127 }
99128
100- protected ObjectNode buildNobodyRole (AppConfig config ) {
129+ protected ObjectNode buildNobodyRole (String appName ) {
101130 ObjectNode node = objectMapper .createObjectNode ();
102- node .put ("role-name" , config . getName () + "-nobody" );
131+ node .put ("role-name" , appName + "-nobody" );
103132 node .put ("description" , "Unauthenticated user" );
104133 node .putArray ("role" );
105134 return node ;
106135 }
107136
108- protected ObjectNode buildReaderRole (AppConfig config ) {
137+ protected ObjectNode buildReaderRole (String appName ) {
109138 ObjectNode node = objectMapper .createObjectNode ();
110- node .put ("role-name" , config . getName () + "-reader" );
139+ node .put ("role-name" , appName + "-reader" );
111140 node .put ("description" , "Can view documents, but not edit" );
112141 ArrayNode array = node .putArray ("role" );
113142 array .add ("rest-reader" );
114- array .add (config . getName () + "-nobody" );
143+ array .add (appName + "-nobody" );
115144 return node ;
116145 }
117146
118- protected ObjectNode buildWriterRole (AppConfig config ) {
147+ protected ObjectNode buildWriterRole (String appName ) {
119148 ObjectNode node = objectMapper .createObjectNode ();
120- node .put ("role-name" , config . getName () + "-writer" );
149+ node .put ("role-name" , appName + "-writer" );
121150 node .put ("description" , "Can read and write documents" );
122151 ArrayNode array = node .putArray ("role" );
123152 array .add ("rest-writer" );
124- array .add (config . getName () + "-reader" );
153+ array .add (appName + "-reader" );
125154 array = node .putArray ("privilege" );
126155 array .add (buildPrivilege ("any-uri" , "http://marklogic.com/xdmp/privileges/any-uri" , "execute" ));
127156 array .add (buildPrivilege ("unprotected-collections" , "http://marklogic.com/xdmp/privileges/unprotected-collections" , "execute" ));
128157 return node ;
129158 }
130159
131- protected ObjectNode buildInternalRole (AppConfig config ) {
160+ protected ObjectNode buildInternalRole (String appName ) {
132161 ObjectNode node = objectMapper .createObjectNode ();
133- node .put ("role-name" , config . getName () + "-internal" );
162+ node .put ("role-name" , appName + "-internal" );
134163 node .put ("description" , "Internal role used for amping" );
135164 ArrayNode array = node .putArray ("role" );
136- array .add (config . getName () + "-writer" );
165+ array .add (appName + "-writer" );
137166 return node ;
138167 }
139168
140- protected ObjectNode buildAdminRole (AppConfig config ) {
169+ protected ObjectNode buildAdminRole (String appName ) {
141170 ObjectNode node = objectMapper .createObjectNode ();
142- node .put ("role-name" , config . getName () + "-admin" );
171+ node .put ("role-name" , appName + "-admin" );
143172 node .put ("description" , "Non-admin administrator" );
144173 ArrayNode array = node .putArray ("role" );
145174 array .add ("rest-admin" );
146175 array .add ("manage-admin" );
147- array .add (config . getName () + "-writer" );
176+ array .add (appName + "-writer" );
148177 array = node .putArray ("privilege" );
149178 array .add (buildPrivilege ("any-uri" , "http://marklogic.com/xdmp/privileges/any-uri" , "execute" ));
150179 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) {
160189 return node ;
161190 }
162191
163- protected ObjectNode buildReaderUser (AppConfig config ) {
192+ protected ObjectNode buildReaderUser (String appName ) {
164193 ObjectNode node = objectMapper .createObjectNode ();
165- String name = config . getName () + "-reader" ;
194+ String name = appName + "-reader" ;
166195 node .put ("user-name" , name );
167196 node .put ("password" , name );
168197 ArrayNode roles = node .putArray ("role" );
169- roles .add (config . getName () + "-reader" );
198+ roles .add (appName + "-reader" );
170199 return node ;
171200 }
172201
173- protected ObjectNode buildWriterUser (AppConfig config ) {
202+ protected ObjectNode buildWriterUser (String appName ) {
174203 ObjectNode node = objectMapper .createObjectNode ();
175- String name = config . getName () + "-writer" ;
204+ String name = appName + "-writer" ;
176205 node .put ("user-name" , name );
177206 node .put ("password" , name );
178207 ArrayNode roles = node .putArray ("role" );
179- roles .add (config . getName () + "-writer" );
208+ roles .add (appName + "-writer" );
180209 return node ;
181210 }
182211
183- protected ObjectNode buildAdminUser (AppConfig config ) {
212+ protected ObjectNode buildAdminUser (String appName ) {
184213 ObjectNode node = objectMapper .createObjectNode ();
185- String name = config . getName () + "-admin" ;
214+ String name = appName + "-admin" ;
186215 node .put ("user-name" , name );
187216 node .put ("password" , name );
188217 ArrayNode roles = node .putArray ("role" );
189- roles .add (config . getName () + "-admin" );
218+ roles .add (appName + "-admin" );
190219 return node ;
191220 }
192221
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" ));
195224 }
196225
197- protected String buildRestApiJson (AppConfig config ) {
226+ protected String buildRestApiJson () {
198227 return RestApiUtil .buildDefaultRestApiJson ();
199228 }
200229
201- protected void generateContentDatabaseFile (File configDir , AppConfig config ) {
230+ protected void generateDatabaseFiles (File configDir ) {
202231 File databasesDir = new File (configDir , "databases" );
203232 databasesDir .mkdirs ();
204233
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" ));
206236 }
207237
208- protected ObjectNode buildContentDatabaseJson (AppConfig config ) {
238+ protected ObjectNode buildContentDatabaseJson () {
209239 ObjectNode node = objectMapper .createObjectNode ();
210240 node .put ("database-name" , "%%DATABASE%%" );
241+ node .put ("schema-database" , "%%SCHEMAS_DATABASE%%" );
211242 ArrayNode array = node .putArray ("range-element-index" );
212243 ObjectNode index = array .addObject ();
213244 index .put ("scalar-type" , "string" );
@@ -219,6 +250,12 @@ protected ObjectNode buildContentDatabaseJson(AppConfig config) {
219250 return node ;
220251 }
221252
253+ protected ObjectNode buildSchemasDatabaseJson () {
254+ ObjectNode node = objectMapper .createObjectNode ();
255+ node .put ("database-name" , "%%SCHEMAS_DATABASE%%" );
256+ return node ;
257+ }
258+
222259 protected void writeFile (ObjectNode node , File f ) {
223260 try {
224261 byte [] bytes = objectMapper .writer (prettyPrinter ).writeValueAsBytes (node );
@@ -258,4 +295,32 @@ public void setObjectMapper(ObjectMapper objectMapper) {
258295 public void setPrettyPrinter (PrettyPrinter prettyPrinter ) {
259296 this .prettyPrinter = prettyPrinter ;
260297 }
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+ }
261326}
0 commit comments