|
What this is
Other links
The source code/* * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/admin/importexport/mvnforum/ImportMvnForum.java,v 1.8 2005/01/18 11:52:14 minhnn Exp $ * $Author: minhnn $ * $Revision: 1.8 $ * $Date: 2005/01/18 11:52:14 $ * * ==================================================================== * * Copyright (C) 2002-2005 by MyVietnam.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * All copyright notices regarding mvnForum MUST remain intact * in the scripts and in the outputted HTML. * The "powered by" text/logo with a link back to * http://www.mvnForum.com and http://www.MyVietnam.net in the * footer of the pages MUST remain visible when the pages * are viewed on the internet or intranet. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Support can be obtained from support forums at: * http://www.mvnForum.com/mvnforum/index * * Correspondence and Marketing Questions can be sent to: * info@MyVietnam.net * * @author: Igor Manic imanic@users.sourceforge.net */ package com.mvnforum.admin.importexport.mvnforum; import java.io.*; import java.util.Calendar; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.digester.Digester; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xml.sax.SAXException; import com.mvnforum.MVNForumConfig; import com.mvnforum.MVNForumGlobal; import com.mvnforum.admin.ImportWebHelper; import com.mvnforum.admin.importexport.SetParentRule; import net.myvietnam.mvncore.exception.*; /** * @author <a href="mailto:imanic@users.sourceforge.net">Igor Manic * @version $Revision: 1.8 $, $Date: 2005/01/18 11:52:14 $ * <br/> * <code>ImportMvnForum class encapsulates processing * of MVN Forum's XML or ZIP backups, and imports all the data into MVN Forum. * For details see {@link #importXml(File, HttpServletRequest, HttpServletResponse, int, String, Calendar, String, boolean, int)} * and {@link #importZip(File, HttpServletRequest, HttpServletResponse, int, String, Calendar, String, boolean, int)} * <br/> * This class cannot be instantiated. */ public class ImportMvnForum extends ImportWebHelper { /** Message log. */ private static Log log = LogFactory.getLog(ImportMvnForum.class); /** Cannot instantiate. */ private ImportMvnForum() { } // ================================================================= // ===================== MAIN PUBLIC METHODS ======================= // ================================================================= /** * This method performs processing of MVN Forum's XML backup file <code>importFile * and imports the data into the MVN Forum system. It clears the database * and files, does neccessary setup (including startup of message output), * and calls {@link #processXml(File, Calendar)} to do actual processing.<br/> * * @param importFile MVN Forum XML backup file to be imported. * @param request Current session's <code>HttpServletRequest object. * @param response Current session's <code>HttpServletResponse object. * @param logonMemberID MemberID of user who is logged in, and who initiated import process. * @param logonMemberName MemberName of user who is logged in, and who initiated import process. * @param importTime The moment when import process was started. * @param importIP From this IP address admin requested import. * @param clearIfError Should it clear/reset the database in case of error. * @param messageLevel What messages should be written to output during the process. * For details see {@link com.mvnforum.MVNForumConfig#MESSAGE_LEVEL_ALL_MESSAGES}, * {@link com.mvnforum.MVNForumConfig#MESSAGE_LEVEL_IMPORTANT_MESSAGES} and * {@link com.mvnforum.MVNForumConfig#MESSAGE_LEVEL_ONLY_ERRORS}. * * @exception ImportException If there is an error during the process. See {@link net.myvietnam.mvncore.exception.ImportException}. */ public static void importXml(File importFile, HttpServletRequest request, HttpServletResponse response, int logonMemberID, String logonMemberName, Calendar importTime, String importIP, boolean clearIfError, int messageLevel) throws ImportException { try { response.setContentType("text/html; charset=utf-8"); setOutputHtmlWriter(response.getWriter()); setMessageOutputLevel(messageLevel); startHtml(request); clearDatabase(); clearFiles(request.getSession().getServletContext()); } catch (DatabaseException e) { handleFatalError("Database error while clearing previous contents.", e, clearIfError, request); } catch (IOException e) { handleFatalError("I/O error while clearing previous contents.", e, clearIfError, request); } try { processXml(importFile, importTime); handleSuccess(request); } catch (ImportException e) { handleFatalError(e.getMessage(), e.getException(), clearIfError, request); } catch (IOException e) { handleFatalError("I/O error while reading XML file.", e, clearIfError, request); } catch (SAXException e) { if (e.getException()==null) { handleFatalError("Error while parsing uploaded XML file.", e, clearIfError, request); } else { handleFatalError("Error while parsing uploaded XML file. Detail: "+ e.getException().getMessage(), e.getException(), clearIfError, request); } } finally { /* Don't delete this XML since this method was maybe started from the * command-line, which means this file is not temporary (uploaded) * //if ((importFile!=null) && (importFile.exists())) importFile.delete(); * Anyway, if neccessary, this XML will be deleted in calling WebHandler */ } } /** * This method performs processing of MVN Forum's ZIP backup file <code>importFile * and imports the data into the MVN Forum system. It clears the database * and files, does neccessary setup (including startup of message output), * extracts the files from ZIP, and calls {@link #processXml(File, Calendar)} * to do actual processing of the main XML file (found in ZIP).<br/> * * @param importFile MVN Forum ZIP backup file to be imported. * @param request Current session's <code>HttpServletRequest object. * @param response Current session's <code>HttpServletResponse object. * @param logonMemberID MemberID of user who is logged in, and who initiated import process. * @param logonMemberName MemberName of user who is logged in, and who initiated import process. * @param importTime The moment when import process was started. * @param importIP From this IP address admin requested import. * @param clearIfError If <code>true, the database will be cleared/reset * in case of error rises during the import. Default <code>Guest * and <code>Admin users will be created. * @param messageLevel What amount of messages (informational, important, error) * will be written to output. * * @exception ImportException If there is an error during the process. See {@link net.myvietnam.mvncore.exception.ImportException}. */ public static void importZip(File importFile, HttpServletRequest request, HttpServletResponse response, int logonMemberID, String logonMemberName, Calendar importTime, String importIP, boolean clearIfError, int messageLevel) throws ImportException { File importXml=null; try { response.setContentType("text/html; charset=utf-8"); setOutputHtmlWriter(response.getWriter()); setMessageOutputLevel(messageLevel); startHtml(request); clearDatabase(); clearFiles(request.getSession().getServletContext()); } catch (DatabaseException e) { handleFatalError("Database error while clearing previous contents.", e, clearIfError, request); } catch (IOException e) { handleFatalError("I/O error while clearing previous contents.", e, clearIfError, request); } /* Now extract ZIP file into mvnForumHome, and give me back only XML file. * IMPORTANT: DON'T CALL clearFiles() AFTER THE EXTRACTION OF THE ZIP! * Otherwise, all extracted files will be deleted too */ try { addImportantMessage("Extracting the ZIP file."); importXml=extractImportZip(importFile, request); if (importXml==null) { handleFatalError("Error while extracting the file: can't find IMPORT.xml in ZIP file.", null/*error*/, clearIfError, request); } } catch (IOException e) { handleFatalError("I/O error while extracting the file.", e, clearIfError, request); } finally { importFile.delete(); importFile=null; } //from this point on, use only importXml file (importFile is deleted) try { processXml(importXml, importTime); handleSuccess(request); } catch (ImportException e) { handleFatalError(e.getMessage(), e.getException(), clearIfError, request); } catch (IOException e) { handleFatalError("I/O error while reading XML file.", e, clearIfError, request); } catch (SAXException e) { if (e.getException()==null) { handleFatalError("Error while parsing uploaded XML file.", e, clearIfError, request); } else { handleFatalError("Error while parsing uploaded XML file. Detail: "+ e.getException().getMessage(), e.getException(), clearIfError, request); } } finally { //now delete temporary XML file (extracted from ZIP, and already imported to database) if ((importFile!=null) && (importFile.exists())) importFile.delete(); if ((importXml!=null) && (importXml.exists())) importXml.delete(); } } /** * This method should unpack the zip into mvnForumHome. * It should also return importXml file (which was also extracted) */ private static File extractImportZip(File importZipFile, HttpServletRequest request) throws IOException { String avatarsDir = request.getSession().getServletContext().getRealPath(MVNForumGlobal.UPLOADED_AVATAR_DIR); String attachsDir = MVNForumConfig.getAttachmentDir(); String mvnForumHomeDir = MVNForumConfig.getMVNForumHome(); if (! new File(avatarsDir).mkdirs()) { /* Ignore, since this error will also happen when the directory * already exists, which is probably the case here, since we * didn't remove it in clearFiles() process. */ } if (! new File(attachsDir).mkdirs()) { /* Ignore, since this error will also happen when the directory * already exists, which is probably the case here, since we * didn't remove it in clearFiles() process. */ } if (!avatarsDir.endsWith(File.separator)) avatarsDir+=File.separator; if (!attachsDir.endsWith(File.separator)) attachsDir+=File.separator; if (!mvnForumHomeDir.endsWith(File.separator)) mvnForumHomeDir+=File.separator; ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(importZipFile)); File foundXmlFile = null; while (true) { // Get the next ZIP entry. Break out of the loop if there are no more. ZipEntry zipEntry = zipInputStream.getNextEntry(); if (zipEntry==null) break; // Read data from the ZIP entry. The read() method will return -1 when there are no more data to read. String srcName=zipEntry.getName(); String destPath = mvnForumHomeDir+srcName; //temp value; it'll be changed //for directory name comparisons, don't use String.startsWith() since it doesn't ignore char case (and we need that) if ((srcName.length()>=MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip.length()) && (srcName.substring(0, MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip.length()).equalsIgnoreCase(MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip))) { //addImportantMessage("Extracting \""+MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip+"\" from the backup ZIP file."); try { String thisAvatar=srcName.substring(MVNForumConfig.BACKUP_FILE_AvatarsDirNameInZip.length(), srcName.length()); //now calculate destPath, but ignore avatarsDir itself, since it's already created if (thisAvatar.length()<=0) destPath=null; else destPath=avatarsDir+thisAvatar.replace('/', File.separatorChar); } catch (StringIndexOutOfBoundsException e) { //it's probably the "AVATARS/" entry itself, so thisAvatar is empty destPath=null; } } else if ((srcName.length()>=MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip.length()) && (srcName.substring(0, MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip.length()).equalsIgnoreCase(MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip))) { //addImportantMessage("Extracting \""+MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip+"\" from the backup ZIP file."); try { String thisAttach=srcName.substring(MVNForumConfig.BACKUP_FILE_AttachsDirNameInZip.length(), srcName.length()); //now calculate destPath, but ignore attachsDir itself, since it's already created if (thisAttach.length()<=0) destPath=null; else destPath=attachsDir+thisAttach.replace('/', File.separatorChar); } catch (StringIndexOutOfBoundsException e) { //it's probably the "ATTACHMENTS/" entry itself, so thisAttach is empty destPath=null; } } else { //it isn't neither avatar nor attachment, so don't process/replace path destPath=mvnForumHomeDir+srcName.replace('/', File.separatorChar); } if ((destPath!=null) && (destPath.length()>0)) { File destFile=new File(destPath); if (zipEntry.isDirectory()) { addMessage("Extracting directory \"" +srcName +"\"."); destFile.mkdirs(); } else { addMessage("Extracting file \"" +srcName +"\", size=" +zipEntry.getSize()+"."); FileOutputStream outStream = new FileOutputStream(destFile); byte[] buffer = new byte[1024]; int n; while ((n = zipInputStream.read(buffer)) > 0) { outStream.write(buffer, 0, n); } outStream.close(); outStream=null; if (srcName.equalsIgnoreCase(MVNForumConfig.BACKUP_FILE_MainXmlFileNameInZip) || srcName.equalsIgnoreCase("/"+MVNForumConfig.BACKUP_FILE_MainXmlFileNameInZip)) { foundXmlFile=destFile; } } } zipInputStream.closeEntry(); } zipInputStream.close(); return foundXmlFile; //this method doesn't matter if IMPORT.xml doesn't exist - it will return null, and //the caller method should decide what to do then } // ================================================================= // ================== MAIN PROCESSING XML METHOD =================== // ================================================================= /** * This method performs actual processing of MVN Forum's XML file <code>inputFile * and imports the data into the MVN Forum system.<br/> * Don't use this method directly. Instead, you should use * {@link #importXml(File, HttpServletRequest, HttpServletResponse, int, String, Calendar, String, boolean, int)}. * * @param inputFile MVN Forum XML file to be imported. * @param importTime The moment when import process was started. * * @exception IOException If there is an I/O error while processing XML file. * @exception SAXException If there is an error while parsing XML file. * @exception ImportException If there is some other error during the import. */ protected static void processXml(File inputFile, Calendar importTime) throws IOException, SAXException, ImportException { addImportantMessage("Starting importing database info..."); //SAXParserFactory factory=SAXParserFactory.newInstance(); Digester digester=new Digester(); //should try new Digester(SAXParser), or Digester(XMLReader) digester.setValidating(true); digester.setNamespaceAware(true); //digester.setSchema("mvn.xsd"); /* ================================================================= * This is the main part of file - XML processing rules for Digester * ================================================================= * * NOTE: Since SetTopRule is firing the desired method at the end of * the XML element matching the pattern, I had to implement my own * SetParentRule which does exactly the same thing (calls desired * child's method with a parent object as an argument). The difference * is that it is firing the "setParent" method at the beginning of the * corresponding XML element, thus leaving me the chance to, for example, * create messages as they arrive from the XML parser, not waiting the * end of the whole document (!!!), because I can't add a message, unless * I already added it's parent messages, thread, forum and category. * * NOTE: In SetPropertiesRule (see attachment processing below), I had to * define setAttachmentId() instead of setAttachmentID(), to avoid some * strange problems that Digester has (because it tries to automatically * convert all words to first letter capital, other small, and it * doesn't handle well the case with "attachmentID" property, that is, * it doesn't "see" setAttachmentID() method). * So, I defined attachmentId property and method setAttachmentId() is * then executed OK. */ /* First, I'll create root object of class MvnForumXML. * It's constructor will create default contents of the database, including * admin member (with MemberID=1, MemberName="Admin", MemberPassword="admin"). * Later, if I find admin in XML, I'll just rewrite this default's admin data, * except for the MemberName which has to remain "Admin" and can't be changed. */ digester.addObjectCreate("mvnforum", MvnForumXML.class); digester.addSetProperties("mvnforum", "version", "mvnForumXmlVersion"); digester.addSetProperties("mvnforum", "exportDate", "mvnForumExportDate"); digester.addCallMethod("mvnforum/MemberList", "postProcessMemberList"); digester.addObjectCreate("mvnforum/MemberList/Member", MvnForumMemberXML.class); digester.addSetProperties("mvnforum/MemberList/Member", "class", "memberClass"); digester.addCallMethod("mvnforum/MemberList/Member", "addMember"); digester.addCallMethod("mvnforum/MemberList/Member/MemberName", "setMemberName", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberPassword", "setMemberPassword", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberFirstEmail", "setMemberFirstEmail", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberEmail", "setMemberEmail", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberEmailVisible", "setMemberEmailVisible", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberNameVisible", "setMemberNameVisible", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberFirstIP", "setMemberFirstIP", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberLastIP", "setMemberLastIP", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberViewCount", "setMemberViewCount", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberPostCount", "setMemberPostCount", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberCreationDate", "setMemberCreationDate", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberModifiedDate", "setMemberModifiedDate", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberExpireDate", "setMemberExpireDate", 0); //log.debug("DIGESTER:::: [ OK ]" + "mvnforum/MemberList/Member/MemberExpireDate"); digester.addCallMethod("mvnforum/MemberList/Member/MemberLastLogon", "setMemberLastLogon", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberOption", "setMemberOption", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberStatus", "setMemberStatus", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberActivateCode", "setMemberActivateCode", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberTempPassword", "setMemberTempPassword", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberMessageCount", "setMemberMessageCount", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberMessageOption", "setMemberMessageOption", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberPostsPerPage", "setMemberPostsPerPage", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberWarnCount", "setMemberWarnCount", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberVoteCount", "setMemberVoteCount", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberVoteTotalStars", "setMemberVoteTotalStars", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberRewardPoints", "setMemberRewardPoints", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberTitle", "setMemberTitle", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberTimeZone", "setMemberTimeZone", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberSignature", "setMemberSignature", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberAvatar", "setMemberAvatar", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberSkin", "setMemberSkin", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberLanguage", "setMemberLanguage", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberFirstname", "setMemberFirstname", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberLastname", "setMemberLastname", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberGender", "setMemberGender", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberBirthday", "setMemberBirthday", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberAddress", "setMemberAddress", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberCity", "setMemberCity", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberState", "setMemberState", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberCountry", "setMemberCountry", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberPhone", "setMemberPhone", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberMobile", "setMemberMobile", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberFax", "setMemberFax", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberCareer", "setMemberCareer", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberHomepage", "setMemberHomepage", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberYahoo", "setMemberYahoo", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberAol", "setMemberAol", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberIcq", "setMemberIcq", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberMsn", "setMemberMsn", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberCoolLink1", "setMemberCoolLink1", 0); digester.addCallMethod("mvnforum/MemberList/Member/MemberCoolLink2", "setMemberCoolLink2", 0); digester.addCallMethod("mvnforum/MemberList/Member/GlobalPermissionList/GlobalPermission", "addMemberPermission", 0); digester.addCallMethod("mvnforum/MemberList/Member/MessageFolderList/MessageFolder", "addMessageFolder", 4); digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderName", 0); digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderOrder", 1); digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderCreationDate", 2); digester.addCallParam("mvnforum/MemberList/Member/MessageFolderList/MessageFolder/FolderModifiedDate", 3); digester.addCallMethod("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch", "addGlobalWatch", 6); digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchType", 0); digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchOption", 1); digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchStatus", 2); digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchCreationDate", 3); digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchLastSentDate", 4); digester.addCallParam("mvnforum/MemberList/Member/GlobalWatchList/GlobalWatch/WatchEndDate", 5); digester.addCallMethod("mvnforum/GroupList", "postProcessGroupList"); digester.addObjectCreate("mvnforum/GroupList/Group", MvnForumGroupXML.class); digester.addSetProperties("mvnforum/GroupList/Group", "class", "groupClass"); digester.addCallMethod("mvnforum/GroupList/Group", "addGroup"); digester.addCallMethod("mvnforum/GroupList/Group/GroupOwnerName", "setGroupOwnerName", 0); digester.addCallMethod("mvnforum/GroupList/Group/GroupName", "setGroupName", 0); digester.addCallMethod("mvnforum/GroupList/Group/GroupDesc", "setGroupDesc", 0); digester.addCallMethod("mvnforum/GroupList/Group/GroupOption", "setGroupOption", 0); digester.addCallMethod("mvnforum/GroupList/Group/GroupCreationDate", "setGroupCreationDate", 0); digester.addCallMethod("mvnforum/GroupList/Group/GroupModifiedDate", "setGroupModifiedDate", 0); digester.addCallMethod("mvnforum/GroupList/Group/GlobalPermissionList/GlobalPermission", "addGroupPermission", 0); digester.addCallMethod("mvnforum/GroupList/Group/GroupMemberList/GroupMember", "addGroupMember", 4); digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/MemberName", 0); digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/Privilege", 1); digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/CreationDate", 2); digester.addCallParam("mvnforum/GroupList/Group/GroupMemberList/GroupMember/ModifiedDate", 3); //digester.addCallMethod("mvnforum/GuestGlobalPermissionList/GlobalPermission", "addGuestGlobalPermission", 0); //digester.addCallMethod("mvnforum/RegisteredMembersGlobalPermissionList/GlobalPermission", "addRegisteredMembersGlobalPermission", 0); digester.addObjectCreate("*/Category", MvnForumCategoryXML.class); //digester.addSetTop("*/Category", "setParentCategoryIfHave"); SetParentRule categoryParentRule = new SetParentRule("setParentCategoryIfHave"); digester.addRule("*/Category", categoryParentRule); digester.addCallMethod("*/Category", "addCategory"); digester.addCallMethod("*/Category/CategoryName", "setCategoryName", 0); digester.addCallMethod("*/Category/CategoryDesc", "setCategoryDesc", 0); digester.addCallMethod("*/Category/CategoryCreationDate", "setCategoryCreationDate", 0); digester.addCallMethod("*/Category/CategoryModifiedDate", "setCategoryModifiedDate", 0); digester.addCallMethod("*/Category/CategoryOrder", "setCategoryOrder", 0); digester.addCallMethod("*/Category/CategoryOption", "setCategoryOption", 0); digester.addCallMethod("*/Category/CategoryStatus", "setCategoryStatus", 0); digester.addCallMethod("*/Category/CategoryWatchList/CategoryWatch", "addCategoryWatch", 7); digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/MemberName", 0); digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchType", 1); digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchOption", 2); digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchStatus", 3); digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchCreationDate", 4); digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchLastSentDate", 5); digester.addCallParam("*/Category/CategoryWatchList/CategoryWatch/WatchEndDate", 6); digester.addObjectCreate("*/Forum", MvnForumForumXML.class); digester.addCallMethod("*/Forum", "addForum"); //digester.addSetTop("*/Forum", "setParentCategory"); SetParentRule forumParentRule = new SetParentRule("setParentCategory"); digester.addRule("*/Forum", forumParentRule); digester.addCallMethod("*/Forum/LastPostMemberName", "setForumLastPostMemberName", 0); digester.addCallMethod("*/Forum/ForumName", "setForumName", 0); digester.addCallMethod("*/Forum/ForumDesc", "setForumDesc", 0); digester.addCallMethod("*/Forum/ForumCreationDate", "setForumCreationDate", 0); digester.addCallMethod("*/Forum/ForumModifiedDate", "setForumModifiedDate", 0); digester.addCallMethod("*/Forum/ForumLastPostDate", "setForumLastPostDate", 0); digester.addCallMethod("*/Forum/ForumOrder", "setForumOrder", 0); digester.addCallMethod("*/Forum/ForumType", "setForumType", 0); digester.addCallMethod("*/Forum/ForumFormatOption", "setForumFormatOption", 0); digester.addCallMethod("*/Forum/ForumOption", "setForumOption", 0); digester.addCallMethod("*/Forum/ForumStatus", "setForumStatus", 0); digester.addCallMethod("*/Forum/ForumModerationMode", "setForumModerationMode", 0); digester.addCallMethod("*/Forum/ForumPassword", "setForumPassword", 0); digester.addCallMethod("*/Forum/ForumThreadCount", "setForumThreadCount", 0); digester.addCallMethod("*/Forum/ForumPostCount", "setForumPostCount", 0); digester.addCallMethod("*/Forum/MemberForumPermissionList/MemberForumPermission", "addMemberForumPermission", 2); digester.addCallParam("*/Forum/MemberForumPermissionList/MemberForumPermission/MemberName", 0); digester.addCallParam("*/Forum/MemberForumPermissionList/MemberForumPermission/ForumPermission", 1); digester.addCallMethod("*/Forum/GroupForumPermissionList/GroupForumPermission", "addGroupForumPermission", 2); digester.addCallParam("*/Forum/GroupForumPermissionList/GroupForumPermission/GroupName", 0); digester.addCallParam("*/Forum/GroupForumPermissionList/GroupForumPermission/ForumPermission", 1); //digester.addCallMethod("*/Forum/GuestForumPermissionList/ForumPermission", "addGuestForumPermission", 0); //digester.addCallMethod("*/Forum/RegisteredMembersForumPermissionList/ForumPermission", "addRegisteredMembersForumPermission", 0); digester.addCallMethod("*/Forum/ForumWatchList/ForumWatch", "addForumWatch", 7); digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/MemberName", 0); digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchType", 1); digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchOption", 2); digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchStatus", 3); digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchCreationDate", 4); digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchLastSentDate", 5); digester.addCallParam("*/Forum/ForumWatchList/ForumWatch/WatchEndDate", 6); digester.addObjectCreate("*/Thread", MvnForumThreadXML.class); //digester.addSetTop("*/Thread", "setParentForum"); SetParentRule threadParentRule = new SetParentRule("setParentForum"); digester.addRule("*/Thread", threadParentRule); digester.addCallMethod("*/Thread", "addThread"); digester.addCallMethod("*/Thread/MemberName", "setThreadMemberName", 0); digester.addCallMethod("*/Thread/LastPostMemberName", "setThreadLastPostMemberName", 0); digester.addCallMethod("*/Thread/ThreadTopic", "setThreadTopic", 0); digester.addCallMethod("*/Thread/ThreadBody", "setThreadBody", 0); digester.addCallMethod("*/Thread/ThreadVoteCount", "setThreadVoteCount", 0); digester.addCallMethod("*/Thread/ThreadVoteTotalStars", "setThreadVoteTotalStars", 0); digester.addCallMethod("*/Thread/ThreadCreationDate", "setThreadCreationDate", 0); digester.addCallMethod("*/Thread/ThreadLastPostDate", "setThreadLastPostDate", 0); digester.addCallMethod("*/Thread/ThreadType", "setThreadType", 0); digester.addCallMethod("*/Thread/ThreadOption", "setThreadOption", 0); digester.addCallMethod("*/Thread/ThreadStatus", "setThreadStatus", 0); digester.addCallMethod("*/Thread/ThreadHasPoll", "setThreadHasPoll", 0); digester.addCallMethod("*/Thread/ThreadViewCount", "setThreadViewCount", 0); digester.addCallMethod("*/Thread/ThreadReplyCount", "setThreadReplyCount", 0); digester.addCallMethod("*/Thread/ThreadIcon", "setThreadIcon", 0); digester.addCallMethod("*/Thread/ThreadDuration", "setThreadDuration", 0); digester.addCallMethod("*/Thread/ThreadWatchList/ThreadWatch", "addThreadWatch", 7); digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/MemberName", 0); digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchType", 1); digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchOption", 2); digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchStatus", 3); digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchCreationDate", 4); digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchLastSentDate", 5); digester.addCallParam("*/Thread/ThreadWatchList/ThreadWatch/WatchEndDate", 6); digester.addCallMethod("*/Thread/FavoriteThreadList/FavoriteThread", "addFavoriteThread", 5); digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/MemberName", 0); digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteCreationDate", 1); digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteType", 2); digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteOption", 3); digester.addCallParam("*/Thread/FavoriteThreadList/FavoriteThread/FavoriteStatus", 4); digester.addObjectCreate("*/Post", MvnForumPostXML.class); //digester.addSetTop("*/Post", "setParentThreadOrPost"); SetParentRule postParentRule = new SetParentRule("setParentThreadOrPost"); digester.addRule("*/Post", postParentRule); digester.addCallMethod("*/Post", "addPost"); digester.addCallMethod("*/Post/MemberName", "setPostMemberName", 0); digester.addCallMethod("*/Post/LastEditMemberName", "setPostLastEditMemberName", 0); digester.addCallMethod("*/Post/PostTopic", "setPostTopic", 0); digester.addCallMethod("*/Post/PostBody", "setPostBody", 0); digester.addCallMethod("*/Post/PostCreationDate", "setPostCreationDate", 0); digester.addCallMethod("*/Post/PostLastEditDate", "setPostLastEditDate", 0); digester.addCallMethod("*/Post/PostCreationIP", "setPostCreationIP", 0); digester.addCallMethod("*/Post/PostLastEditIP", "setPostLastEditIP", 0); digester.addCallMethod("*/Post/PostEditCount", "setPostEditCount", 0); digester.addCallMethod("*/Post/PostFormatOption", "setPostFormatOption", 0); digester.addCallMethod("*/Post/PostOption", "setPostOption", 0); digester.addCallMethod("*/Post/PostStatus", "setPostStatus", 0); digester.addCallMethod("*/Post/PostIcon", "setPostIcon", 0); digester.addCallMethod("*/Post/PostAttachCount", "setPostAttachCount", 0); digester.addObjectCreate("*/Attachment", MvnForumAttachmentXML.class); digester.addSetProperties("*/Attachment", "id", "attachmentId"); //digester.addSetTop("*/Attachment", "setParentPost"); SetParentRule attachmentParentRule = new SetParentRule("setParentPost"); digester.addRule("*/Attachment", attachmentParentRule); digester.addCallMethod("*/Attachment", "addAttachment"); digester.addCallMethod("*/Attachment/MemberName", "setAttachMemberName", 0); digester.addCallMethod("*/Attachment/AttachFilename", "setAttachFilename", 0); digester.addCallMethod("*/Attachment/AttachFileSize", "setAttachFileSize", 0); digester.addCallMethod("*/Attachment/AttachMimeType", "setAttachMimeType", 0); digester.addCallMethod("*/Attachment/AttachDesc", "setAttachDesc", 0); digester.addCallMethod("*/Attachment/AttachCreationIP", "setAttachCreationIP", 0); digester.addCallMethod("*/Attachment/AttachCreationDate", "setAttachCreationDate", 0); digester.addCallMethod("*/Attachment/AttachModifiedDate", "setAttachModifiedDate", 0); digester.addCallMethod("*/Attachment/AttachDownloadCount", "setAttachDownloadCount", 0); digester.addCallMethod("*/Attachment/AttachOption", "setAttachOption", 0); digester.addCallMethod("*/Attachment/AttachStatus", "setAttachStatus", 0); /* At this point, on top of stack we have only the root MvnForumXML object */ digester.addCallMethod("mvnforum/RankList/Rank", "addRank", 6); digester.addCallParam("mvnforum/RankList/Rank/RankMinPosts", 0); digester.addCallParam("mvnforum/RankList/Rank/RankLevel", 1); digester.addCallParam("mvnforum/RankList/Rank/RankTitle", 2); digester.addCallParam("mvnforum/RankList/Rank/RankImage", 3); digester.addCallParam("mvnforum/RankList/Rank/RankType", 4); digester.addCallParam("mvnforum/RankList/Rank/RankOption", 5); /* ================================================================== * This was the main part of file - XML processing rules for Digester * ================================================================== */ digester.parse(inputFile); try { MvnForumXML.finishImport(); } catch (CreateException e) { throw new ImportException(e.getMessage(), e); //just rethrow } catch (DuplicateKeyException e) { throw new ImportException(e.getMessage(), e); //just rethrow } catch (ObjectNotFoundException e) { throw new ImportException(e.getMessage(), e); //just rethrow } catch (DatabaseException e) { throw new ImportException(e.getMessage(), e); //just rethrow } catch (ForeignKeyNotFoundException e) { throw new ImportException(e.getMessage(), e); //just rethrow } catch (BadInputException e) { throw new ImportException(e.getMessage(), e); //just rethrow } } /** * Adds <code>message to the output stream that was setup in * {@link #importXml(File, HttpServletRequest, HttpServletResponse, int, String, Calendar, String, boolean, int)}. * <br/>This method was made public to be available to MVN Forum XML processing classes. * * @param message Message to be written to output. * @see com.mvnforum.admin.ImportWebHelper#addMessage(java.lang.String) * */ public static void addMessage(String message) { ImportWebHelper.addMessage(message); } /** * Adds important (bold) <code>message to the output stream that was setup in * {@link #importXml(File, HttpServletRequest, HttpServletResponse, int, String, Calendar, String, boolean, int)}. * <br/>This method was made public to be available to MVN Forum XML processing classes. * * @param message Message to be written to output. * @see com.mvnforum.admin.ImportWebHelper#addImportantMessage(java.lang.String) * */ public static void addImportantMessage(String message) { ImportWebHelper.addImportantMessage(message); } /** * Ensure that default entries in MVN Forum (admin and virtual guest members, rank titles, * <code>Registered Members group, ...) are created. |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.