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.StringMaker;
31 import com.liferay.portal.kernel.util.StringPool;
32 import com.liferay.portal.kernel.util.StringUtil;
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.struts.ActionConstants;
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.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.JournalStructure;
64 import com.liferay.portlet.journal.model.JournalTemplate;
65 import com.liferay.portlet.journal.model.impl.JournalArticleImpl;
66 import com.liferay.portlet.journal.service.JournalArticleImageLocalServiceUtil;
67 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
68 import com.liferay.portlet.journal.service.JournalArticleResourceLocalServiceUtil;
69 import com.liferay.portlet.journal.service.JournalStructureLocalServiceUtil;
70 import com.liferay.portlet.journal.service.JournalTemplateLocalServiceUtil;
71 import com.liferay.portlet.journal.service.persistence.JournalContentSearchUtil;
72 import com.liferay.portlet.softwarecatalog.NoSuchProductScreenshotException;
73 import com.liferay.portlet.softwarecatalog.service.SCProductScreenshotLocalServiceUtil;
74 import com.liferay.util.Time;
75 import com.liferay.util.servlet.ServletResponseUtil;
76
77 import java.util.ArrayList;
78 import java.util.Collections;
79 import java.util.Date;
80 import java.util.List;
81 import java.util.Map;
82 import java.util.Properties;
83
84 import javax.servlet.http.HttpServletRequest;
85 import javax.servlet.http.HttpServletResponse;
86 import javax.servlet.jsp.PageContext;
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 req,
113 HttpServletResponse res)
114 throws Exception {
115
116 try {
117 ThemeDisplay themeDisplay =
118 (ThemeDisplay)req.getAttribute(WebKeys.THEME_DISPLAY);
119
120 PermissionChecker permissionChecker =
121 themeDisplay.getPermissionChecker();
122
123 if (permissionChecker.isOmniadmin()) {
124 long groupId = ParamUtil.getLong(
125 req, "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(res, fileName, zipWriter.finish());
143 }
144
145 return null;
146 }
147 catch (Exception e) {
148 req.setAttribute(PageContext.EXCEPTION, e);
149
150 return mapping.findForward(ActionConstants.COMMON_ERROR);
151 }
152 }
153
154 protected void addColumn(StringMaker sm, boolean value) {
155
157 if (value) {
158 sm.append("TRUE");
159 }
160 else {
161 sm.append("FALSE");
162 }
163
164 sm.append(", ");
166 }
167
168 protected void addColumn(StringMaker sm, double value) {
169 sm.append(value);
170 sm.append(", ");
171 }
172
173 protected void addColumn(StringMaker sm, float value) {
174 sm.append(value);
175 sm.append(", ");
176 }
177
178 protected void addColumn(StringMaker sm, int value) {
179 sm.append(value);
180 sm.append(", ");
181 }
182
183 protected void addColumn(StringMaker sm, long value) {
184 sm.append(value);
185 sm.append(", ");
186 }
187
188 protected void addColumn(StringMaker sm, short value) {
189 sm.append(value);
190 sm.append(", ");
191 }
192
193 protected void addColumn(StringMaker sm, Date value) {
194 addColumn(sm, value, true);
195 }
196
197 protected void addColumn(StringMaker sm, Date value, boolean current) {
198 if (current) {
199 sm.append("CURRENT_TIMESTAMP, ");
200 }
201 else {
202 sm.append("SPECIFIC_TIMESTAMP_");
203 sm.append(Time.getSimpleDate(value, "yyyyMMddHHmmss"));
204 sm.append(", ");
205 }
206 }
207
208 protected void addColumn(StringMaker sm, String value) {
209 addColumn(sm, value, true);
210 }
211
212 protected void addColumn(StringMaker sm, 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 sm.append("'");
223 sm.append(value);
224 sm.append("', ");
225 }
226
227 protected void addPKColumn(StringMaker sm, long value) {
228 sm.append(getNewPrimaryKey(value));
229 sm.append(", ");
230 }
231
232 protected void addPKColumn(StringMaker sm, String value) {
233 sm.append("'");
234 sm.append(getNewPrimaryKey(value));
235 sm.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 = _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 StringMaker sm = new StringMaker();
269
270 List<IGImage> igImages = new ArrayList<IGImage>();
271
272 List<IGFolder> igFolders = IGFolderLocalServiceUtil.getFolders(
273 groupId);
274
275 for (IGFolder folder : igFolders) {
276 sm.append("insert into IGFolder (");
277 sm.append("folderId, groupId, companyId, userId, createDate, ");
278 sm.append("modifiedDate, parentFolderId, name");
279 sm.append(") values (");
280 addPKColumn(sm, folder.getFolderId());
281 addColumn(sm, folder.getGroupId());
282 addColumn(sm, folder.getCompanyId());
283 addColumn(sm, DEFAULT_USER_ID);
285 addColumn(sm, folder.getCreateDate());
286 addColumn(sm, folder.getModifiedDate());
287 addColumn(sm, folder.getParentFolderId());
288 addColumn(sm, folder.getName());
289 removeTrailingComma(sm);
290 sm.append(");\n");
291
292 igImages.addAll(
293 IGImageLocalServiceUtil.getImages(folder.getFolderId()));
294 }
295
296 sm.append("\n");
297
298 Collections.sort(igImages);
299
300 for (IGImage image : igImages) {
301 sm.append("insert into IGImage (");
302 sm.append("imageId, companyId, userId, createDate, modifiedDate, ");
303 sm.append("folderId, description, smallImageId, largeImageId");
304 sm.append(") values (");
305 addPKColumn(sm, image.getImageId());
306 addColumn(sm, image.getCompanyId());
307 addColumn(sm, DEFAULT_USER_ID);
309 addColumn(sm, image.getCreateDate());
310 addColumn(sm, image.getModifiedDate());
311 addPKColumn(sm, image.getFolderId());
312 addColumn(sm, image.getDescription());
313 addPKColumn(sm, image.getSmallImageId());
314 addPKColumn(sm, image.getLargeImageId());
315 removeTrailingComma(sm);
316 sm.append(");\n");
317 }
318
319 sm.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 sm.append("insert into JournalArticle (");
331 sm.append("id_, resourcePrimKey, groupId, companyId, userId, ");
332 sm.append("userName, createDate, modifiedDate, articleId, ");
333 sm.append("version, title, description, content, type_, ");
334 sm.append("structureId, templateId, displayDate, approved, ");
335 sm.append("approvedByUserId, approvedByUserName, expired, ");
336 sm.append("indexable");
337 sm.append(") values (");
338 addPKColumn(sm, article.getId());
339 addPKColumn(sm, article.getResourcePrimKey());
340 addColumn(sm, article.getGroupId());
341 addColumn(sm, article.getCompanyId());
342 addColumn(sm, DEFAULT_USER_ID);
345 addColumn(sm, DEFAULT_USER_NAME);
346 addColumn(sm, article.getCreateDate());
347 addColumn(sm, article.getModifiedDate());
348 addPKColumn(sm, article.getArticleId());
349 addColumn(sm, JournalArticleImpl.DEFAULT_VERSION);
350 addColumn(sm, article.getTitle());
351 addColumn(sm, article.getDescription());
352 addColumn(sm, replaceIds(article.getContent()));
353 addColumn(sm, article.getType());
354 addPKColumn(sm, article.getStructureId());
355 addPKColumn(sm, article.getTemplateId());
356 addColumn(sm, article.getDisplayDate(), false);
357 addColumn(sm, article.getApproved());
358 addColumn(sm, DEFAULT_USER_ID);
361 addColumn(sm, DEFAULT_USER_NAME);
362 addColumn(sm, article.getExpired());
364 addColumn(sm, article.getIndexable());
367 removeTrailingComma(sm);
368 sm.append(");\n");
369 }
370 }
371
372 sm.append("\n");
373
374 List<JournalArticleImage> articleImages =
375 JournalArticleImageLocalServiceUtil.getArticleImages(groupId);
376
377 for (JournalArticleImage articleImage : articleImages) {
378 sm.append("insert into JournalArticleImage (");
379 sm.append("articleImageId, groupId, articleId, version, elName, ");
380 sm.append("languageId, tempImage");
381 sm.append(") values (");
382 addPKColumn(sm, articleImage.getArticleImageId());
383 addColumn(sm, articleImage.getGroupId());
384 addPKColumn(sm, articleImage.getArticleId());
385 addColumn(sm, articleImage.getVersion());
386 addColumn(sm, articleImage.getElName());
387 addColumn(sm, articleImage.getLanguageId());
388 addColumn(sm, articleImage.getTempImage());
389 removeTrailingComma(sm);
390 sm.append(");\n");
391 }
392
393 sm.append("\n");
394
395 List<JournalArticleResource> articleResources =
396 JournalArticleResourceLocalServiceUtil.getArticleResources(groupId);
397
398 for (JournalArticleResource articleResource : articleResources) {
399 sm.append("insert into JournalArticleResource (");
400 sm.append("resourcePrimKey, groupId, articleId");
401 sm.append(") values (");
402 addPKColumn(sm, articleResource.getResourcePrimKey());
403 addColumn(sm, articleResource.getGroupId());
404 addPKColumn(sm, articleResource.getArticleId());
405 removeTrailingComma(sm);
406 sm.append(");\n");
407 }
408
409 sm.append("\n");
410
411 for (JournalContentSearch contentSearch : journalContentSearches) {
412 sm.append("insert into JournalContentSearch (");
413 sm.append("contentSearchId, groupId, companyId, privateLayout, ");
414 sm.append("layoutId, portletId, articleId");
415 sm.append(") values (");
416 addPKColumn(sm, contentSearch.getContentSearchId());
417 addColumn(sm, contentSearch.getGroupId());
418 addColumn(sm, contentSearch.getCompanyId());
419 addColumn(sm, contentSearch.isPrivateLayout());
420 addColumn(sm, contentSearch.getLayoutId());
421 addColumn(sm, contentSearch.getPortletId());
422 addPKColumn(sm, contentSearch.getArticleId());
423 removeTrailingComma(sm);
424 sm.append(");\n");
425 }
426
427 sm.append("\n");
428
429 List<JournalStructure> structures =
430 JournalStructureLocalServiceUtil.getStructures(groupId);
431
432 for (JournalStructure structure : structures) {
433 sm.append("insert into JournalStructure (");
434 sm.append("id_, groupId, companyId, userId, userName, ");
435 sm.append("createDate, modifiedDate, structureId, name, ");
436 sm.append("description, xsd");
437 sm.append(") values (");
438 addPKColumn(sm, structure.getId());
439 addColumn(sm, structure.getGroupId());
440 addColumn(sm, structure.getCompanyId());
441 addColumn(sm, DEFAULT_USER_ID);
444 addColumn(sm, DEFAULT_USER_NAME);
445 addColumn(sm, structure.getCreateDate());
446 addColumn(sm, structure.getModifiedDate());
447 addPKColumn(sm, structure.getStructureId());
448 addColumn(sm, structure.getName());
449 addColumn(sm, structure.getDescription());
450 addColumn(sm, replaceIds(structure.getXsd()));
451 removeTrailingComma(sm);
452 sm.append(");\n");
453 }
454
455 sm.append("\n");
456
457 List<JournalTemplate> templates =
458 JournalTemplateLocalServiceUtil.getTemplates(groupId);
459
460 for (JournalTemplate template : templates) {
461 sm.append("insert into JournalTemplate (");
462 sm.append("id_, groupId, companyId, userId, userName, ");
463 sm.append("createDate, modifiedDate, templateId, structureId, ");
464 sm.append("name, description, xsl, langType, smallImage, ");
465 sm.append("smallImageId, smallImageURL");
466 sm.append(") values (");
467 addPKColumn(sm, template.getId());
468 addColumn(sm, template.getGroupId());
469 addColumn(sm, template.getCompanyId());
470 addColumn(sm, DEFAULT_USER_ID);
473 addColumn(sm, DEFAULT_USER_NAME);
474 addColumn(sm, template.getCreateDate());
475 addColumn(sm, template.getModifiedDate());
476 addPKColumn(sm, template.getTemplateId());
477 addPKColumn(sm, template.getStructureId());
478 addColumn(sm, template.getName());
479 addColumn(sm, template.getDescription());
480 addColumn(sm, replaceIds(template.getXsl()));
481 addColumn(sm, template.getLangType());
482 addColumn(sm, template.getSmallImage());
483 addPKColumn(sm, template.getSmallImageId());
484 addColumn(sm, template.getSmallImageURL());
485 removeTrailingComma(sm);
486 sm.append(");\n");
487 }
488
489 removeTrailingNewLine(sm);
490
491 zipWriter.addEntry("portal-data-cms-content.sql", sm);
492 }
493
494 protected void insertDataCMSLayout(
495 long groupId, ZipWriter zipWriter,
496 List<JournalContentSearch> journalContentSearches)
497 throws Exception {
498
499 StringMaker sm = new StringMaker();
500
501 List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
502 groupId, false);
503
504 sm.append("update LayoutSet ");
505 sm.append("set themeId = 'liferayjedi_WAR_liferayjeditheme', ");
506 sm.append("pageCount = ");
507 sm.append(layouts.size());
508 sm.append(" where groupId = ");
509 sm.append(groupId);
510 sm.append(" and privateLayout = FALSE;\n\n");
511
512 Collections.sort(layouts, new LayoutComparator(true));
513
514 for (Layout layout : layouts) {
515 getNewPrimaryKey(layout.getPlid());
516 }
517
518 for (Layout layout : layouts) {
519 Properties props = layout.getTypeSettingsProperties();
520
521 long linkToPlid = GetterUtil.getLong(
522 props.getProperty("linkToPlid"));
523
524 if (linkToPlid > 0) {
525 long newLinkToPlid = getNewPrimaryKey(linkToPlid);
526
527 props.setProperty("linkToPlid", String.valueOf(newLinkToPlid));
528 }
529
530 sm.append("insert into Layout (");
531 sm.append("plid, groupId, companyId, privateLayout, layoutId, ");
532 sm.append("parentLayoutId, name, title, type_, typeSettings, ");
533 sm.append("hidden_, friendlyURL, iconImage, iconImageId, ");
534 sm.append("css, priority");
536 sm.append(") values (");
537 addPKColumn(sm, layout.getPlid());
538 addColumn(sm, layout.getGroupId());
539 addColumn(sm, layout.getCompanyId());
540 addColumn(sm, layout.isPrivateLayout());
541 addColumn(sm, layout.getLayoutId());
542 addColumn(sm, layout.getParentLayoutId());
543 addColumn(sm, layout.getName());
544 addColumn(sm, layout.getTitle());
545 addColumn(sm, layout.getType());
546 addColumn(sm, layout.getTypeSettings());
547 addColumn(sm, layout.isHidden());
548 addColumn(sm, layout.getFriendlyURL());
549 addColumn(sm, layout.isIconImage());
550 addColumn(sm, layout.getIconImageId());
551 addColumn(sm, layout.getCss());
556 addColumn(sm, layout.getPriority());
557 removeTrailingComma(sm);
558 sm.append(");\n");
559 }
560
561 sm.append("\n");
562
563 for (Layout layout : layouts) {
564 LayoutTypePortlet layoutType =
565 (LayoutTypePortlet)layout.getLayoutType();
566
567 List<String> portletIds = layoutType.getPortletIds();
568
569 Collections.sort(portletIds);
570
571 for (int i = 0; i < portletIds.size(); i++) {
572 String portletId = portletIds.get(i);
573
574 try {
575 PortletPreferences portletPreferences =
576 PortletPreferencesLocalServiceUtil.
577 getPortletPreferences(
578 PortletKeys.PREFS_OWNER_ID_DEFAULT,
579 PortletKeys.PREFS_OWNER_TYPE_LAYOUT,
580 layout.getPlid(), portletId);
581
582 String prefsXml = portletPreferences.getPreferences();
583
584 PortletPreferencesImpl prefs = (PortletPreferencesImpl)
585 PortletPreferencesSerializer.fromDefaultXML(
586 portletPreferences.getPreferences());
587
588 String articleId =
589 prefs.getValue("article-id", StringPool.BLANK);
590
591 articleId = articleId.toUpperCase();
592
593 if (Validator.isNotNull(articleId)) {
594 if (!JournalArticleLocalServiceUtil.hasArticle(
595 layout.getGroupId(), articleId)) {
596
597 continue;
598 }
599
600
603 prefs.setValue(
604 "article-id", getNewPrimaryKey(articleId));
605
606 prefsXml = PortletPreferencesSerializer.toXML(prefs);
607
608
610 long contentSearchId =
611 CounterLocalServiceUtil.increment();
612
613 JournalContentSearch journalContentSearch =
614 JournalContentSearchUtil.create(contentSearchId);
615
616 journalContentSearch.setContentSearchId(
617 contentSearchId);
618 journalContentSearch.setCompanyId(
619 layout.getCompanyId());
620 journalContentSearch.setGroupId(layout.getGroupId());
621 journalContentSearch.setPrivateLayout(
622 layout.isPrivateLayout());
623 journalContentSearch.setPortletId(portletId);
624 journalContentSearch.setLayoutId(layout.getLayoutId());
625 journalContentSearch.setPortletId(portletId);
626 journalContentSearch.setArticleId(
627 getNewPrimaryKey(articleId));
628
629 journalContentSearches.add(journalContentSearch);
630 }
631
632 sm.append("insert into PortletPreferences (");
633 sm.append("portletPreferencesId, ownerId, ownerType, ");
634 sm.append("plid, portletId, preferences");
635 sm.append(") values (");
636 addPKColumn(
637 sm, portletPreferences.getPortletPreferencesId());
638 addColumn(sm, portletPreferences.getOwnerId());
639 addColumn(sm, portletPreferences.getOwnerType());
640 addPKColumn(sm, portletPreferences.getPlid());
641 addColumn(sm, portletId);
642 addColumn(sm, prefsXml);
643 removeTrailingComma(sm);
644 sm.append(");\n");
645 }
646 catch (NoSuchPortletPreferencesException nsppe) {
647 _log.warn(nsppe.getMessage());
648 }
649 }
650
651 sm.append("\n");
652 }
653
654 removeTrailingNewLine(sm);
655 removeTrailingNewLine(sm);
656
657 zipWriter.addEntry("portal-data-cms-layout.sql", sm);
658 }
659
660 protected void insertDataImage(long groupId, ZipWriter zipWriter)
661 throws Exception {
662
663 StringMaker sm1 = new StringMaker();
664 StringMaker sm2 = new StringMaker();
665
666 List<Image> images = ImageLocalServiceUtil.getImagesBySize(70000);
667
668 for (Image image : images) {
669 long imageId = image.getImageId();
670
671 try {
672 UserLocalServiceUtil.getUserByPortraitId(imageId);
673
674 continue;
675 }
676 catch (NoSuchUserException nsue) {
677 }
678
679 try {
680 IGImage igImage =
681 IGImageLocalServiceUtil.getImageBySmallImageId(imageId);
682
683 IGFolder igFolder = igImage.getFolder();
684
685 if (igFolder.getGroupId() != groupId) {
686 continue;
687 }
688 }
689 catch (NoSuchImageException nsie) {
690 }
691
692 try {
693 IGImage igImage =
694 IGImageLocalServiceUtil.getImageByLargeImageId(imageId);
695
696 IGFolder igFolder = igImage.getFolder();
697
698 if (igFolder.getGroupId() != groupId) {
699 continue;
700 }
701 }
702 catch (NoSuchImageException nsie) {
703 }
704
705 try {
706 JournalArticleImage journalArticleImage =
707 JournalArticleImageLocalServiceUtil.getArticleImage(
708 imageId);
709
710 if (journalArticleImage.getGroupId() != groupId) {
711 continue;
712 }
713 }
714 catch (NoSuchArticleImageException nsaie) {
715 }
716
717 try {
718 SCProductScreenshotLocalServiceUtil.
719 getProductScreenshotByFullImageId(imageId);
720
721 continue;
722 }
723 catch (NoSuchProductScreenshotException nspse) {
724 }
725
726 try {
727 SCProductScreenshotLocalServiceUtil.
728 getProductScreenshotByThumbnailId(imageId);
729
730 continue;
731 }
732 catch (NoSuchProductScreenshotException nspse) {
733 }
734
735 sm1.append("insert into Image (");
736 sm1.append("imageId, modifiedDate, text_, type_, height, width, ");
737 sm1.append("size_");
738 sm1.append(") values (");
739 addPKColumn(sm1, imageId);
740 addColumn(sm1, image.getModifiedDate());
741 addColumn(sm1, image.getText(), false);
742 addColumn(sm1, image.getType());
743 addColumn(sm1, image.getHeight());
744 addColumn(sm1, image.getWidth());
745 addColumn(sm1, image.getSize());
746 removeTrailingComma(sm1);
747 sm1.append(");\n");
748
749 sm2.append("<img alt=\"");
750 sm2.append(imageId);
751 sm2.append("\" src=\"http://localhost:8080/image?img_id=");
752 sm2.append(imageId);
753 sm2.append("\" /><br />\n");
754 }
755
756 removeTrailingNewLine(sm1);
757
758 zipWriter.addEntry("portal-data-image.sql", sm1);
759 zipWriter.addEntry("portal-data-image.html", sm2);
760 }
761
762 protected void removeTrailingComma(StringMaker sm) {
763 sm.delete(sm.length() - 2, sm.length());
764 }
765
766 protected void removeTrailingNewLine(StringMaker sm) {
767 if (sm.length() > 0) {
768 sm.delete(sm.length() - 1, sm.length());
769 }
770 }
771
772 protected String replaceIds(String content) throws Exception {
773 content = IdReplacer.replaceLongIds(content, "?img_id=", _valueMapper);
774
775 return content;
776 }
777
778 private static Log _log = LogFactory.getLog(ExportAction.class);
779
780 private MemoryValueMapper _valueMapper = new MemoryValueMapper();
781 private Map<Long, Long> _primaryKeys = _valueMapper.getMap();
782 private int _primaryKeyCount;
783
784 }