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

📄 testlinkvalidation.java

📁 找了很久才找到到源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:

        testLinkValidation(MODE_XMLCONTENT_HTML_ONLY);
    }

    /**
     * Test link validation for xml pages.<p>
     * 
     * @throws Throwable if something goes wrong
     */
    public void testLinkValidationXmlPages() throws Throwable {

        echo("Testing link validation for xml pages");

        testLinkValidation(MODE_XMLPAGE);
    }

    /**
     * Deletes a resource and publish it.<p>
     * 
     * @param cms the cms context
     * @param resName the resource name
     * @param report the report
     * 
     * @throws Exception if something goes wrong
     */
    private void delete(CmsObject cms, String resName, CmsShellReport report) throws Exception {

        cms.lockResource(resName);
        cms.deleteResource(resName, CmsResource.DELETE_REMOVE_SIBLINGS);
        cms.unlockResource(resName);
        OpenCms.getPublishManager().publishResource(cms, resName, true, report);
        OpenCms.getPublishManager().waitWhileRunning();
    }

    /**
     * Restores the first version of a resource.<p>
     * 
     * @param cms the cms context
     * @param resource the resource 
     * @param report the report
     * 
     * @throws Exception if something goes wrong
     */
    private void restore(CmsObject cms, CmsResource resource, CmsShellReport report) throws Exception {

        String resName = cms.getRequestContext().getSitePath(resource);
        // restore the first historical resource
        cms.importResource(resName, resource, "import".getBytes(), null);
        List historicalVersions = cms.readAllAvailableVersions(resName);
        I_CmsHistoryResource history = (I_CmsHistoryResource)historicalVersions.get(historicalVersions.size() - 1);
        cms.restoreResourceVersion(history.getStructureId(), history.getVersion());
        cms.unlockResource(resName);
        OpenCms.getPublishManager().publishResource(cms, resName, true, report);
        OpenCms.getPublishManager().waitWhileRunning();
        cms.lockResource(resName);
    }

    /**
     * Sets the content of a xmlcontent resource.<p>
     * 
     * @param cms the cms context
     * @param filename the resource name
     * @param link1 the 1st vfs file reference to set
     * @param link2 the 2nd vfs file reference to set
     * 
     * @throws CmsException if something goes wrong 
     */
    private void setXmlContentFileRef(CmsObject cms, String filename, String link1, String link2) throws CmsException {

        CmsResource res = cms.readResource(filename);
        CmsFile file = cms.readFile(res);
        CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, file);
        if (!content.hasValue("Homepage", Locale.ENGLISH, 0) && (link1 != null)) {
            content.addValue(cms, "Homepage", Locale.ENGLISH, 0);
        }
        if (link1 != null) {
            content.getValue("Homepage", Locale.ENGLISH, 0).setStringValue(cms, link1);
        } else {
            if (content.hasValue("Homepage", Locale.ENGLISH, 0)) {
                content.removeValue("Homepage", Locale.ENGLISH, 0);
            }
        }
        if (!content.hasValue("Homepage", Locale.ENGLISH, 1) && (link2 != null)) {
            content.addValue(cms, "Homepage", Locale.ENGLISH, 1);
        }
        if (link2 != null) {
            content.getValue("Homepage", Locale.ENGLISH, 1).setStringValue(cms, link2);
        } else {
            if (content.hasValue("Homepage", Locale.ENGLISH, 1)) {
                content.removeValue("Homepage", Locale.ENGLISH, 1);
            }
        }
        file.setContents(content.marshal());
        cms.lockResource(filename);
        cms.writeFile(file);
    }

    /**
     * Sets the content of a xmlcontent resource.<p>
     * 
     * @param cms the cms context
     * @param filename the resource name
     * @param html the content to set in the text field
     * 
     * @throws CmsException if something goes wrong 
     */
    private void setXmlContentHtml(CmsObject cms, String filename, String html) throws CmsException {

        CmsResource res = cms.readResource(filename);
        CmsFile file = cms.readFile(res);
        CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, file);
        if (!content.hasValue("Text", Locale.ENGLISH, 0)) {
            content.addValue(cms, "Text", Locale.ENGLISH, 0);
        }
        content.getValue("Text", Locale.ENGLISH, 0).setStringValue(cms, html);
        file.setContents(content.marshal());
        cms.lockResource(filename);
        cms.writeFile(file);
    }

    /**
     * Test the link validation for different resource types.<p>
     * 
     * @param mode the mode: 
     *      <code>0</code> for hmlpage, 
     *      <code>1</code> for xmlcontent with html and file ref, 
     *      <code>2</code> for xmlcontent with html only, 
     *      <code>3</code> for xmlcontent with file ref only
     *       
     * @throws Exception if something goes wrong 
     */
    private void testLinkValidation(int mode) throws Exception {

        CmsObject cms = getCmsObject();
        String filename1, filename2, filename3, filename4, filename5, filename6, filename7, filename8;
        switch (mode) {
            case MODE_XMLCONTENT_BOTH:
                filename1 = "/xmlcontent1.html";
                filename2 = "/xmlcontent2.html";
                filename3 = "/xmlcontent3.html";
                filename4 = "/xmlcontent4.html";
                filename5 = "/xmlcontent5.html";
                filename6 = "/xmlcontent6.html";
                filename7 = "/xmlcontent7.html";
                filename8 = "/xmlcontent8.html";
                break;
            case MODE_XMLCONTENT_HTML_ONLY:
                filename1 = "/xmlcontent1html.html";
                filename2 = "/xmlcontent2html.html";
                filename3 = "/xmlcontent3html.html";
                filename4 = "/xmlcontent4html.html";
                filename5 = "/xmlcontent5html.html";
                filename6 = "/xmlcontent6html.html";
                filename7 = "/xmlcontent7html.html";
                filename8 = "/xmlcontent8html.html";
                break;
            case MODE_XMLCONTENT_FILEREF_ONLY:
                filename1 = "/xmlcontent1ref.html";
                filename2 = "/xmlcontent2ref.html";
                filename3 = "/xmlcontent3ref.html";
                filename4 = "/xmlcontent4ref.html";
                filename5 = "/xmlcontent5ref.html";
                filename6 = "/xmlcontent6ref.html";
                filename7 = "/xmlcontent7ref.html";
                filename8 = "/xmlcontent8ref.html";
                break;
            default:
                filename1 = "/xmlpage1.html";
                filename2 = "/xmlpage2.html";
                filename3 = "/xmlpage3.html";
                filename4 = "/xmlpage4.html";
                filename5 = "/xmlpage5.html";
                filename6 = "/xmlpage6.html";
                filename7 = "/xmlpage7.html";
                filename8 = "/xmlpage8.html";
                break;
        }

        // create files
        int type;
        if (mode > MODE_XMLPAGE) {
            type = OpenCmsTestCase.ARTICLE_TYPEID; // article
        } else {
            type = CmsResourceTypeXmlPage.getStaticTypeId();
        }
        CmsResource res1 = cms.createResource(filename1, type);
        CmsResource res2 = cms.createResource(filename2, type);
        CmsResource res3 = cms.createResource(filename3, type);
        CmsResource res4 = cms.createResource(filename4, type);
        CmsResource res5 = cms.createResource(filename5, type);
        CmsResource res6 = cms.createResource(filename6, type);
        CmsResource res7 = cms.createResource(filename7, type);

        // set the content
        String content1 = "<a href='" + filename2 + "'>file2</a><br><a href='" + filename3 + "'>file3</a>";
        String content4 = "<a href='" + filename2 + "'>file2</a>";
        String content5 = "<a href='" + filename6 + "'>file6</a>";
        String content6 = "<a href='" + filename5 + "'>file5</a>";
        CmsRelationType relType1 = null;
        switch (mode) {
            case MODE_XMLCONTENT_BOTH:
                setXmlContent(cms, filename1, content1, filename2);
                setXmlContent(cms, filename4, content4, filename2);
                setXmlContent(cms, filename5, content5, filename6);
                setXmlContent(cms, filename6, content6, filename5);
                relType1 = CmsRelationType.HYPERLINK;
                break;
            case MODE_XMLCONTENT_HTML_ONLY:
                setXmlContentHtml(cms, filename1, content1);
                setXmlContentHtml(cms, filename4, content4);
                setXmlContentHtml(cms, filename5, content5);
                setXmlContentHtml(cms, filename6, content6);
                relType1 = CmsRelationType.HYPERLINK;
                break;
            case MODE_XMLCONTENT_FILEREF_ONLY:
                setXmlContentFileRef(cms, filename1, filename2, filename3);
                setXmlContentFileRef(cms, filename4, filename2, null);
                setXmlContentFileRef(cms, filename5, filename6, null);
                setXmlContentFileRef(cms, filename6, filename5, null);
                relType1 = CmsRelationType.XML_WEAK;
                break;
            default:
                setContent(cms, filename1, content1);
                setContent(cms, filename4, content4);
                setContent(cms, filename5, content5);
                setContent(cms, filename6, content6);
                relType1 = CmsRelationType.HYPERLINK;
                break;
        }

        // check the links before publishing
        CmsShellReport report = new CmsShellReport(cms.getRequestContext().getLocale());
        cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
        Map validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res1), false),
            report);
        assertEquals(validation.size(), 1);
        assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename1)));
        List brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename1));
        assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 3 : 2));
        assertTrue(brokenLinks.contains(new CmsRelation(res1, res2, relType1)));
        assertTrue(brokenLinks.contains(new CmsRelation(res1, res3, relType1)));
        if (mode == MODE_XMLCONTENT_BOTH) {
            assertTrue(brokenLinks.contains(new CmsRelation(res1, res2, CmsRelationType.XML_WEAK)));
        }

        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res2), false),
            report);
        assertTrue(validation.isEmpty());

        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res3), false),
            report);
        assertTrue(validation.isEmpty());

        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res4), false),
            report);
        assertEquals(validation.size(), 1);
        assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename4)));
        brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename4));
        assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
        assertTrue(brokenLinks.contains(new CmsRelation(res4, res2, relType1)));
        if (mode == MODE_XMLCONTENT_BOTH) {
            assertTrue(brokenLinks.contains(new CmsRelation(res4, res2, CmsRelationType.XML_WEAK)));
        }

        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res5), false),
            report);
        assertEquals(validation.size(), 1);
        assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename5)));
        brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename5));
        assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
        assertTrue(brokenLinks.contains(new CmsRelation(res5, res6, relType1)));
        if (mode == MODE_XMLCONTENT_BOTH) {
            assertTrue(brokenLinks.contains(new CmsRelation(res5, res6, CmsRelationType.XML_WEAK)));
        }
        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res6), false),
            report);
        assertEquals(validation.size(), 1);
        assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename6)));
        brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename6));
        assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
        assertTrue(brokenLinks.contains(new CmsRelation(res6, res5, relType1)));
        if (mode == MODE_XMLCONTENT_BOTH) {
            assertTrue(brokenLinks.contains(new CmsRelation(res6, res5, CmsRelationType.XML_WEAK)));
        }

        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res7), false),
            report);
        assertTrue(validation.isEmpty());

        List res56 = new ArrayList();
        res56.add(res5);
        res56.add(res6);
        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, res56, false),
            report);
        assertTrue(validation.isEmpty());

        List res123 = new ArrayList();
        res123.add(res1);
        res123.add(res2);
        res123.add(res3);
        validation = OpenCms.getPublishManager().validateRelations(
            cms,
            OpenCms.getPublishManager().getPublishList(cms, res123, false),
            report);
        assertTrue(validation.isEmpty());

        List resAll = new ArrayList();
        resAll.add(res1);
        resAll.add(res2);
        resAll.add(res3);
        resAll.add(res4);
        resAll.add(res5);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -