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