1
22
23 package com.liferay.portal.upgrade.v4_3_0.util;
24
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.StringPool;
29 import com.liferay.portal.kernel.util.StringUtil;
30 import com.liferay.portal.kernel.util.Validator;
31 import com.liferay.portal.kernel.xml.Document;
32 import com.liferay.portal.kernel.xml.Element;
33 import com.liferay.portal.kernel.xml.SAXReaderUtil;
34 import com.liferay.portal.upgrade.util.BaseUpgradeColumnImpl;
35 import com.liferay.portal.upgrade.util.BaseUpgradeTableImpl;
36 import com.liferay.portal.upgrade.util.IdReplacer;
37 import com.liferay.portal.upgrade.util.UpgradeColumn;
38 import com.liferay.portal.upgrade.util.ValueMapper;
39 import com.liferay.portal.upgrade.util.ValueMapperFactory;
40 import com.liferay.portlet.journal.service.JournalArticleImageLocalServiceUtil;
41 import com.liferay.portlet.journal.util.JournalUtil;
42 import com.liferay.util.PKParser;
43
44 import java.util.Iterator;
45
46
53 public class JournalArticleContentUpgradeColumnImpl
54 extends BaseUpgradeColumnImpl {
55
56 public JournalArticleContentUpgradeColumnImpl(
57 UpgradeColumn companyIdColumn, UpgradeColumn groupIdColumn,
58 UpgradeColumn articleIdColumn, UpgradeColumn versionColumn,
59 UpgradeColumn structureIdColumn, ValueMapper imageIdMapper) {
60
61 super("content");
62
63 _companyIdColumn = companyIdColumn;
64 _groupIdColumn = groupIdColumn;
65 _articleIdColumn = articleIdColumn;
66 _versionColumn = versionColumn;
67 _structureIdColumn = structureIdColumn;
68 _imageIdMapper = imageIdMapper;
69 }
70
71 public Object getNewValue(Object oldValue) throws Exception {
72 String content = (String)oldValue;
73
74 content = StringUtil.replace(
75 content, BaseUpgradeTableImpl.SAFE_CHARS[1],
76 BaseUpgradeTableImpl.SAFE_CHARS[0]);
77
78
84
85 String structureId = (String)_structureIdColumn.getOldValue();
86
87 if (Validator.isNotNull(structureId)) {
88 content = formatContent(content);
89 }
90
91 content = replaceIds(content);
92
93 content = StringUtil.replace(
94 content, BaseUpgradeTableImpl.SAFE_CHARS[0],
95 BaseUpgradeTableImpl.SAFE_CHARS[1]);
96
97 return content;
98 }
99
100 protected String formatContent(String content) throws Exception {
101 String oldCompanyId = (String)_companyIdColumn.getOldValue();
102 Long newCompanyId = (Long)_companyIdColumn.getNewValue();
103 Long groupId = (Long)_groupIdColumn.getNewValue();
104 String articleId = (String)_articleIdColumn.getNewValue();
105 Double version = (Double)_versionColumn.getNewValue();
106
107 try {
108 Document doc = SAXReaderUtil.read(content);
109
110 Element root = doc.getRootElement();
111
112 format(
113 oldCompanyId, newCompanyId.longValue(), groupId.longValue(),
114 articleId, version.doubleValue(), root);
115
116 content = JournalUtil.formatXML(doc);
117 }
118 catch (Exception e) {
119 _log.error(
120 "Unable to format content for {articleId=" + articleId +
121 ",version=" + version + "}: " + e.getMessage());
122 }
123
124 return content;
125 }
126
127 protected void format(
128 String oldCompanyId, long newCompanyId, long groupId,
129 String articleId, double version, Element root)
130 throws Exception {
131
132 Iterator<Element> itr = root.elements().iterator();
133
134 while (itr.hasNext()) {
135 Element el = itr.next();
136
137 Element dynamicContent = el.element("dynamic-content");
138
139 String elInstanceId = StringPool.BLANK;
140 String elName = el.attributeValue("name", StringPool.BLANK);
141 String elType = el.attributeValue("type", StringPool.BLANK);
142 String elLanguage = StringPool.BLANK;
143
144 if (dynamicContent != null) {
145 elLanguage = dynamicContent.attributeValue(
146 "language-id", StringPool.BLANK);
147
148 if (!elLanguage.equals(StringPool.BLANK)) {
149 elLanguage = "_" + elLanguage;
150 }
151 }
152
153 if (elType.equals("image") || elType.equals("text")) {
154 String oldImageId = dynamicContent.getText();
155
156 if (oldImageId.startsWith(_IMG_ID_PATH) ||
157 oldImageId.startsWith("@portal_url@" + _IMG_ID_PATH) ||
158 oldImageId.startsWith(
159 "http://@portal_url@" + _IMG_ID_PATH) ||
160 oldImageId.startsWith(
161 "https://@portal_url@" + _IMG_ID_PATH)) {
162
163 int pos = oldImageId.indexOf(_IMG_ID_PATH);
164
165 String preOldImageId = oldImageId.substring(0, pos);
166
167 oldImageId = oldImageId.substring(
168 pos + _IMG_ID_PATH.length(), oldImageId.length());
169
170 String newImageId = getNewImageId(oldCompanyId, oldImageId);
171
172 dynamicContent.setText(
173 preOldImageId + _IMG_ID_PATH + newImageId);
174
175 if (elType.equals("image")) {
176 dynamicContent.addAttribute("id", newImageId);
177
178 long articleImageId = GetterUtil.getLong(newImageId);
179
180 JournalArticleImageLocalServiceUtil.addArticleImageId(
181 articleImageId, groupId, articleId, version,
182 elInstanceId, elName, elLanguage);
183 }
184 }
185 }
186
187 format(oldCompanyId, newCompanyId, groupId, articleId, version, el);
188 }
189 }
190
191 protected String getNewImageId(String oldCompanyId, String oldImageId)
192 throws Exception {
193
194 int pos = oldImageId.lastIndexOf("&version=");
195
196 oldImageId =
197 oldImageId.substring(0, pos) + "." +
198 oldImageId.substring(pos + 9, oldImageId.length());
199
200 String newImageId = oldCompanyId + ".journal.article." + oldImageId;
201
202 return String.valueOf(_imageIdMapper.getNewValue(newImageId));
203 }
204
205 protected String replaceIds(String content) throws Exception {
206 ValueMapper dlFolderIdMapper =
207 AvailableMappersUtil.getDLFolderIdMapper();
208
209 content = IdReplacer.replaceLongIds(
210 content, "/document_library/get_file?folderId=", dlFolderIdMapper);
211 content = IdReplacer.replaceLongIds(
212 content,
213 "_20_struts_action=%2Fdocument_library%2Fget_file&_20_folderId=",
214 dlFolderIdMapper);
215 content = IdReplacer.replaceLongIds(
216 content,
217 "_20_struts_action=%2Fdocument_library%2Fget_file&" +
218 "_20_folderId=",
219 dlFolderIdMapper);
220
221 ValueMapper imageIdMapper = AvailableMappersUtil.getImageIdMapper();
222
223 ValueMapper newImageIdMapper = ValueMapperFactory.getValueMapper();
224
225 ValueMapper igImageIdMapper = AvailableMappersUtil.getIGImageIdMapper();
226
227 Iterator<Object> itr = igImageIdMapper.iterator();
228
229 while (itr.hasNext()) {
230 String oldValue = (String)itr.next();
231
232 PKParser oldValuePKParser = new PKParser(oldValue);
233
234 String companyId = oldValuePKParser.getString("companyId");
235 String oldIGImageId = oldValuePKParser.getString("imageId");
236
237 String oldImageId =
238 companyId + ".image_gallery." + oldIGImageId + ".large";
239
240 Long newImageId = (Long)imageIdMapper.getNewValue(oldImageId);
241
242 newImageIdMapper.mapValue(
243 new Long(GetterUtil.getLong(oldIGImageId)), newImageId);
244 }
245
246 content = IdReplacer.replaceLongIds(
247 content, "/image_gallery?img_id=", newImageIdMapper);
248
249 return content;
250 }
251
252 private static final String _IMG_ID_PATH =
253 "/image/journal/article?img_id=";
254
255 private static Log _log =
256 LogFactoryUtil.getLog(JournalArticleContentUpgradeColumnImpl.class);
257
258 private UpgradeColumn _companyIdColumn;
259 private UpgradeColumn _groupIdColumn;
260 private UpgradeColumn _articleIdColumn;
261 private UpgradeColumn _versionColumn;
262 private UpgradeColumn _structureIdColumn;
263 private ValueMapper _imageIdMapper;
264
265 }