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