1
22
23 package com.liferay.portal.tools.samplesqlbuilder;
24
25 import com.liferay.portal.freemarker.FreeMarkerUtil;
26 import com.liferay.portal.kernel.util.GetterUtil;
27 import com.liferay.portal.kernel.util.StringPool;
28 import com.liferay.portal.kernel.util.StringUtil_IW;
29 import com.liferay.portal.kernel.util.Validator;
30 import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
31 import com.liferay.portal.model.Company;
32 import com.liferay.portal.model.Contact;
33 import com.liferay.portal.model.Group;
34 import com.liferay.portal.model.Layout;
35 import com.liferay.portal.model.Resource;
36 import com.liferay.portal.model.Role;
37 import com.liferay.portal.model.User;
38 import com.liferay.portal.tools.sql.DBUtil;
39 import com.liferay.portal.util.InitUtil;
40 import com.liferay.portlet.blogs.model.BlogsEntry;
41 import com.liferay.portlet.blogs.model.BlogsStatsUser;
42 import com.liferay.portlet.messageboards.model.MBCategory;
43 import com.liferay.portlet.messageboards.model.MBDiscussion;
44 import com.liferay.portlet.messageboards.model.MBMessage;
45 import com.liferay.portlet.messageboards.model.MBStatsUser;
46 import com.liferay.portlet.messageboards.model.MBThread;
47 import com.liferay.portlet.tags.model.TagsAsset;
48 import com.liferay.portlet.wiki.model.WikiNode;
49 import com.liferay.portlet.wiki.model.WikiPage;
50 import com.liferay.util.SimpleCounter;
51
52 import java.io.BufferedReader;
53 import java.io.File;
54 import java.io.FileReader;
55 import java.io.FileWriter;
56 import java.io.Writer;
57
58 import java.util.HashMap;
59 import java.util.List;
60 import java.util.Map;
61
62
67 public class SampleSQLBuilder {
68
69 public static void main(String[] args) {
70 InitUtil.initWithSpring();
71
72 String outputDir = System.getProperty("sample.sql.output.dir");
73 int maxBlogsEntryCommentCount = GetterUtil.getInteger(
74 System.getProperty("sample.sql.blogs.entry.comment.count"));
75 int maxBlogsEntryCount = GetterUtil.getInteger(
76 System.getProperty("sample.sql.blogs.entry.count"));
77 int maxGroupCount = GetterUtil.getInteger(
78 System.getProperty("sample.sql.group.count"));
79 int maxMBCategoryCount = GetterUtil.getInteger(
80 System.getProperty("sample.sql.mb.category.count"));
81 int maxMBMessageCount = GetterUtil.getInteger(
82 System.getProperty("sample.sql.mb.message.count"));
83 int maxMBThreadCount = GetterUtil.getInteger(
84 System.getProperty("sample.sql.mb.thread.count"));
85 int maxUserCount = GetterUtil.getInteger(
86 System.getProperty("sample.sql.user.count"));
87 int maxUserToGroupCount = GetterUtil.getInteger(
88 System.getProperty("sample.sql.user.to.group.count"));
89 int maxWikiNodeCount = GetterUtil.getInteger(
90 System.getProperty("sample.sql.wiki.node.count"));
91 int maxWikiPageCommentCount = GetterUtil.getInteger(
92 System.getProperty("sample.sql.wiki.page.comment.count"));
93 int maxWikiPageCount = GetterUtil.getInteger(
94 System.getProperty("sample.sql.wiki.page.count"));
95 boolean securityEnabled = GetterUtil.getBoolean(
96 System.getProperty("sample.sql.security.enabled"));
97
98 new SampleSQLBuilder(
99 outputDir, maxBlogsEntryCommentCount, maxBlogsEntryCount,
100 maxGroupCount, maxMBCategoryCount, maxMBMessageCount,
101 maxMBThreadCount, maxUserCount, maxUserToGroupCount,
102 maxWikiNodeCount, maxWikiPageCommentCount, maxWikiPageCount,
103 securityEnabled);
104 }
105
106 public SampleSQLBuilder(
107 String outputDir, int maxBlogsEntryCommentCount, int maxBlogsEntryCount,
108 int maxGroupCount, int maxMBCategoryCount, int maxMBMessageCount,
109 int maxMBThreadCount, int maxUserCount, int maxUserToGroupCount,
110 int maxWikiNodeCount, int maxWikiPageCommentCount, int maxWikiPageCount,
111 boolean securityEnabled) {
112
113 try {
114 _outputDir = outputDir;
115 _maxBlogsEntryCommentCount = maxBlogsEntryCommentCount;
116 _maxBlogsEntryCount = maxBlogsEntryCount;
117 _maxGroupCount = maxGroupCount;
118 _maxMBCategoryCount = maxMBCategoryCount;
119 _maxMBMessageCount = maxMBMessageCount;
120 _maxMBThreadCount = maxMBThreadCount;
121 _maxUserCount = maxUserCount;
122 _maxUserToGroupCount = maxUserToGroupCount;
123 _maxWikiNodeCount = maxWikiNodeCount;
124 _maxWikiPageCommentCount = maxWikiPageCommentCount;
125 _maxWikiPageCount = maxWikiPageCount;
126 _securityEnabled = securityEnabled;
127
128 int totalMThreadCount = maxMBCategoryCount * maxMBThreadCount;
129 int totalMBMessageCount = totalMThreadCount * maxMBMessageCount;
130
131 int counterOffset =
132 _maxGroupCount +
133 (_maxGroupCount *
134 (maxMBCategoryCount + totalMThreadCount +
135 totalMBMessageCount)
136 ) + 1;
137
138 _counter = new SimpleCounter(counterOffset);
139 _permissionCounter = new SimpleCounter();
140 _resourceCounter = new SimpleCounter();
141 _resourceCodeCounter = new SimpleCounter();
142
143 _userScreenNameIncrementer = new SimpleCounter();
144
145 _dataFactory = new DataFactory(
146 _maxGroupCount, _maxUserToGroupCount, _counter,
147 _permissionCounter, _resourceCounter, _resourceCodeCounter);
148
149
151 _writerGeneric = new FileWriter(_outputDir + "/sample.sql");
152
153 createSample();
154
155 _writerGeneric.flush();
156
157
159 _writerMySQL = new FileWriter(_outputDir + "/sample-mysql.sql");
160
161 DBUtil mysqlDBUtil = DBUtil.getInstance(DBUtil.TYPE_MYSQL);
162
163 boolean previousBlankLine = false;
164
165 BufferedReader br = new BufferedReader(
166 new FileReader(_outputDir + "/sample.sql"));
167
168 String s = null;
169
170 while ((s = br.readLine()) != null) {
171 s = mysqlDBUtil.buildSQL(s).trim();
172
173 _writerMySQL.write(s);
174
175 if (previousBlankLine && Validator.isNull(s)) {
176 }
177 else {
178 _writerMySQL.write(StringPool.NEW_LINE);
179 }
180
181 if (Validator.isNull(s)) {
182 previousBlankLine = true;
183 }
184 }
185
186 br.close();
187
188 _writerMySQL.flush();
189 }
190 catch (Exception e) {
191 e.printStackTrace();
192 }
193 }
194
195 public void insertBlogsEntry(BlogsEntry blogsEntry) throws Exception {
196 Map<String, Object> context = getContext();
197
198 put(context, "blogsEntry", blogsEntry);
199
200 processTemplate(_tplBlogsEntry, context);
201 }
202
203 public void insertBlogsStatsUser(BlogsStatsUser blogsStatsUser)
204 throws Exception {
205
206 Map<String, Object> context = getContext();
207
208 put(context, "blogsStatsUser", blogsStatsUser);
209
210 processTemplate(_tplBlogsStatsUser, context);
211 }
212
213 public void insertGroup(
214 Group group, List<Layout> privateLayouts,
215 List<Layout> publicLayouts)
216 throws Exception {
217
218 Map<String, Object> context = getContext();
219
220 put(context, "group", group);
221 put(context, "privateLayouts", privateLayouts);
222 put(context, "publicLayouts", publicLayouts);
223
224 processTemplate(_tplGroup, context);
225 }
226
227 public void insertMBCategory(MBCategory mbCategory) throws Exception {
228 Map<String, Object> context = getContext();
229
230 put(context, "mbCategory", mbCategory);
231
232 processTemplate(_tplMBCategory, context);
233 }
234
235 public void insertMBDiscussion(MBDiscussion mbDiscussion) throws Exception {
236 Map<String, Object> context = getContext();
237
238 put(context, "mbDiscussion", mbDiscussion);
239
240 processTemplate(_tplMBDiscussion, context);
241 }
242
243 public void insertMBMessage(MBMessage mbMessage) throws Exception {
244 Map<String, Object> context = getContext();
245
246 put(context, "mbMessage", mbMessage);
247
248 processTemplate(_tplMBMessage, context);
249 }
250
251 public void insertMBStatsUser(MBStatsUser mbStatsUser) throws Exception {
252 Map<String, Object> context = getContext();
253
254 put(context, "mbStatsUser", mbStatsUser);
255
256 processTemplate(_tplMBStatsUser, context);
257 }
258
259 public void insertMBThread(MBThread mbThread) throws Exception {
260 Map<String, Object> context = getContext();
261
262 put(context, "mbThread", mbThread);
263
264 processTemplate(_tplMBThread, context);
265 }
266
267 public void insertSecurity(String name, long primKey) throws Exception {
268 insertSecurity(name, String.valueOf(primKey));
269 }
270
271 public void insertSecurity(String name, String primKey) throws Exception {
272 if (!_securityEnabled) {
273 return;
274 }
275
276 Map<String, Object> context = getContext();
277
278 Resource resource = _dataFactory.addResource(name, primKey);
279
280 put(context, "resource", resource);
281
282 processTemplate(_tplSecurity, context);
283 }
284
285 public void insertTagsAsset(TagsAsset tagsAsset) throws Exception {
286 Map<String, Object> context = getContext();
287
288 put(context, "tagsAsset", tagsAsset);
289
290 processTemplate(_tplTagsAsset, context);
291 }
292
293 public void insertUser(
294 Contact contact, Group group, List<Long> groupIds,
295 List<Long> organizationIds, List<Layout> privateLayouts,
296 List<Layout> publicLayouts, List<Role> roleIds, User user)
297 throws Exception {
298
299 Map<String, Object> context = getContext();
300
301 put(context, "contact", contact);
302 put(context, "group", group);
303 put(context, "groupIds", groupIds);
304 put(context, "organizationIds", organizationIds);
305 put(context, "privateLayouts", privateLayouts);
306 put(context, "publicLayouts", publicLayouts);
307 put(context, "roleIds", roleIds);
308 put(context, "user", user);
309
310 processTemplate(_tplUser, context);
311 }
312
313 public void insertWikiNode(WikiNode wikiNode) throws Exception {
314 Map<String, Object> context = getContext();
315
316 put(context, "wikiNode", wikiNode);
317
318 processTemplate(_tplWikiNode, context);
319 }
320
321 public void insertWikiPage(WikiNode wikiNode, WikiPage wikiPage)
322 throws Exception {
323
324 Map<String, Object> context = getContext();
325
326 put(context, "wikiNode", wikiNode);
327 put(context, "wikiPage", wikiPage);
328
329 processTemplate(_tplWikiPage, context);
330 }
331
332 protected void createSample() throws Exception {
333 Map<String, Object> context = getContext();
334
335 Writer blogsEntriesCsvWriter = getWriter("blogs_entries.csv");
336 Writer mbMessagesCsvWriter = getWriter("mb_messages.csv");
337 Writer usersCsvWriter = getWriter("users.csv");
338 Writer wikiPagesCsvWriter = getWriter("wiki_pages.csv");
339
340 put(context, "blogsEntriesCsvWriter", blogsEntriesCsvWriter);
341 put(context, "mbMessagesCsvWriter", mbMessagesCsvWriter);
342 put(context, "usersCsvWriter", usersCsvWriter);
343 put(context, "wikiPagesCsvWriter", wikiPagesCsvWriter);
344
345 processTemplate(_tplSample, context);
346
347 blogsEntriesCsvWriter.flush();
348 mbMessagesCsvWriter.flush();
349 usersCsvWriter.flush();
350 wikiPagesCsvWriter.flush();
351 }
352
353 protected Map<String, Object> getContext() {
354 Map<String, Object> context = new HashMap<String, Object>();
355
356 Company company = _dataFactory.getCompany();
357 User defaultUser = _dataFactory.getDefaultUser();
358
359 put(context, "companyId", company.getCompanyId());
360 put(context, "counter", _counter);
361 put(context, "dataFactory", _dataFactory);
362 put(context, "defaultUserId", defaultUser.getCompanyId());
363 put(context, "maxBlogsEntryCommentCount", _maxBlogsEntryCommentCount);
364 put(context, "maxBlogsEntryCount", _maxBlogsEntryCount);
365 put(context, "maxGroupCount", _maxGroupCount);
366 put(context, "maxMBCategoryCount", _maxMBCategoryCount);
367 put(context, "maxMBMessageCount", _maxMBMessageCount);
368 put(context, "maxMBThreadCount", _maxMBThreadCount);
369 put(context, "maxUserCount", _maxUserCount);
370 put(context, "maxUserToGroupCount", _maxUserToGroupCount);
371 put(context, "maxWikiNodeCount", _maxWikiNodeCount);
372 put(context, "maxWikiPageCommentCount", _maxWikiPageCommentCount);
373 put(context, "maxWikiPageCount", _maxWikiPageCount);
374 put(context, "portalUUIDUtil", PortalUUIDUtil.getPortalUUID());
375 put(context, "sampleSQLBuilder", this);
376 put(context, "stringUtil", StringUtil_IW.getInstance());
377 put(context, "userScreenNameIncrementer", _userScreenNameIncrementer);
378
379 return context;
380 }
381
382 protected Writer getWriter(String fileName) throws Exception {
383 return new FileWriter(new File(_outputDir + "/" + fileName));
384 }
385
386 protected void processTemplate(String name, Map<String, Object> context)
387 throws Exception {
388
389 FreeMarkerUtil.process(name, context, _writerGeneric);
390 }
391
392 protected void put(Map<String, Object> context, String key, Object value) {
393 context.put(key, value);
394 }
395
396 private static final String _TPL_ROOT =
397 "com/liferay/portal/tools/samplesqlbuilder/dependencies/";
398
399 private SimpleCounter _counter;
400 private DataFactory _dataFactory;
401 private int _maxBlogsEntryCommentCount;
402 private int _maxBlogsEntryCount;
403 private int _maxGroupCount;
404 private int _maxMBCategoryCount;
405 private int _maxMBMessageCount;
406 private int _maxMBThreadCount;
407 private int _maxUserCount;
408 private int _maxUserToGroupCount;
409 private int _maxWikiNodeCount;
410 private int _maxWikiPageCommentCount;
411 private int _maxWikiPageCount;
412 private String _outputDir;
413 private SimpleCounter _permissionCounter;
414 private SimpleCounter _resourceCodeCounter;
415 private SimpleCounter _resourceCounter;
416 private boolean _securityEnabled;
417 private String _tplGroup = _TPL_ROOT + "group.ftl";
418 private String _tplBlogsEntry = _TPL_ROOT + "blogs_entry.ftl";
419 private String _tplBlogsStatsUser = _TPL_ROOT + "blogs_stats_user.ftl";
420 private String _tplMBCategory = _TPL_ROOT + "mb_category.ftl";
421 private String _tplMBDiscussion = _TPL_ROOT + "mb_discussion.ftl";
422 private String _tplMBMessage = _TPL_ROOT + "mb_message.ftl";
423 private String _tplMBStatsUser = _TPL_ROOT + "mb_stats_user.ftl";
424 private String _tplMBThread = _TPL_ROOT + "mb_thread.ftl";
425 private String _tplSample = _TPL_ROOT + "sample.ftl";
426 private String _tplSecurity = _TPL_ROOT + "security.ftl";
427 private String _tplTagsAsset = _TPL_ROOT + "tags_asset.ftl";
428 private String _tplUser = _TPL_ROOT + "user.ftl";
429 private String _tplWikiNode = _TPL_ROOT + "wiki_node.ftl";
430 private String _tplWikiPage = _TPL_ROOT + "wiki_page.ftl";
431 private SimpleCounter _userScreenNameIncrementer;
432 private Writer _writerGeneric;
433 private Writer _writerMySQL;
434
435 }