TRSParserBaseTest.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. /**
  2. * Created: 2005.08.02
  3. * Last Modified: 2006.01.19
  4. * Description:
  5. * class TRSParserBaseTest
  6. * Update Log:
  7. * 2005.01.19 FuChengrui
  8. * 改用新的(只使用PublishPageContext)构造PublishTagContext对象
  9. *
  10. * 2005.12.27 FuChengrui
  11. * 改用新的(使用TagItem)构造PublishTagContext对象
  12. */
  13. package com.trs;
  14. import com.trs.components.common.publish.domain.publisher.PublishPageContext;
  15. import com.trs.components.common.publish.domain.publisher.PublishTagContext;
  16. import com.trs.components.common.publish.domain.publisher.PublishTaskContext;
  17. import com.trs.components.common.publish.domain.tagparser.TagItem;
  18. import com.trs.components.common.publish.domain.tagparser.TagParseHelper;
  19. import com.trs.components.common.publish.persistent.element.IPublishContent;
  20. import com.trs.components.common.publish.persistent.element.IPublishElement;
  21. import com.trs.components.common.publish.persistent.element.IPublishFolder;
  22. import com.trs.components.common.publish.persistent.element.PublishElementFactory;
  23. import com.trs.infra.common.WCMException;
  24. import com.trs.infra.util.CMyException;
  25. /**
  26. * Title: TRS 内容协作平台(TRS WCM) <BR>
  27. * Description: <BR>
  28. * TODO <BR>
  29. * Copyright: Copyright (c) 2004-2005 TRS信息技术有限公司 <BR>
  30. * Company: TRS信息技术有限公司(www.trs.com.cn) <BR>
  31. *
  32. * @author TRS信息技术有限公司
  33. * @version 1.0
  34. */
  35. public abstract class TRSParserBaseTest extends TRSWCMBaseTest {
  36. private static org.apache.log4j.Logger logger = org.apache.log4j.Logger
  37. .getLogger(TRSParserBaseTest.class);
  38. /**
  39. * 构造一个指定的Content
  40. *
  41. * @param _contentContext
  42. * 长度为4的数组:1:FolderType 2:FolderId 3:ContentType 4:ContentId
  43. * @return
  44. */
  45. protected IPublishContent makeContent(int[] _contentContext) {
  46. if (_contentContext == null) {
  47. logger.error("[makeContent]所需的测试数据不正确!需要传入长度为2或4的整型数组");
  48. fail("[makeContent]所需的测试数据不正确!需要传入长度为2或4的整型数组");
  49. }
  50. int nFolderType = 0;
  51. int nFolderId = 0;
  52. int nContentType = 0;
  53. int nContentId = 0;
  54. if (_contentContext.length == 2) {
  55. nContentType = _contentContext[0];
  56. nContentId = _contentContext[1];
  57. } else if (_contentContext.length >= 4) {
  58. nFolderType = _contentContext[0];
  59. nFolderId = _contentContext[1];
  60. nContentType = _contentContext[2];
  61. nContentId = _contentContext[3];
  62. } else {
  63. logger.error("[makeContent]所需的测试数据不正确!需要传入长度为2或4的整型数组");
  64. fail("[makeContent]所需的测试数据不正确!需要传入长度为2或4的整型数组");
  65. }
  66. try {
  67. IPublishContent content = (IPublishContent) PublishElementFactory
  68. .lookupElement(nContentType, nContentId);
  69. if (content == null) {
  70. logger.error("[makeContent]所需的Content数据不正确!ContentTypeConfig="
  71. + nContentType + " ContentId=" + nContentId);
  72. fail("[makeContent]所需的Content数据不正确!ContentTypeConfig="
  73. + nContentType + " ContentId=" + nContentId);
  74. }
  75. IPublishFolder folder = null;
  76. if (nFolderId != 0) {
  77. try {
  78. folder = (IPublishFolder) PublishElementFactory
  79. .lookupElement(nFolderType, nFolderId);
  80. if (folder == null) {
  81. logger
  82. .error("[makeContent]所需的Folder数据不正确!FolderTypeConfig="
  83. + nFolderType
  84. + " FolderId="
  85. + nFolderId);
  86. fail("[makeContent]所需的Folder数据不正确!FolderTypeConfig="
  87. + nFolderType + " FolderId=" + nFolderId);
  88. }
  89. } catch (Exception ex) {
  90. logger.error("测试[makeContent]-获取Folder出现异常!", ex);
  91. fail("测试[makeContent]-获取Folder出现异常!\n"
  92. + CMyException.getStackTraceText(ex));
  93. }
  94. } else {
  95. folder = content.getOriginalHome();
  96. }
  97. content.setFolder(folder);
  98. return content;
  99. } catch (Exception ex) {
  100. logger.error("测试[makeContent]-makeContent出现异常!", ex);
  101. fail("测试[makeContent]-makeContent出现异常!\n"
  102. + CMyException.getStackTraceText(ex));
  103. }
  104. return null;
  105. }
  106. /**
  107. * 构造指定的Folder
  108. *
  109. * @param _folderContext
  110. * 长度为2的数组:1:Folder Type 2:Folder Id
  111. * @return
  112. */
  113. protected IPublishFolder makeFolder(int[] _folderContext) {
  114. if (_folderContext == null || _folderContext.length < 2) {
  115. logger.error("[makeContent]所需的测试数据不正确!需要传入长度为4的整型数组");
  116. fail("[makeContent]所需的测试数据不正确!需要传入长度为4的整型数组");
  117. }
  118. int nFolderType = _folderContext[0];
  119. int nFolderId = _folderContext[1];
  120. IPublishFolder folder = null;
  121. try {
  122. folder = (IPublishFolder) PublishElementFactory.lookupElement(
  123. nFolderType, nFolderId);
  124. if (folder == null) {
  125. logger.error("[makeFolder]所需的Folder数据不正确!FolderTypeConfig="
  126. + nFolderType + " FolderId=" + nFolderId);
  127. fail("[makeFolder]所需的Folder数据不正确!FolderTypeConfig="
  128. + nFolderType + " FolderId=" + nFolderId);
  129. }
  130. } catch (Exception ex) {
  131. logger.error("测试[makeFolder]-获取Folder出现异常!", ex);
  132. fail("测试[makeFolder]-获取Folder出现异常!\n"
  133. + CMyException.getStackTraceText(ex));
  134. }
  135. return folder;
  136. }
  137. /**
  138. * @param data
  139. * @throws WCMException
  140. * @throws Exception
  141. */
  142. protected void parse(String[] data, IPublishElement _pageElement,
  143. IPublishElement _upperHost) throws WCMException, Exception {
  144. // 3.构造发布的相关上下文参数
  145. PublishTaskContext taskContent = new PublishTaskContext(null,
  146. _pageElement.getFolder());
  147. PublishPageContext pageContext = new PublishPageContext(_pageElement,
  148. taskContent);
  149. PublishTagContext tagContext = new PublishTagContext(pageContext);
  150. // 4.遍历测试
  151. TagItem tagItem;
  152. String[] results = null;
  153. for (int i = 0; i < data.length; i++) {
  154. tagItem = TagParseHelper.strToTagItem(data[i]);
  155. System.out.println(data[i]);
  156. System.out.println("[" + i + "]" + tagItem.toString());
  157. long lStart = System.currentTimeMillis();
  158. try {
  159. results = TagParseHelper.parseItem(tagItem, tagContext);
  160. if (pageContext.getWarnings() != null)
  161. System.out.println("Warning:" + pageContext.getWarnings());
  162. } catch (Exception ex) {
  163. ex.printStackTrace(System.out);
  164. fail();
  165. } finally {
  166. pageContext.clear();
  167. }
  168. long lEnd = System.currentTimeMillis();
  169. System.out.println("time used: " + (lEnd - lStart) + "ms");
  170. if (results != null) {
  171. for (int j = 0; j < results.length; j++) {
  172. System.out.println("result[" + j + "]: " + results[j]);
  173. }
  174. }
  175. }
  176. }
  177. /**
  178. * @param data
  179. * @param arFolder
  180. * @param arContent
  181. * @throws WCMException
  182. * @throws Exception
  183. */
  184. protected void parse(String[] data, int[][] arFolder, int[][] arContent)
  185. throws WCMException, Exception {
  186. for (int i = 0; i < arContent.length; i++) {
  187. IPublishFolder folder = makeFolder(arFolder[i]);
  188. IPublishContent content = makeContent(arContent[i]);
  189. if (arContent[i].length > 4 && arContent[i][4] == 1) {// 在细览页面中解析
  190. parse(data, content, content);
  191. } else {// 在概览页面中解析
  192. parse(data, folder, content);
  193. }
  194. }
  195. // endfor
  196. }
  197. /**
  198. * 在指定的站点或栏目下发布指定的模板片段
  199. *
  200. * @param data
  201. * 需要发布的模板片段内容,参数类型为字符串数组,可以指定多个需要发布的模板片段
  202. * @param arFolder
  203. * 当前模板片段所依赖的站点或栏目的信息,因为同一个模板在不同站点或栏目对象下发布出来的内容是不一样的;
  204. * 指定站点或栏目对象的FolderType和FolderId,同时可以指定多个,如:{{101, 2}, {103, 1}}
  205. * @throws WCMException
  206. * @throws Exception
  207. */
  208. protected void parseFolders(String[] data, int[][] arFolder)
  209. throws WCMException, Exception {
  210. for (int i = 0; i < arFolder.length; i++) {
  211. IPublishFolder folder = makeFolder(arFolder[i]);
  212. parse(data, folder, null);
  213. }
  214. }
  215. /**
  216. * 在指定的文档对象下发布指定的模板片段
  217. *
  218. * @param data
  219. * 需要发布的模板片段内容,参数类型为字符串数组,可以指定多个需要发布的模板片段
  220. * @param arFolder
  221. * 当前模板片段所依赖的文档的信息,因为同一个模板在不同文档下发布出来的内容是不一样的;
  222. * 指定文档对象的FolderType、FolderId
  223. * (可选,默认为当前文档自身所在的栏目)及ContentType和ContentId ,同时可以指定多个,如:{{101,
  224. * 2, 605, 32}, {605, 2}}
  225. * @throws WCMException
  226. * @throws Exception
  227. */
  228. protected void parseContents(String[] data, int[][] arContent)
  229. throws WCMException, Exception {
  230. for (int i = 0; i < arContent.length; i++) {
  231. IPublishContent content = makeContent(arContent[i]);
  232. parse(data, content, null);
  233. }
  234. }
  235. }