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