?? importmvnforum.java
字號:
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</code>
* 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);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -