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