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