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