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