1 40 package com.mvnforum.admin.importexport.mvnforum; 41 42 import java.io.*; 43 import java.util.Calendar ; 44 import java.util.zip.ZipEntry ; 45 import java.util.zip.ZipInputStream ; 46 47 import javax.servlet.http.HttpServletRequest ; 48 import javax.servlet.http.HttpServletResponse ; 49 50 import com.mvnforum.MVNForumConfig; 51 import com.mvnforum.MVNForumGlobal; 52 import com.mvnforum.admin.ImportWebHelper; 53 import com.mvnforum.admin.importexport.SetParentRule; 54 import net.myvietnam.mvncore.exception.*; 55 import org.apache.commons.digester.Digester; 56 import org.apache.commons.logging.Log; 57 import org.apache.commons.logging.LogFactory; 58 import org.xml.sax.SAXException ; 59 60 71 public class ImportMvnForum extends ImportWebHelper { 72 73 74 private static Log log = LogFactory.getLog(ImportMvnForum.class); 75 76 77 private ImportMvnForum() { 78 } 79 80 81 105 public static void importXml(File importFile, 106 HttpServletRequest request, HttpServletResponse response, 107 int logonMemberID, String logonMemberName, 108 Calendar importTime, String importIP, 109 boolean clearIfError, int messageLevel) 110 throws ImportException { 111 try { 112 response.setContentType("text/html; charset=utf-8"); 113 setOutputHtmlWriter(response.getWriter()); 114 setMessageOutputLevel(messageLevel); 115 startHtml(request); 116 clearDatabase(); 117 clearFiles(request.getSession().getServletContext()); 118 } catch (DatabaseException e) { 119 handleFatalError("Database error while clearing previous contents.", 120 e, clearIfError, request); 121 } catch (IOException e) { 122 handleFatalError("I/O error while clearing previous contents.", 123 e, clearIfError, request); 124 } 125 126 try { 127 processXml(importFile, importTime); 128 handleSuccess(request); 129 } catch (ImportException e) { 130 handleFatalError(e.getMessage(), e.getException(), 131 clearIfError, request); 132 } catch (IOException e) { 133 handleFatalError("I/O error while reading XML file.", 134 e, clearIfError, request); 135 } catch (SAXException e) { 136 if (e.getException()==null) { 137 handleFatalError("Error while parsing uploaded XML file.", 138 e, clearIfError, request); 139 } else { 140 handleFatalError("Error while parsing uploaded XML file. Detail: "+ 141 e.getException().getMessage(), e.getException(), 142 clearIfError, request); 143 } 144 } finally { 145 150 } 151 } 152 153 175 public static void importZip(File importFile, 176 HttpServletRequest request, HttpServletResponse response, 177 int logonMemberID, String logonMemberName, 178 Calendar importTime, String importIP, 179 boolean clearIfError, int messageLevel) 180 throws ImportException { 181 File importXml=null; 182 try { 183 response.setContentType("text/html; charset=utf-8"); 184 setOutputHtmlWriter(response.getWriter()); 185 setMessageOutputLevel(messageLevel); 186 startHtml(request); 187 clearDatabase(); 188 clearFiles(request.getSession().getServletContext()); 189 } catch (DatabaseException e) { 190 handleFatalError("Database error while clearing previous contents.", 191 e, clearIfError, request); 192 } catch (IOException e) { 193 handleFatalError("I/O error while clearing previous contents.", 194 e, clearIfError, request); 195 } 196 197 201 try { 202 addImportantMessage("Extracting the ZIP file."); 203 importXml=extractImportZip(importFile, request); 204 if (importXml==null) { 205 handleFatalError("Error while extracting the file: can't find IMPORT.xml in ZIP file.", 206 null, clearIfError, request); 207 } 208 } catch (IOException e) { 209 handleFatalError("I/O error while extracting the file.", 210 e, clearIfError, request); 211 } finally { 212 importFile.delete(); importFile=null; 213 } 214 215 try { 217 processXml(importXml, importTime); 218 handleSuccess(request); 219 } catch (ImportException e) { 220 handleFatalError(e.getMessage(), e.getException(), 221 clearIfError, request); 222 } catch (IOException e) { 223 handleFatalError("I/O error while reading XML file.", 224 e, clearIfError, request); 225 } catch (SAXException e) { 226 if (e.getException()==null) { 227 handleFatalError("Error while parsing uploaded XML file.", 228 e, clearIfError, request); 229 } else { 230 handleFatalError("Error while parsing uploaded XML file. Detail: "+ 231 e.getException().getMessage(), e.getException(), 232 clearIfError, request); 233 } 234 } finally { 235 if ((importFile!=null) && (importFile.exists())) importFile.delete(); 237 if ((importXml!=null) && (importXml.exists())) importXml.delete(); 238 } 239 } 240 241 245 private static File extractImportZip(File importZipFile, HttpServletRequest request) 246 throws IOException { 247 String avatarsDir = request.getSession().getServletContext().getRealPath(MVNForumGlobal.UPLOADED_AVATAR_DIR); 248 String attachsDir = MVNForumConfig.getAttachmentDir(); 249 String mvnForumHomeDir = MVNForumConfig.getMVNForumHome(); 250 if (! new File(avatarsDir).mkdirs()) { 251 255 } 256 if (! new File(attachsDir).mkdirs()) { 257 261 } 262 if (!avatarsDir.endsWith(File.separator)) avatarsDir+=File.separator; 263 if (!attachsDir.endsWith(File.separator)) attachsDir+=File.separator; 264 if (!mvnForumHomeDir.endsWith(File.separator)) mvnForumHomeDir+=File.separator; 265 266 ZipInputStream zipInputStream = new ZipInputStream (new FileInputStream(importZipFile)); 267 File foundXmlFile = null; 268 while (true) { 269 ZipEntry zipEntry = zipInputStream.getNextEntry(); 271 if (zipEntry==null) break; 272 String srcName=zipEntry.getName(); 274 String destPath = mvnForumHomeDir+srcName; if ((srcName.length()>=MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip.length()) && (srcName.substring(0, MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip.length()).equalsIgnoreCase(MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip))) { 277 try { 279 String thisAvatar=srcName.substring(MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip.length(), srcName.length()); 280 if (thisAvatar.length()<=0) destPath=null; 282 else destPath=avatarsDir+thisAvatar.replace('/', File.separatorChar); 283 } catch (StringIndexOutOfBoundsException e) { 284 destPath=null; 286 } 287 } else if ((srcName.length()>=MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip.length()) && (srcName.substring(0, MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip.length()).equalsIgnoreCase(MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip))) { 288 try { 290 String thisAttach=srcName.substring(MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip.length(), srcName.length()); 291 if (thisAttach.length()<=0) destPath=null; 293 else destPath=attachsDir+thisAttach.replace('/', File.separatorChar); 294 } catch (StringIndexOutOfBoundsException e) { 295 destPath=null; 297 } 298 } else { 299 destPath=mvnForumHomeDir+srcName.replace('/', File.separatorChar); 301 } 302 if ((destPath!=null) && (destPath.length()>0)) { 303 File destFile=new File(destPath); 304 if (zipEntry.isDirectory()) { 305 addMessage("Extracting directory \"" +srcName +"\"."); 306 destFile.mkdirs(); 307 } else { 308 addMessage("Extracting file \"" +srcName +"\", size=" +zipEntry.getSize()+"."); 309 FileOutputStream outStream = new FileOutputStream(destFile); 310 byte[] buffer = new byte[1024]; 311 int n; 312 while ((n = zipInputStream.read(buffer)) > 0) { 313 outStream.write(buffer, 0, n); 314 } 315 outStream.close(); outStream=null; 316 if (srcName.equalsIgnoreCase(MVNForumConfig.BACKUP_FILE_MainXmlFileNameInZip) || srcName.equalsIgnoreCase("/"+MVNForumConfig.BACKUP_FILE_MainXmlFileNameInZip)) { 317 foundXmlFile=destFile; 318 } 319 } 320 } 321 zipInputStream.closeEntry(); 322 } 323 zipInputStream.close(); 324 return foundXmlFile; 325 } 328 329 330 346 protected static void processXml(File inputFile, Calendar importTime) 347 throws IOException, SAXException , ImportException { 348 addImportantMessage("Starting importing database info..."); 349 350 Digester digester=new Digester(); 352 digester.setValidating(true); 354 digester.setNamespaceAware(true); 355 357 380 381 387 digester.addObjectCreate("mvnforum", MvnForumXML.class); 388 digester.addSetProperties("mvnforum", "version", "mvnForumXmlVersion"); 389 digester.addSetProperties("mvnforum", "exportDate", "mvnForumExportDate"); 390 391 392 digester.addCallMethod("mvnforum/MemberList", "postProcessMemberList"); 393 digester.addObjectCreate("mvnforum/MemberList/Member", MvnForumMemberXML.class); 394 digester.addSetProperties("mvnforum/MemberList/Member", "class", "memberClass"); 395 digester.addCallMethod("mvnforum/MemberList/Member", "addMember"); 396 digester.addCallMethod("mvnforum/MemberList/Member/MemberName", "setMemberName", 0); 397 digester.addCallMethod("mvnforum/MemberList/Member/MemberPassword", "setMemberPassword", 0); 398 digester.addCallMethod("mvnforum/MemberList/Member/MemberFirstEmail", "setMemberFirstEmail", 0); 399 digester.addCallMethod("mvnforum/MemberList/Member/MemberEmail", "setMemberEmail", 0); 400 digester.addCallMethod("mvnforum/MemberList/Member/MemberEmailVisible", "setMemberEmailVisible", 0); 401 digester.addCallMethod("mvnforum/MemberList/Member/MemberNameVisible", "setMemberNameVisible", 0); 402 digester.addCallMethod("mvnforum/MemberList/Member/MemberFirstIP", "setMemberFirstIP", 0); 403 digester.addCallMethod("mvnforum/MemberList/Member/MemberLastIP", "setMemberLastIP", 0); 404 digester.addCallMethod("mvnforum/MemberList/Member/MemberViewCount", "setMemberViewCount", 0); 405 digester.addCallMethod("mvnforum/MemberList/Member/MemberPostCount", "setMemberPostCount", 0); 406 digester.addCallMethod("mvnforum/MemberList/Member/MemberCreationDate", "setMemberCreationDate", 0); 407 digester.addCallMethod("mvnforum/MemberList/Member/MemberModifiedDate", "setMemberModifiedDate", 0); 408 digester.addCallMethod("mvnforum/MemberList/Member/MemberExpireDate", "setMemberExpireDate", 0); 409 digester.addCallMethod("mvnforum/MemberList/Member/MemberLastLogon", "setMemberLastLogon", 0); 411 digester.addCallMethod("mvnforum/MemberList/Member/MemberOption", "setMemberOption", 0); 412 digester.addCallMethod("mvnforum/MemberList/Member/MemberStatus", "setMemberStatus", 0); 413 digester.addCallMethod("mvnforum/MemberList/Member/MemberActivateCode", "setMemberActivateCode", 0); 414 digester.addCallMethod("mvnforum/MemberList/Member/MemberTempPassword", "setMemberTempPassword", 0); 415 digester.addCallMethod("mvnforum/MemberList/Member/MemberMessageCount", "setMemberMessageCount", 0); 416 digester.addCallMethod("mvnforum/MemberList/Member/MemberMessageOption", "setMemberMessageOption", 0); 417 digester.addCallMethod("mvnforum/MemberList/Member/MemberPostsPerPage", "setMemberPostsPerPage", 0); 418 digester.addCallMethod("mvnforum/MemberList/Member/MemberWarnCount", "setMemberWarnCount", 0); 419 digester.addCallMethod("mvnforum/MemberList/Member/MemberVoteCount", "setMemberVoteCount", 0); 420 digester.addCallMethod("mvnforum/MemberList/Member/MemberVoteTotalStars", "setMemberVoteTotalStars", 0); 421 digester.addCallMethod("mvnforum/MemberList/Member/MemberRewardPoints", "setMemberRewardPoints", 0); 422 digester.addCallMethod("mvnforum/MemberList/Member/MemberTitle", "setMemberTitle", 0); 423 digester.addCallMethod("mvnforum/MemberList/Member/MemberTimeZone", "setMemberTimeZone", 0); 424 digester.addCallMethod("mvnforum/MemberList/Member/MemberSignature", "setMemberSignature", 0); 425 digester.addCallMethod("mvnforum/MemberList/Member/MemberAvatar", "setMemberAvatar", 0); 426 digester.addCallMethod("mvnforum/MemberList/Member/MemberSkin", "setMemberSkin", 0); 427 digester.addCallMethod("mvnforum/MemberList/Member/MemberLanguage", "setMemberLanguage", 0); 428 digester.addCallMethod("mvnforum/MemberList/Member/MemberFirstname", "setMemberFirstname", 0); 429 digester.addCallMethod("mvnforum/MemberList/Member/MemberLastname", "setMemberLastname", 0); 430 digester.addCallMethod("mvnforum/MemberList/Member/MemberGender", "setMemberGender", 0); 431 digester.addCallMethod("mvnforum/MemberList/Member/MemberBirthday", "setMemberBirthday", 0); 432 digester.addCallMethod("mvnforum/MemberList/Member/MemberAddress", "setMemberAddress", 0); 433 digester.addCallMethod("mvnforum/MemberList/Member/MemberCity", "setMemberCity", 0); 434 digester.addCallMethod("mvnforum/MemberList/Member/MemberState", "setMemberState", 0); 435 digester.addCallMethod("mvnforum/MemberList/Member/MemberCountry", "setMemberCountry", 0); 436 digester.addCallMethod("mvnforum/MemberList/Member/MemberPhone", "setMemberPhone", 0); 437 digester.addCallMethod("mvnforum/MemberList/Member/MemberMobile", "setMemberMobile", 0); 438 digester.addCallMethod("mvnforum/MemberList/Member/MemberFax", "setMemberFax", 0); 439 digester.addCallMethod("mvnforum/MemberList/Member/MemberCareer", "setMemberCareer", 0); 440 digester.addCallMethod("mvnforum/MemberList/Member/MemberHomepage", "setMemberHomepage", 0); 441 digester.addCallMethod("mvnforum/MemberList/Member/MemberYahoo", "setMemberYahoo", 0); 442 digester.addCallMethod("mvnforum/MemberList/Member/MemberAol", "setMemberAol", 0); 443 digester.addCallMethod("mvnforum/MemberList/Member/MemberIcq", "setMemberIcq", 0); 444 digester.addCallMethod("mvnforum/MemberList/Member/MemberMsn", "setMemberMsn", 0); 445 digester.addCallMethod("mvnforum/MemberList/Member/MemberCoolLink1", "setMemberCoolLink1", 0); 446 digester.addCallMethod("mvnforum/MemberList/Member/MemberCoolLink2", "setMemberCoolLink2", 0); 447 448 digester.addCallMethod("mvnforum/MemberList/Member/GlobalPermissionList/GlobalPermission", "addMemberPermission", 0); 449 450 digester.addCallMethod("mvnforum/MemberList/Member/MessageFolderList/MessageFolder", "addMessageFolder", 4); 451 digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderName", 0); 452 digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderOrder", 1); 453 digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderCreationDate", 2); 454 digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderModifiedDate", 3); 455 456 digester.addCallMethod("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch", "addGlobalWatch", 6); 457 digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchType", 0); 458 digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchOption", 1); 459 digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchStatus", 2); 460 digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchCreationDate", 3); 461 digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchLastSentDate", 4); 462 digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchEndDate", 5); 463 464 465 digester.addCallMethod("mvnforum/GroupList", "postProcessGroupList"); 466 digester.addObjectCreate("mvnforum/GroupList/Group", MvnForumGroupXML.class); 467 digester.addSetProperties("mvnforum/GroupList/Group", "class", "groupClass"); 468 digester.addCallMethod("mvnforum/GroupList/Group", "addGroup"); 469 digester.addCallMethod("mvnforum/GroupList/Group/GroupOwnerName", "setGroupOwnerName", 0); 470 digester.addCallMethod("mvnforum/GroupList/Group/GroupName", "setGroupName", 0); 471 digester.addCallMethod("mvnforum/GroupList/Group/GroupDesc", "setGroupDesc", 0); 472 digester.addCallMethod("mvnforum/GroupList/Group/GroupOption", "setGroupOption", 0); 473 digester.addCallMethod("mvnforum/GroupList/Group/GroupCreationDate", "setGroupCreationDate", 0); 474 digester.addCallMethod("mvnforum/GroupList/Group/GroupModifiedDate", "setGroupModifiedDate", 0); 475 476 digester.addCallMethod("mvnforum/GroupList/Group/GlobalPermissionList/GlobalPermission", "addGroupPermission", 0); 477 478 digester.addCallMethod("mvnforum/GroupList/Group/GroupMemberList/GroupMember", "addGroupMember", 4); 479 digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/MemberName", 0); 480 digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/Privilege", 1); 481 digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/CreationDate", 2); 482 digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/ModifiedDate", 3); 483 484 485 488 489 digester.addObjectCreate("*/Category", MvnForumCategoryXML.class); 490 SetParentRule categoryParentRule = new SetParentRule("setParentCategoryIfHave"); 492 digester.addRule("*/Category", categoryParentRule); 493 digester.addCallMethod("*/Category", "addCategory"); 494 digester.addCallMethod("*/Category/CategoryName", "setCategoryName", 0); 495 digester.addCallMethod("*/Category/CategoryDesc", "setCategoryDesc", 0); 496 digester.addCallMethod("*/Category/CategoryCreationDate", "setCategoryCreationDate", 0); 497 digester.addCallMethod("*/Category/CategoryModifiedDate", "setCategoryModifiedDate", 0); 498 digester.addCallMethod("*/Category/CategoryOrder", "setCategoryOrder", 0); 499 digester.addCallMethod("*/Category/CategoryOption", "setCategoryOption", 0); 500 digester.addCallMethod("*/Category/CategoryStatus", "setCategoryStatus", 0); 501 502 digester.addCallMethod("*/Category/CategoryWatchList/CategoryWatch", "addCategoryWatch", 7); 503 digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/MemberName", 0); 504 digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchType", 1); 505 digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchOption", 2); 506 digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchStatus", 3); 507 digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchCreationDate", 4); 508 digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchLastSentDate", 5); 509 digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchEndDate", 6); 510 511 512 digester.addObjectCreate("*/Forum", MvnForumForumXML.class); 513 digester.addCallMethod("*/Forum", "addForum"); 514 SetParentRule forumParentRule = new SetParentRule("setParentCategory"); 516 digester.addRule("*/Forum", forumParentRule); 517 digester.addCallMethod("*/Forum/LastPostMemberName", "setForumLastPostMemberName", 0); 518 digester.addCallMethod("*/Forum/ForumName", "setForumName", 0); 519 digester.addCallMethod("*/Forum/ForumDesc", "setForumDesc", 0); 520 digester.addCallMethod("*/Forum/ForumCreationDate", "setForumCreationDate", 0); 521 digester.addCallMethod("*/Forum/ForumModifiedDate", "setForumModifiedDate", 0); 522 digester.addCallMethod("*/Forum/ForumLastPostDate", "setForumLastPostDate", 0); 523 digester.addCallMethod("*/Forum/ForumOrder", "setForumOrder", 0); 524 digester.addCallMethod("*/Forum/ForumType", "setForumType", 0); 525 digester.addCallMethod("*/Forum/ForumFormatOption", "setForumFormatOption", 0); 526 digester.addCallMethod("*/Forum/ForumOption", "setForumOption", 0); 527 digester.addCallMethod("*/Forum/ForumStatus", "setForumStatus", 0); 528 digester.addCallMethod("*/Forum/ForumModerationMode", "setForumModerationMode", 0); 529 digester.addCallMethod("*/Forum/ForumPassword", "setForumPassword", 0); 530 digester.addCallMethod("*/Forum/ForumThreadCount", "setForumThreadCount", 0); 531 digester.addCallMethod("*/Forum/ForumPostCount", "setForumPostCount", 0); 532 533 digester.addCallMethod("*/Forum/MemberForumPermissionList/MemberForumPermission", "addMemberForumPermission", 2); 534 digester.addCallParam("*/Forum/MemberForumPermissionList/MemberForumPermission/MemberName", 0); 535 digester.addCallParam("*/Forum/MemberForumPermissionList/MemberForumPermission/ForumPermission", 1); 536 537 digester.addCallMethod("*/Forum/GroupForumPermissionList/GroupForumPermission", "addGroupForumPermission", 2); 538 digester.addCallParam("*/Forum/GroupForumPermissionList/GroupForumPermission/GroupName", 0); 539 digester.addCallParam("*/Forum/GroupForumPermissionList/GroupForumPermission/ForumPermission", 1); 540 541 544 digester.addCallMethod("*/Forum/ForumWatchList/ForumWatch", "addForumWatch", 7); 545 digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/MemberName", 0); 546 digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchType", 1); 547 digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchOption", 2); 548 digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchStatus", 3); 549 digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchCreationDate", 4); 550 digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchLastSentDate", 5); 551 digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchEndDate", 6); 552 553 554 digester.addObjectCreate("*/Thread", MvnForumThreadXML.class); 555 SetParentRule threadParentRule = new SetParentRule("setParentForum"); 557 digester.addRule("*/Thread", threadParentRule); 558 digester.addCallMethod("*/Thread", "addThread"); 559 digester.addCallMethod("*/Thread/MemberName", "setThreadMemberName", 0); 560 digester.addCallMethod("*/Thread/LastPostMemberName", "setThreadLastPostMemberName", 0); 561 digester.addCallMethod("*/Thread/ThreadTopic", "setThreadTopic", 0); 562 digester.addCallMethod("*/Thread/ThreadBody", "setThreadBody", 0); 563 digester.addCallMethod("*/Thread/ThreadVoteCount", "setThreadVoteCount", 0); 564 digester.addCallMethod("*/Thread/ThreadVoteTotalStars", "setThreadVoteTotalStars", 0); 565 digester.addCallMethod("*/Thread/ThreadCreationDate", "setThreadCreationDate", 0); 566 digester.addCallMethod("*/Thread/ThreadLastPostDate", "setThreadLastPostDate", 0); 567 digester.addCallMethod("*/Thread/ThreadType", "setThreadType", 0); 568 digester.addCallMethod("*/Thread/ThreadOption", "setThreadOption", 0); 569 digester.addCallMethod("*/Thread/ThreadStatus", "setThreadStatus", 0); 570 digester.addCallMethod("*/Thread/ThreadHasPoll", "setThreadHasPoll", 0); 571 digester.addCallMethod("*/Thread/ThreadViewCount", "setThreadViewCount", 0); 572 digester.addCallMethod("*/Thread/ThreadReplyCount", "setThreadReplyCount", 0); 573 digester.addCallMethod("*/Thread/ThreadIcon", "setThreadIcon", 0); 574 digester.addCallMethod("*/Thread/ThreadDuration", "setThreadDuration", 0); 575 576 digester.addCallMethod("*/Thread/ThreadWatchList/ThreadWatch", "addThreadWatch", 7); 577 digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/MemberName", 0); 578 digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchType", 1); 579 digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchOption", 2); 580 digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchStatus", 3); 581 digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchCreationDate", 4); 582 digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchLastSentDate", 5); 583 digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchEndDate", 6); 584 585 digester.addCallMethod("*/Thread/FavoriteThreadList/FavoriteThread", "addFavoriteThread", 5); 586 digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/MemberName", 0); 587 digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteCreationDate", 1); 588 digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteType", 2); 589 digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteOption", 3); 590 digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteStatus", 4); 591 592 593 digester.addObjectCreate("*/Post", MvnForumPostXML.class); 594 SetParentRule postParentRule = new SetParentRule("setParentThreadOrPost"); 596 digester.addRule("*/Post", postParentRule); 597 digester.addCallMethod("*/Post", "addPost"); 598 digester.addCallMethod("*/Post/MemberName", "setPostMemberName", 0); 599 digester.addCallMethod("*/Post/LastEditMemberName", "setPostLastEditMemberName", 0); 600 digester.addCallMethod("*/Post/PostTopic", "setPostTopic", 0); 601 digester.addCallMethod("*/Post/PostBody", "setPostBody", 0); 602 digester.addCallMethod("*/Post/PostCreationDate", "setPostCreationDate", 0); 603 digester.addCallMethod("*/Post/PostLastEditDate", "setPostLastEditDate", 0); 604 digester.addCallMethod("*/Post/PostCreationIP", "setPostCreationIP", 0); 605 digester.addCallMethod("*/Post/PostLastEditIP", "setPostLastEditIP", 0); 606 digester.addCallMethod("*/Post/PostEditCount", "setPostEditCount", 0); 607 digester.addCallMethod("*/Post/PostFormatOption", "setPostFormatOption", 0); 608 digester.addCallMethod("*/Post/PostOption", "setPostOption", 0); 609 digester.addCallMethod("*/Post/PostStatus", "setPostStatus", 0); 610 digester.addCallMethod("*/Post/PostIcon", "setPostIcon", 0); 611 digester.addCallMethod("*/Post/PostAttachCount", "setPostAttachCount", 0); 612 613 614 digester.addObjectCreate("*/Attachment", MvnForumAttachmentXML.class); 615 digester.addSetProperties("*/Attachment", "id", "attachmentId"); 616 SetParentRule attachmentParentRule = new SetParentRule("setParentPost"); 618 digester.addRule("*/Attachment", attachmentParentRule); 619 digester.addCallMethod("*/Attachment", "addAttachment"); 620 digester.addCallMethod("*/Attachment/MemberName", "setAttachMemberName", 0); 621 digester.addCallMethod("*/Attachment/AttachFilename", "setAttachFilename", 0); 622 digester.addCallMethod("*/Attachment/AttachFileSize", "setAttachFileSize", 0); 623 digester.addCallMethod("*/Attachment/AttachMimeType", "setAttachMimeType", 0); 624 digester.addCallMethod("*/Attachment/AttachDesc", "setAttachDesc", 0); 625 digester.addCallMethod("*/Attachment/AttachCreationIP", "setAttachCreationIP", 0); 626 digester.addCallMethod("*/Attachment/AttachCreationDate", "setAttachCreationDate", 0); 627 digester.addCallMethod("*/Attachment/AttachModifiedDate", "setAttachModifiedDate", 0); 628 digester.addCallMethod("*/Attachment/AttachDownloadCount", "setAttachDownloadCount", 0); 629 digester.addCallMethod("*/Attachment/AttachOption", "setAttachOption", 0); 630 digester.addCallMethod("*/Attachment/AttachStatus", "setAttachStatus", 0); 631 632 633 634 635 636 digester.addCallMethod("mvnforum/RankList/Rank", "addRank", 6); 637 digester.addCallParam("mvnforum/RankList/Rank/RankMinPosts", 0); 638 digester.addCallParam("mvnforum/RankList/Rank/RankLevel", 1); 639 digester.addCallParam("mvnforum/RankList/Rank/RankTitle", 2); 640 digester.addCallParam("mvnforum/RankList/Rank/RankImage", 3); 641 digester.addCallParam("mvnforum/RankList/Rank/RankType", 4); 642 digester.addCallParam("mvnforum/RankList/Rank/RankOption", 5); 643 644 645 649 650 digester.parse(inputFile); 651 652 try { 653 MvnForumXML.finishImport(); 654 } catch (CreateException e) { 655 throw new ImportException(e.getMessage(), e); } catch (DuplicateKeyException e) { 657 throw new ImportException(e.getMessage(), e); } catch (ObjectNotFoundException e) { 659 throw new ImportException(e.getMessage(), e); } catch (DatabaseException e) { 661 throw new ImportException(e.getMessage(), e); } catch (ForeignKeyNotFoundException e) { 663 throw new ImportException(e.getMessage(), e); } catch (BadInputException e) { 665 throw new ImportException(e.getMessage(), e); } 667 } 668 669 678 public static void addMessage(String message) { 679 ImportWebHelper.addMessage(message); 680 } 681 682 691 public static void addImportantMessage(String message) { 692 ImportWebHelper.addImportantMessage(message); 693 } 694 695 706 public static void createDefaultContents() 707 throws CreateException, DuplicateKeyException, ObjectNotFoundException, 708 DatabaseException, ForeignKeyNotFoundException { 709 717 } 718 719 private static void handleSuccess(HttpServletRequest request) { 720 addSuccessMessage(); 721 endHtml(); 722 } 723 724 private static void handleFatalError(String message, Exception e, 726 boolean clearIfError, HttpServletRequest request) 727 throws ImportException { 728 729 if (e==null) log.error(message); 730 else log.error(message, e); 731 if ((e==null) || (e.getMessage()==null)) addErrorMessage(message); 732 else addErrorMessage(message+"<br/>Cause: "+e.getMessage()); 733 ImportWebHelper.addFinalErrorHandling(request, clearIfError); 735 endHtml(); 736 if (e==null) throw new ImportException(message); 737 else throw new ImportException(message, e); 738 } 739 } 740 741 | Popular Tags |