1
14
15 package com.liferay.portlet.journal.action;
16
17 import com.liferay.counter.service.CounterLocalServiceUtil;
18 import com.liferay.portal.NoSuchPortletPreferencesException;
19 import com.liferay.portal.NoSuchUserException;
20 import com.liferay.portal.kernel.log.Log;
21 import com.liferay.portal.kernel.log.LogFactoryUtil;
22 import com.liferay.portal.kernel.upgrade.util.IdReplacer;
23 import com.liferay.portal.kernel.util.GetterUtil;
24 import com.liferay.portal.kernel.util.ParamUtil;
25 import com.liferay.portal.kernel.util.StringPool;
26 import com.liferay.portal.kernel.util.StringUtil;
27 import com.liferay.portal.kernel.util.Time;
28 import com.liferay.portal.kernel.util.UnicodeProperties;
29 import com.liferay.portal.kernel.util.Validator;
30 import com.liferay.portal.kernel.zip.ZipWriter;
31 import com.liferay.portal.kernel.zip.ZipWriterFactoryUtil;
32 import com.liferay.portal.model.Image;
33 import com.liferay.portal.model.Layout;
34 import com.liferay.portal.model.LayoutTypePortlet;
35 import com.liferay.portal.model.PortletPreferences;
36 import com.liferay.portal.security.permission.PermissionChecker;
37 import com.liferay.portal.service.ImageLocalServiceUtil;
38 import com.liferay.portal.service.LayoutLocalServiceUtil;
39 import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
40 import com.liferay.portal.service.UserLocalServiceUtil;
41 import com.liferay.portal.theme.ThemeDisplay;
42 import com.liferay.portal.upgrade.util.MemoryValueMapper;
43 import com.liferay.portal.util.PortalUtil;
44 import com.liferay.portal.util.PortletKeys;
45 import com.liferay.portal.util.WebKeys;
46 import com.liferay.portal.util.comparator.LayoutComparator;
47 import com.liferay.portlet.PortletPreferencesImpl;
48 import com.liferay.portlet.PortletPreferencesSerializer;
49 import com.liferay.portlet.imagegallery.NoSuchImageException;
50 import com.liferay.portlet.imagegallery.model.IGFolder;
51 import com.liferay.portlet.imagegallery.model.IGImage;
52 import com.liferay.portlet.imagegallery.service.IGFolderLocalServiceUtil;
53 import com.liferay.portlet.imagegallery.service.IGImageLocalServiceUtil;
54 import com.liferay.portlet.journal.NoSuchArticleImageException;
55 import com.liferay.portlet.journal.model.JournalArticle;
56 import com.liferay.portlet.journal.model.JournalArticleImage;
57 import com.liferay.portlet.journal.model.JournalArticleResource;
58 import com.liferay.portlet.journal.model.JournalContentSearch;
59 import com.liferay.portlet.journal.model.JournalFeed;
60 import com.liferay.portlet.journal.model.JournalStructure;
61 import com.liferay.portlet.journal.model.JournalTemplate;
62 import com.liferay.portlet.journal.model.impl.JournalArticleImpl;
63 import com.liferay.portlet.journal.service.JournalArticleImageLocalServiceUtil;
64 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
65 import com.liferay.portlet.journal.service.JournalArticleResourceLocalServiceUtil;
66 import com.liferay.portlet.journal.service.JournalFeedLocalServiceUtil;
67 import com.liferay.portlet.journal.service.JournalStructureLocalServiceUtil;
68 import com.liferay.portlet.journal.service.JournalTemplateLocalServiceUtil;
69 import com.liferay.portlet.journal.service.persistence.JournalContentSearchUtil;
70 import com.liferay.portlet.softwarecatalog.NoSuchProductScreenshotException;
71 import com.liferay.portlet.softwarecatalog.service.SCProductScreenshotLocalServiceUtil;
72 import com.liferay.util.servlet.ServletResponseUtil;
73
74 import java.util.ArrayList;
75 import java.util.Collections;
76 import java.util.Date;
77 import java.util.List;
78 import java.util.Map;
79
80 import javax.servlet.http.HttpServletRequest;
81 import javax.servlet.http.HttpServletResponse;
82
83 import org.apache.struts.action.Action;
84 import org.apache.struts.action.ActionForm;
85 import org.apache.struts.action.ActionForward;
86 import org.apache.struts.action.ActionMapping;
87
88
93 public class ExportAction extends Action {
94
95 public static final String COMPANY_ID = "liferay.com";
96
97 public static final long DEFAULT_GROUP_ID = 14;
98
99 public static final long DEFAULT_USER_ID = 2;
100
101 public static final String DEFAULT_USER_NAME = "Joe Bloggs";
102
103 public ActionForward execute(
104 ActionMapping mapping, ActionForm form, HttpServletRequest request,
105 HttpServletResponse response)
106 throws Exception {
107
108 try {
109 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
110 WebKeys.THEME_DISPLAY);
111
112 PermissionChecker permissionChecker =
113 themeDisplay.getPermissionChecker();
114
115 if (permissionChecker.isOmniadmin()) {
116 long groupId = ParamUtil.getLong(
117 request, "groupId", DEFAULT_GROUP_ID);
118
119 _primaryKeys.clear();
120 _primaryKeyCount = 1500;
121
122 ZipWriter zipWriter = ZipWriterFactoryUtil.getZipWriter();
123
124 List<JournalContentSearch> journalContentSearches =
125 new ArrayList<JournalContentSearch>();
126
127 insertDataImage(groupId, zipWriter);
128 insertDataCMSLayout(groupId, zipWriter, journalContentSearches);
129 insertDataCMSContent(
130 groupId, zipWriter, journalContentSearches);
131
132 String fileName = "journal.zip";
133
134 ServletResponseUtil.sendFile(
135 response, fileName, zipWriter.finish());
136 }
137
138 return null;
139 }
140 catch (Exception e) {
141 PortalUtil.sendError(e, request, response);
142
143 return null;
144 }
145 }
146
147 protected void addColumn(StringBuilder sb, boolean value) {
148
150 if (value) {
151 sb.append("TRUE");
152 }
153 else {
154 sb.append("FALSE");
155 }
156
157 sb.append(", ");
159 }
160
161 protected void addColumn(StringBuilder sb, double value) {
162 sb.append(value);
163 sb.append(", ");
164 }
165
166 protected void addColumn(StringBuilder sb, float value) {
167 sb.append(value);
168 sb.append(", ");
169 }
170
171 protected void addColumn(StringBuilder sb, int value) {
172 sb.append(value);
173 sb.append(", ");
174 }
175
176 protected void addColumn(StringBuilder sb, long value) {
177 sb.append(value);
178 sb.append(", ");
179 }
180
181 protected void addColumn(StringBuilder sb, short value) {
182 sb.append(value);
183 sb.append(", ");
184 }
185
186 protected void addColumn(StringBuilder sb, Date value) {
187 addColumn(sb, value, true);
188 }
189
190 protected void addColumn(StringBuilder sb, Date value, boolean current) {
191 if (current) {
192 sb.append("CURRENT_TIMESTAMP, ");
193 }
194 else {
195 sb.append("SPECIFIC_TIMESTAMP_");
196 sb.append(Time.getSimpleDate(value, "yyyyMMddHHmmss"));
197 sb.append(", ");
198 }
199 }
200
201 protected void addColumn(StringBuilder sb, String value) {
202 addColumn(sb, value, true);
203 }
204
205 protected void addColumn(StringBuilder sb, String value, boolean format) {
206 if (format) {
207 value = StringUtil.replace(
208 value,
209 new String[] {"\\", "'", "\"", "\n", "\r"},
210 new String[] {"\\\\", "\\'", "\\\"", "\\n", "\\r"});
211 }
212
213 value = GetterUtil.getString(value);
214
215 sb.append("'");
216 sb.append(value);
217 sb.append("', ");
218 }
219
220 protected void addPKColumn(StringBuilder sb, long value) {
221 sb.append(getNewPrimaryKey(value));
222 sb.append(", ");
223 }
224
225 protected void addPKColumn(StringBuilder sb, String value) {
226 sb.append("'");
227 sb.append(getNewPrimaryKey(value));
228 sb.append("', ");
229 }
230
231 protected String getNewPrimaryKey(String pk) {
232 if (Validator.isNumber(pk)) {
233 long pkLong = GetterUtil.getLong(pk);
234
235 return String.valueOf(getNewPrimaryKey(pkLong));
236 }
237 else {
238 return pk;
239 }
240 }
241
242 protected long getNewPrimaryKey(long pk) {
243 Long newPk = (Long)_primaryKeys.get(pk);
244
245 if (newPk == null) {
246 newPk = new Long(_primaryKeyCount);
247
248 _primaryKeyCount++;
249
250 _primaryKeys.put(pk, newPk);
251 }
252
253 return newPk.longValue();
254 }
255
256 protected void insertDataCMSContent(
257 long groupId, ZipWriter zipWriter,
258 List<JournalContentSearch> journalContentSearches)
259 throws Exception {
260
261 StringBuilder sb = new StringBuilder();
262
263 List<IGImage> igImages = new ArrayList<IGImage>();
264
265 List<IGFolder> igFolders = IGFolderLocalServiceUtil.getFolders(
266 groupId);
267
268 for (IGFolder folder : igFolders) {
269 sb.append("insert into IGFolder (");
270 sb.append("folderId, groupId, companyId, userId, createDate, ");
271 sb.append("modifiedDate, parentFolderId, name");
272 sb.append(") values (");
273 addPKColumn(sb, folder.getFolderId());
274 addColumn(sb, folder.getGroupId());
275 addColumn(sb, folder.getCompanyId());
276 addColumn(sb, DEFAULT_USER_ID);
278 addColumn(sb, folder.getCreateDate());
279 addColumn(sb, folder.getModifiedDate());
280 addColumn(sb, folder.getParentFolderId());
281 addColumn(sb, folder.getName());
282 removeTrailingComma(sb);
283 sb.append(");\n");
284
285 igImages.addAll(
286 IGImageLocalServiceUtil.getImages(folder.getFolderId()));
287 }
288
289 sb.append("\n");
290
291 Collections.sort(igImages);
292
293 for (IGImage image : igImages) {
294 sb.append("insert into IGImage (");
295 sb.append("imageId, companyId, userId, createDate, modifiedDate, ");
296 sb.append("folderId, description, smallImageId, largeImageId");
297 sb.append(") values (");
298 addPKColumn(sb, image.getImageId());
299 addColumn(sb, image.getCompanyId());
300 addColumn(sb, DEFAULT_USER_ID);
302 addColumn(sb, image.getCreateDate());
303 addColumn(sb, image.getModifiedDate());
304 addPKColumn(sb, image.getFolderId());
305 addColumn(sb, image.getDescription());
306 addPKColumn(sb, image.getSmallImageId());
307 addPKColumn(sb, image.getLargeImageId());
308 removeTrailingComma(sb);
309 sb.append(");\n");
310 }
311
312 sb.append("\n");
313
314 List<JournalArticle> articles =
315 JournalArticleLocalServiceUtil.getArticles(groupId);
316
317 for (JournalArticle article : articles) {
318 if (article.isApproved() &&
319 JournalArticleLocalServiceUtil.isLatestVersion(
320 article.getGroupId(), article.getArticleId(),
321 article.getVersion())) {
322
323 sb.append("insert into JournalArticle (");
324 sb.append("id_, resourcePrimKey, groupId, companyId, userId, ");
325 sb.append("userName, createDate, modifiedDate, articleId, ");
326 sb.append("version, title, description, content, type_, ");
327 sb.append("structureId, templateId, displayDate, approved, ");
328 sb.append("approvedByUserId, approvedByUserName, expired, ");
329 sb.append("indexable");
330 sb.append(") values (");
331 addPKColumn(sb, article.getId());
332 addPKColumn(sb, article.getResourcePrimKey());
333 addColumn(sb, article.getGroupId());
334 addColumn(sb, article.getCompanyId());
335 addColumn(sb, DEFAULT_USER_ID);
338 addColumn(sb, DEFAULT_USER_NAME);
339 addColumn(sb, article.getCreateDate());
340 addColumn(sb, article.getModifiedDate());
341 addPKColumn(sb, article.getArticleId());
342 addColumn(sb, JournalArticleImpl.DEFAULT_VERSION);
343 addColumn(sb, article.getTitle());
344 addColumn(sb, article.getDescription());
345 addColumn(sb, replaceIds(article.getContent()));
346 addColumn(sb, article.getType());
347 addPKColumn(sb, article.getStructureId());
348 addPKColumn(sb, article.getTemplateId());
349 addColumn(sb, article.getDisplayDate(), false);
350 addColumn(sb, article.getApproved());
351 addColumn(sb, DEFAULT_USER_ID);
354 addColumn(sb, DEFAULT_USER_NAME);
355 addColumn(sb, article.getExpired());
357 addColumn(sb, article.getIndexable());
360 removeTrailingComma(sb);
361 sb.append(");\n");
362 }
363 }
364
365 sb.append("\n");
366
367 List<JournalArticleImage> articleImages =
368 JournalArticleImageLocalServiceUtil.getArticleImages(groupId);
369
370 for (JournalArticleImage articleImage : articleImages) {
371 sb.append("insert into JournalArticleImage (");
372 sb.append("articleImageId, groupId, articleId, version, elName, ");
373 sb.append("languageId, tempImage");
374 sb.append(") values (");
375 addPKColumn(sb, articleImage.getArticleImageId());
376 addColumn(sb, articleImage.getGroupId());
377 addPKColumn(sb, articleImage.getArticleId());
378 addColumn(sb, articleImage.getVersion());
379 addColumn(sb, articleImage.getElName());
380 addColumn(sb, articleImage.getLanguageId());
381 addColumn(sb, articleImage.getTempImage());
382 removeTrailingComma(sb);
383 sb.append(");\n");
384 }
385
386 sb.append("\n");
387
388 List<JournalArticleResource> articleResources =
389 JournalArticleResourceLocalServiceUtil.getArticleResources(groupId);
390
391 for (JournalArticleResource articleResource : articleResources) {
392 sb.append("insert into JournalArticleResource (");
393 sb.append("resourcePrimKey, groupId, articleId");
394 sb.append(") values (");
395 addPKColumn(sb, articleResource.getResourcePrimKey());
396 addColumn(sb, articleResource.getGroupId());
397 addPKColumn(sb, articleResource.getArticleId());
398 removeTrailingComma(sb);
399 sb.append(");\n");
400 }
401
402 sb.append("\n");
403
404 for (JournalContentSearch contentSearch : journalContentSearches) {
405 sb.append("insert into JournalContentSearch (");
406 sb.append("contentSearchId, groupId, companyId, privateLayout, ");
407 sb.append("layoutId, portletId, articleId");
408 sb.append(") values (");
409 addPKColumn(sb, contentSearch.getContentSearchId());
410 addColumn(sb, contentSearch.getGroupId());
411 addColumn(sb, contentSearch.getCompanyId());
412 addColumn(sb, contentSearch.isPrivateLayout());
413 addColumn(sb, contentSearch.getLayoutId());
414 addColumn(sb, contentSearch.getPortletId());
415 addPKColumn(sb, contentSearch.getArticleId());
416 removeTrailingComma(sb);
417 sb.append(");\n");
418 }
419
420 sb.append("\n");
421
422 List<JournalFeed> feeds = JournalFeedLocalServiceUtil.getFeeds(groupId);
423
424 for (JournalFeed feed : feeds) {
425 sb.append("insert into JournalFeed (");
426 sb.append("id_, groupId, companyId, userId, userName, ");
427 sb.append("createDate, modifiedDate, feedId, name, description, ");
428 sb.append("type_, structureId, templateId, rendererTemplateId, ");
429 sb.append("delta, orderByCol, orderByType, ");
430 sb.append("targetLayoutFriendlyUrl, targetPortletId, ");
431 sb.append("contentField, feedType, feedVersion");
432 sb.append(") values (");
433 addPKColumn(sb, feed.getId());
434 addColumn(sb, feed.getGroupId());
435 addColumn(sb, feed.getCompanyId());
436 addColumn(sb, DEFAULT_USER_ID);
439 addColumn(sb, DEFAULT_USER_NAME);
440 addColumn(sb, feed.getCreateDate());
441 addColumn(sb, feed.getModifiedDate());
442 addPKColumn(sb, feed.getFeedId());
443 addColumn(sb, feed.getName());
444 addColumn(sb, feed.getDescription());
445 addColumn(sb, feed.getType());
446 addPKColumn(sb, feed.getStructureId());
447 addPKColumn(sb, feed.getTemplateId());
448 addPKColumn(sb, feed.getRendererTemplateId());
449 addColumn(sb, feed.getDelta());
450 addColumn(sb, feed.getOrderByCol());
451 addColumn(sb, feed.getOrderByType());
452 addColumn(sb, feed.getTargetLayoutFriendlyUrl());
453 addColumn(sb, feed.getTargetPortletId());
454 addColumn(sb, feed.getContentField());
455 addColumn(sb, feed.getFeedType());
456 addColumn(sb, feed.getFeedVersion());
457 removeTrailingComma(sb);
458 sb.append(");\n");
459 }
460
461 sb.append("\n");
462
463 List<JournalStructure> structures =
464 JournalStructureLocalServiceUtil.getStructures(groupId);
465
466 for (JournalStructure structure : structures) {
467 sb.append("insert into JournalStructure (");
468 sb.append("id_, groupId, companyId, userId, userName, ");
469 sb.append("createDate, modifiedDate, structureId, name, ");
470 sb.append("description, xsd");
471 sb.append(") values (");
472 addPKColumn(sb, structure.getId());
473 addColumn(sb, structure.getGroupId());
474 addColumn(sb, structure.getCompanyId());
475 addColumn(sb, DEFAULT_USER_ID);
478 addColumn(sb, DEFAULT_USER_NAME);
479 addColumn(sb, structure.getCreateDate());
480 addColumn(sb, structure.getModifiedDate());
481 addPKColumn(sb, structure.getStructureId());
482 addColumn(sb, structure.getName());
483 addColumn(sb, structure.getDescription());
484 addColumn(sb, replaceIds(structure.getXsd()));
485 removeTrailingComma(sb);
486 sb.append(");\n");
487 }
488
489 sb.append("\n");
490
491 List<JournalTemplate> templates =
492 JournalTemplateLocalServiceUtil.getTemplates(groupId);
493
494 for (JournalTemplate template : templates) {
495 sb.append("insert into JournalTemplate (");
496 sb.append("id_, groupId, companyId, userId, userName, ");
497 sb.append("createDate, modifiedDate, templateId, structureId, ");
498 sb.append("name, description, xsl, langType, smallImage, ");
499 sb.append("smallImageId, smallImageURL");
500 sb.append(") values (");
501 addPKColumn(sb, template.getId());
502 addColumn(sb, template.getGroupId());
503 addColumn(sb, template.getCompanyId());
504 addColumn(sb, DEFAULT_USER_ID);
507 addColumn(sb, DEFAULT_USER_NAME);
508 addColumn(sb, template.getCreateDate());
509 addColumn(sb, template.getModifiedDate());
510 addPKColumn(sb, template.getTemplateId());
511 addPKColumn(sb, template.getStructureId());
512 addColumn(sb, template.getName());
513 addColumn(sb, template.getDescription());
514 addColumn(sb, replaceIds(template.getXsl()));
515 addColumn(sb, template.getLangType());
516 addColumn(sb, template.getSmallImage());
517 addPKColumn(sb, template.getSmallImageId());
518 addColumn(sb, template.getSmallImageURL());
519 removeTrailingComma(sb);
520 sb.append(");\n");
521 }
522
523 removeTrailingNewLine(sb);
524
525 zipWriter.addEntry("portal-data-cms-content.sql", sb);
526 }
527
528 protected void insertDataCMSLayout(
529 long groupId, ZipWriter zipWriter,
530 List<JournalContentSearch> journalContentSearches)
531 throws Exception {
532
533 StringBuilder sb = new StringBuilder();
534
535 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
536 groupId, false);
537
538 sb.append("update LayoutSet ");
539 sb.append("set themeId = 'liferayjedi_WAR_liferayjeditheme', ");
540 sb.append("pageCount = ");
541 sb.append(layouts.size());
542 sb.append(" where groupId = ");
543 sb.append(groupId);
544 sb.append(" and privateLayout = FALSE;\n\n");
545
546 Collections.sort(layouts, new LayoutComparator(true));
547
548 for (Layout layout : layouts) {
549 getNewPrimaryKey(layout.getPlid());
550 }
551
552 for (Layout layout : layouts) {
553 UnicodeProperties props = layout.getTypeSettingsProperties();
554
555 long linkToPlid = GetterUtil.getLong(
556 props.getProperty("linkToPlid"));
557
558 if (linkToPlid > 0) {
559 long newLinkToPlid = getNewPrimaryKey(linkToPlid);
560
561 props.setProperty("linkToPlid", String.valueOf(newLinkToPlid));
562 }
563
564 sb.append("insert into Layout (");
565 sb.append("plid, groupId, companyId, privateLayout, layoutId, ");
566 sb.append("parentLayoutId, name, title, type_, typeSettings, ");
567 sb.append("hidden_, friendlyURL, iconImage, iconImageId, ");
568 sb.append("css, priority");
569 sb.append(") values (");
570 addPKColumn(sb, layout.getPlid());
571 addColumn(sb, layout.getGroupId());
572 addColumn(sb, layout.getCompanyId());
573 addColumn(sb, layout.isPrivateLayout());
574 addColumn(sb, layout.getLayoutId());
575 addColumn(sb, layout.getParentLayoutId());
576 addColumn(sb, layout.getName());
577 addColumn(sb, layout.getTitle());
578 addColumn(sb, layout.getType());
579 addColumn(sb, layout.getTypeSettings());
580 addColumn(sb, layout.isHidden());
581 addColumn(sb, layout.getFriendlyURL());
582 addColumn(sb, layout.isIconImage());
583 addColumn(sb, layout.getIconImageId());
584 addColumn(sb, layout.getCss());
585 addColumn(sb, layout.getPriority());
586 removeTrailingComma(sb);
587 sb.append(");\n");
588 }
589
590 sb.append("\n");
591
592 for (Layout layout : layouts) {
593 LayoutTypePortlet layoutType =
594 (LayoutTypePortlet)layout.getLayoutType();
595
596 List<String> portletIds = layoutType.getPortletIds();
597
598 Collections.sort(portletIds);
599
600 for (int i = 0; i < portletIds.size(); i++) {
601 String portletId = portletIds.get(i);
602
603 try {
604 PortletPreferences portletPreferences =
605 PortletPreferencesLocalServiceUtil.
606 getPortletPreferences(
607 PortletKeys.PREFS_OWNER_ID_DEFAULT,
608 PortletKeys.PREFS_OWNER_TYPE_LAYOUT,
609 layout.getPlid(), portletId);
610
611 String prefsXml = portletPreferences.getPreferences();
612
613 PortletPreferencesImpl prefs = (PortletPreferencesImpl)
614 PortletPreferencesSerializer.fromDefaultXML(
615 portletPreferences.getPreferences());
616
617 String articleId =
618 prefs.getValue("article-id", StringPool.BLANK);
619
620 articleId = articleId.toUpperCase();
621
622 if (Validator.isNotNull(articleId)) {
623 if (!JournalArticleLocalServiceUtil.hasArticle(
624 layout.getGroupId(), articleId)) {
625
626 continue;
627 }
628
629
632 prefs.setValue(
633 "article-id", getNewPrimaryKey(articleId));
634
635 prefsXml = PortletPreferencesSerializer.toXML(prefs);
636
637
639 long contentSearchId =
640 CounterLocalServiceUtil.increment();
641
642 JournalContentSearch journalContentSearch =
643 JournalContentSearchUtil.create(contentSearchId);
644
645 journalContentSearch.setContentSearchId(
646 contentSearchId);
647 journalContentSearch.setCompanyId(
648 layout.getCompanyId());
649 journalContentSearch.setGroupId(layout.getGroupId());
650 journalContentSearch.setPrivateLayout(
651 layout.isPrivateLayout());
652 journalContentSearch.setPortletId(portletId);
653 journalContentSearch.setLayoutId(layout.getLayoutId());
654 journalContentSearch.setPortletId(portletId);
655 journalContentSearch.setArticleId(
656 getNewPrimaryKey(articleId));
657
658 journalContentSearches.add(journalContentSearch);
659 }
660
661 sb.append("insert into PortletPreferences (");
662 sb.append("portletPreferencesId, ownerId, ownerType, ");
663 sb.append("plid, portletId, preferences");
664 sb.append(") values (");
665 addPKColumn(
666 sb, portletPreferences.getPortletPreferencesId());
667 addColumn(sb, portletPreferences.getOwnerId());
668 addColumn(sb, portletPreferences.getOwnerType());
669 addPKColumn(sb, portletPreferences.getPlid());
670 addColumn(sb, portletId);
671 addColumn(sb, prefsXml);
672 removeTrailingComma(sb);
673 sb.append(");\n");
674 }
675 catch (NoSuchPortletPreferencesException nsppe) {
676 _log.warn(nsppe.getMessage());
677 }
678 }
679
680 sb.append("\n");
681 }
682
683 removeTrailingNewLine(sb);
684 removeTrailingNewLine(sb);
685
686 zipWriter.addEntry("portal-data-cms-layout.sql", sb);
687 }
688
689 protected void insertDataImage(long groupId, ZipWriter zipWriter)
690 throws Exception {
691
692 StringBuilder sm1 = new StringBuilder();
693 StringBuilder sm2 = new StringBuilder();
694
695 List<Image> images = ImageLocalServiceUtil.getImagesBySize(70000);
696
697 for (Image image : images) {
698 long imageId = image.getImageId();
699
700 try {
701 UserLocalServiceUtil.getUserByPortraitId(imageId);
702
703 continue;
704 }
705 catch (NoSuchUserException nsue) {
706 }
707
708 try {
709 IGImage igImage =
710 IGImageLocalServiceUtil.getImageBySmallImageId(imageId);
711
712 IGFolder igFolder = igImage.getFolder();
713
714 if (igFolder.getGroupId() != groupId) {
715 continue;
716 }
717 }
718 catch (NoSuchImageException nsie) {
719 }
720
721 try {
722 IGImage igImage =
723 IGImageLocalServiceUtil.getImageByLargeImageId(imageId);
724
725 IGFolder igFolder = igImage.getFolder();
726
727 if (igFolder.getGroupId() != groupId) {
728 continue;
729 }
730 }
731 catch (NoSuchImageException nsie) {
732 }
733
734 try {
735 JournalArticleImage journalArticleImage =
736 JournalArticleImageLocalServiceUtil.getArticleImage(
737 imageId);
738
739 if (journalArticleImage.getGroupId() != groupId) {
740 continue;
741 }
742 }
743 catch (NoSuchArticleImageException nsaie) {
744 }
745
746 try {
747 SCProductScreenshotLocalServiceUtil.
748 getProductScreenshotByFullImageId(imageId);
749
750 continue;
751 }
752 catch (NoSuchProductScreenshotException nspse) {
753 }
754
755 try {
756 SCProductScreenshotLocalServiceUtil.
757 getProductScreenshotByThumbnailId(imageId);
758
759 continue;
760 }
761 catch (NoSuchProductScreenshotException nspse) {
762 }
763
764 sm1.append("insert into Image (");
765 sm1.append("imageId, modifiedDate, text_, type_, height, width, ");
766 sm1.append("size_");
767 sm1.append(") values (");
768 addPKColumn(sm1, imageId);
769 addColumn(sm1, image.getModifiedDate());
770 addColumn(sm1, image.getText(), false);
771 addColumn(sm1, image.getType());
772 addColumn(sm1, image.getHeight());
773 addColumn(sm1, image.getWidth());
774 addColumn(sm1, image.getSize());
775 removeTrailingComma(sm1);
776 sm1.append(");\n");
777
778 sm2.append("<img alt=\"");
779 sm2.append(imageId);
780 sm2.append("\" src=\"http://localhost:8080/image?img_id=");
781 sm2.append(imageId);
782 sm2.append("\" /><br />\n");
783 }
784
785 removeTrailingNewLine(sm1);
786
787 zipWriter.addEntry("portal-data-image.sql", sm1);
788 zipWriter.addEntry("portal-data-image.html", sm2);
789 }
790
791 protected void removeTrailingComma(StringBuilder sb) {
792 sb.delete(sb.length() - 2, sb.length());
793 }
794
795 protected void removeTrailingNewLine(StringBuilder sb) {
796 if (sb.length() > 0) {
797 sb.delete(sb.length() - 1, sb.length());
798 }
799 }
800
801 protected String replaceIds(String content) throws Exception {
802 content = IdReplacer.replaceLongIds(content, "?img_id=", _valueMapper);
803
804 return content;
805 }
806
807 private static Log _log = LogFactoryUtil.getLog(ExportAction.class);
808
809 private MemoryValueMapper _valueMapper = new MemoryValueMapper();
810 private Map<Object, Object> _primaryKeys = _valueMapper.getMap();
811 private int _primaryKeyCount;
812
813 }