001
014
015 package com.liferay.portal.tools.samplesqlbuilder;
016
017 import com.liferay.portal.freemarker.FreeMarkerUtil;
018 import com.liferay.portal.kernel.dao.db.DB;
019 import com.liferay.portal.kernel.dao.db.DBFactoryUtil;
020 import com.liferay.portal.kernel.io.unsync.UnsyncBufferedReader;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.StringUtil_IW;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
026 import com.liferay.portal.model.Company;
027 import com.liferay.portal.model.Contact;
028 import com.liferay.portal.model.Group;
029 import com.liferay.portal.model.Layout;
030 import com.liferay.portal.model.Resource;
031 import com.liferay.portal.model.Role;
032 import com.liferay.portal.model.User;
033 import com.liferay.portal.util.InitUtil;
034 import com.liferay.portlet.asset.model.AssetEntry;
035 import com.liferay.portlet.blogs.model.BlogsEntry;
036 import com.liferay.portlet.blogs.model.BlogsStatsUser;
037 import com.liferay.portlet.messageboards.model.MBCategory;
038 import com.liferay.portlet.messageboards.model.MBDiscussion;
039 import com.liferay.portlet.messageboards.model.MBMessage;
040 import com.liferay.portlet.messageboards.model.MBStatsUser;
041 import com.liferay.portlet.messageboards.model.MBThread;
042 import com.liferay.portlet.wiki.model.WikiNode;
043 import com.liferay.portlet.wiki.model.WikiPage;
044 import com.liferay.util.SimpleCounter;
045
046 import java.io.File;
047 import java.io.FileReader;
048 import java.io.FileWriter;
049 import java.io.Writer;
050
051 import java.util.HashMap;
052 import java.util.List;
053 import java.util.Map;
054
055
058 public class SampleSQLBuilder {
059
060 public static void main(String[] args) {
061 InitUtil.initWithSpring();
062
063 String outputDir = System.getProperty("sample.sql.output.dir");
064 String dbType = System.getProperty("sample.sql.db.type");
065 int maxBlogsEntryCommentCount = GetterUtil.getInteger(
066 System.getProperty("sample.sql.blogs.entry.comment.count"));
067 int maxBlogsEntryCount = GetterUtil.getInteger(
068 System.getProperty("sample.sql.blogs.entry.count"));
069 int maxGroupCount = GetterUtil.getInteger(
070 System.getProperty("sample.sql.group.count"));
071 int maxMBCategoryCount = GetterUtil.getInteger(
072 System.getProperty("sample.sql.mb.category.count"));
073 int maxMBMessageCount = GetterUtil.getInteger(
074 System.getProperty("sample.sql.mb.message.count"));
075 int maxMBThreadCount = GetterUtil.getInteger(
076 System.getProperty("sample.sql.mb.thread.count"));
077 int maxUserCount = GetterUtil.getInteger(
078 System.getProperty("sample.sql.user.count"));
079 int maxUserToGroupCount = GetterUtil.getInteger(
080 System.getProperty("sample.sql.user.to.group.count"));
081 int maxWikiNodeCount = GetterUtil.getInteger(
082 System.getProperty("sample.sql.wiki.node.count"));
083 int maxWikiPageCommentCount = GetterUtil.getInteger(
084 System.getProperty("sample.sql.wiki.page.comment.count"));
085 int maxWikiPageCount = GetterUtil.getInteger(
086 System.getProperty("sample.sql.wiki.page.count"));
087 boolean securityEnabled = GetterUtil.getBoolean(
088 System.getProperty("sample.sql.security.enabled"));
089
090 new SampleSQLBuilder(
091 outputDir, dbType, maxBlogsEntryCommentCount, maxBlogsEntryCount,
092 maxGroupCount, maxMBCategoryCount, maxMBMessageCount,
093 maxMBThreadCount, maxUserCount, maxUserToGroupCount,
094 maxWikiNodeCount, maxWikiPageCommentCount, maxWikiPageCount,
095 securityEnabled);
096 }
097
098 public SampleSQLBuilder(
099 String outputDir, String dbType, int maxBlogsEntryCommentCount,
100 int maxBlogsEntryCount, int maxGroupCount, int maxMBCategoryCount,
101 int maxMBMessageCount, int maxMBThreadCount, int maxUserCount,
102 int maxUserToGroupCount, int maxWikiNodeCount,
103 int maxWikiPageCommentCount, int maxWikiPageCount,
104 boolean securityEnabled) {
105
106 try {
107 _outputDir = outputDir;
108 _dbType = dbType;
109 _maxBlogsEntryCommentCount = maxBlogsEntryCommentCount;
110 _maxBlogsEntryCount = maxBlogsEntryCount;
111 _maxGroupCount = maxGroupCount;
112 _maxMBCategoryCount = maxMBCategoryCount;
113 _maxMBMessageCount = maxMBMessageCount;
114 _maxMBThreadCount = maxMBThreadCount;
115 _maxUserCount = maxUserCount;
116 _maxUserToGroupCount = maxUserToGroupCount;
117 _maxWikiNodeCount = maxWikiNodeCount;
118 _maxWikiPageCommentCount = maxWikiPageCommentCount;
119 _maxWikiPageCount = maxWikiPageCount;
120 _securityEnabled = securityEnabled;
121
122 int totalMThreadCount = maxMBCategoryCount * maxMBThreadCount;
123 int totalMBMessageCount = totalMThreadCount * maxMBMessageCount;
124
125 int counterOffset =
126 _maxGroupCount +
127 (_maxGroupCount *
128 (maxMBCategoryCount + totalMThreadCount +
129 totalMBMessageCount)
130 ) + 1;
131
132 _counter = new SimpleCounter(counterOffset);
133 _permissionCounter = new SimpleCounter();
134 _resourceCounter = new SimpleCounter();
135 _resourceCodeCounter = new SimpleCounter();
136
137 _userScreenNameIncrementer = new SimpleCounter();
138
139 _dataFactory = new DataFactory(
140 _maxGroupCount, _maxUserToGroupCount, _counter,
141 _permissionCounter, _resourceCounter, _resourceCodeCounter);
142
143
144
145 _writerGeneric = new FileWriter(_outputDir + "/sample.sql");
146
147 createSample();
148
149 _writerGeneric.flush();
150
151
152
153 _writerSpecific = new FileWriter(
154 _outputDir + "/sample-" + dbType + ".sql");
155
156 DB specificDB = DBFactoryUtil.getDB(_dbType);
157
158 boolean previousBlankLine = false;
159
160 UnsyncBufferedReader unsyncBufferedReader =
161 new UnsyncBufferedReader(
162 new FileReader(_outputDir + "/sample.sql"));
163
164 String s = null;
165
166 while ((s = unsyncBufferedReader.readLine()) != null) {
167 s = specificDB.buildSQL(s).trim();
168
169 _writerSpecific.write(s);
170
171 if (previousBlankLine && Validator.isNull(s)) {
172 }
173 else {
174 _writerSpecific.write(StringPool.NEW_LINE);
175 }
176
177 if (Validator.isNull(s)) {
178 previousBlankLine = true;
179 }
180 }
181
182 unsyncBufferedReader.close();
183
184 _writerSpecific.flush();
185 }
186 catch (Exception e) {
187 e.printStackTrace();
188 }
189 }
190
191 public void insertAssetEntry(AssetEntry assetEntry) throws Exception {
192 Map<String, Object> context = getContext();
193
194 put(context, "assetEntry", assetEntry);
195
196 processTemplate(_tplAssetEntry, context);
197 }
198
199 public void insertBlogsEntry(BlogsEntry blogsEntry) throws Exception {
200 Map<String, Object> context = getContext();
201
202 put(context, "blogsEntry", blogsEntry);
203
204 processTemplate(_tplBlogsEntry, context);
205 }
206
207 public void insertBlogsStatsUser(BlogsStatsUser blogsStatsUser)
208 throws Exception {
209
210 Map<String, Object> context = getContext();
211
212 put(context, "blogsStatsUser", blogsStatsUser);
213
214 processTemplate(_tplBlogsStatsUser, context);
215 }
216
217 public void insertGroup(
218 Group group, List<Layout> privateLayouts,
219 List<Layout> publicLayouts)
220 throws Exception {
221
222 Map<String, Object> context = getContext();
223
224 put(context, "group", group);
225 put(context, "privateLayouts", privateLayouts);
226 put(context, "publicLayouts", publicLayouts);
227
228 processTemplate(_tplGroup, context);
229 }
230
231 public void insertMBCategory(MBCategory mbCategory) throws Exception {
232 Map<String, Object> context = getContext();
233
234 put(context, "mbCategory", mbCategory);
235
236 processTemplate(_tplMBCategory, context);
237 }
238
239 public void insertMBDiscussion(MBDiscussion mbDiscussion) throws Exception {
240 Map<String, Object> context = getContext();
241
242 put(context, "mbDiscussion", mbDiscussion);
243
244 processTemplate(_tplMBDiscussion, context);
245 }
246
247 public void insertMBMessage(MBMessage mbMessage) throws Exception {
248 Map<String, Object> context = getContext();
249
250 put(context, "mbMessage", mbMessage);
251
252 processTemplate(_tplMBMessage, context);
253 }
254
255 public void insertMBStatsUser(MBStatsUser mbStatsUser) throws Exception {
256 Map<String, Object> context = getContext();
257
258 put(context, "mbStatsUser", mbStatsUser);
259
260 processTemplate(_tplMBStatsUser, context);
261 }
262
263 public void insertMBThread(MBThread mbThread) throws Exception {
264 Map<String, Object> context = getContext();
265
266 put(context, "mbThread", mbThread);
267
268 processTemplate(_tplMBThread, context);
269 }
270
271 public void insertSecurity(String name, long primKey) throws Exception {
272 insertSecurity(name, String.valueOf(primKey));
273 }
274
275 public void insertSecurity(String name, String primKey) throws Exception {
276 if (!_securityEnabled) {
277 return;
278 }
279
280 Map<String, Object> context = getContext();
281
282 Resource resource = _dataFactory.addResource(name, primKey);
283
284 put(context, "resource", resource);
285
286 processTemplate(_tplSecurity, context);
287 }
288
289 public void insertUser(
290 Contact contact, Group group, List<Long> groupIds,
291 List<Long> organizationIds, List<Layout> privateLayouts,
292 List<Layout> publicLayouts, List<Role> roleIds, User user)
293 throws Exception {
294
295 Map<String, Object> context = getContext();
296
297 put(context, "contact", contact);
298 put(context, "group", group);
299 put(context, "groupIds", groupIds);
300 put(context, "organizationIds", organizationIds);
301 put(context, "privateLayouts", privateLayouts);
302 put(context, "publicLayouts", publicLayouts);
303 put(context, "roleIds", roleIds);
304 put(context, "user", user);
305
306 processTemplate(_tplUser, context);
307 }
308
309 public void insertWikiNode(WikiNode wikiNode) throws Exception {
310 Map<String, Object> context = getContext();
311
312 put(context, "wikiNode", wikiNode);
313
314 processTemplate(_tplWikiNode, context);
315 }
316
317 public void insertWikiPage(WikiNode wikiNode, WikiPage wikiPage)
318 throws Exception {
319
320 Map<String, Object> context = getContext();
321
322 put(context, "wikiNode", wikiNode);
323 put(context, "wikiPage", wikiPage);
324
325 processTemplate(_tplWikiPage, context);
326 }
327
328 protected void createSample() throws Exception {
329 Map<String, Object> context = getContext();
330
331 Writer blogsEntriesCsvWriter = getWriter("blogs_entries.csv");
332 Writer mbMessagesCsvWriter = getWriter("mb_messages.csv");
333 Writer usersCsvWriter = getWriter("users.csv");
334 Writer wikiPagesCsvWriter = getWriter("wiki_pages.csv");
335
336 put(context, "blogsEntriesCsvWriter", blogsEntriesCsvWriter);
337 put(context, "mbMessagesCsvWriter", mbMessagesCsvWriter);
338 put(context, "usersCsvWriter", usersCsvWriter);
339 put(context, "wikiPagesCsvWriter", wikiPagesCsvWriter);
340
341 processTemplate(_tplSample, context);
342
343 blogsEntriesCsvWriter.flush();
344 mbMessagesCsvWriter.flush();
345 usersCsvWriter.flush();
346 wikiPagesCsvWriter.flush();
347 }
348
349 protected Map<String, Object> getContext() {
350 Map<String, Object> context = new HashMap<String, Object>();
351
352 Company company = _dataFactory.getCompany();
353 User defaultUser = _dataFactory.getDefaultUser();
354
355 put(context, "companyId", company.getCompanyId());
356 put(context, "counter", _counter);
357 put(context, "dataFactory", _dataFactory);
358 put(context, "defaultUserId", defaultUser.getCompanyId());
359 put(context, "maxBlogsEntryCommentCount", _maxBlogsEntryCommentCount);
360 put(context, "maxBlogsEntryCount", _maxBlogsEntryCount);
361 put(context, "maxGroupCount", _maxGroupCount);
362 put(context, "maxMBCategoryCount", _maxMBCategoryCount);
363 put(context, "maxMBMessageCount", _maxMBMessageCount);
364 put(context, "maxMBThreadCount", _maxMBThreadCount);
365 put(context, "maxUserCount", _maxUserCount);
366 put(context, "maxUserToGroupCount", _maxUserToGroupCount);
367 put(context, "maxWikiNodeCount", _maxWikiNodeCount);
368 put(context, "maxWikiPageCommentCount", _maxWikiPageCommentCount);
369 put(context, "maxWikiPageCount", _maxWikiPageCount);
370 put(context, "portalUUIDUtil", PortalUUIDUtil.getPortalUUID());
371 put(context, "sampleSQLBuilder", this);
372 put(context, "stringUtil", StringUtil_IW.getInstance());
373 put(context, "userScreenNameIncrementer", _userScreenNameIncrementer);
374
375 return context;
376 }
377
378 protected Writer getWriter(String fileName) throws Exception {
379 return new FileWriter(new File(_outputDir + "/" + fileName));
380 }
381
382 protected void processTemplate(String name, Map<String, Object> context)
383 throws Exception {
384
385 FreeMarkerUtil.process(name, context, _writerGeneric);
386 }
387
388 protected void put(Map<String, Object> context, String key, Object value) {
389 context.put(key, value);
390 }
391
392 private static final String _TPL_ROOT =
393 "com/liferay/portal/tools/samplesqlbuilder/dependencies/";
394
395 private SimpleCounter _counter;
396 private DataFactory _dataFactory;
397 private String _dbType;
398 private int _maxBlogsEntryCommentCount;
399 private int _maxBlogsEntryCount;
400 private int _maxGroupCount;
401 private int _maxMBCategoryCount;
402 private int _maxMBMessageCount;
403 private int _maxMBThreadCount;
404 private int _maxUserCount;
405 private int _maxUserToGroupCount;
406 private int _maxWikiNodeCount;
407 private int _maxWikiPageCommentCount;
408 private int _maxWikiPageCount;
409 private String _outputDir;
410 private SimpleCounter _permissionCounter;
411 private SimpleCounter _resourceCodeCounter;
412 private SimpleCounter _resourceCounter;
413 private boolean _securityEnabled;
414 private String _tplAssetEntry = _TPL_ROOT + "asset_entry.ftl";
415 private String _tplGroup = _TPL_ROOT + "group.ftl";
416 private String _tplBlogsEntry = _TPL_ROOT + "blogs_entry.ftl";
417 private String _tplBlogsStatsUser = _TPL_ROOT + "blogs_stats_user.ftl";
418 private String _tplMBCategory = _TPL_ROOT + "mb_category.ftl";
419 private String _tplMBDiscussion = _TPL_ROOT + "mb_discussion.ftl";
420 private String _tplMBMessage = _TPL_ROOT + "mb_message.ftl";
421 private String _tplMBStatsUser = _TPL_ROOT + "mb_stats_user.ftl";
422 private String _tplMBThread = _TPL_ROOT + "mb_thread.ftl";
423 private String _tplSample = _TPL_ROOT + "sample.ftl";
424 private String _tplSecurity = _TPL_ROOT + "security.ftl";
425 private String _tplUser = _TPL_ROOT + "user.ftl";
426 private String _tplWikiNode = _TPL_ROOT + "wiki_node.ftl";
427 private String _tplWikiPage = _TPL_ROOT + "wiki_page.ftl";
428 private SimpleCounter _userScreenNameIncrementer;
429 private Writer _writerGeneric;
430 private Writer _writerSpecific;
431
432 }