⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 importmvnforum.java

📁 解觖java技术中后台无法上传数给的情况
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        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 + -