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