testcmsxmlcontentwithvfs.java

来自「找了很久才找到到源代码」· Java 代码 · 共 1,409 行 · 第 1/5 页

JAVA
1,409
字号

        // create a fresh XML content based on the schema and try again  
        xmlcontent = CmsXmlContentFactory.createDocument(null, Locale.ENGLISH, CmsEncoder.ENCODING_UTF_8, cd1);
        xmlcontent.validateXmlStructure(resolver);

        locales = xmlcontent.getLocales();
        assertEquals(1, locales.size());
        assertEquals(Locale.ENGLISH, locales.get(0));
    }

    /**
     * Test using the GUI widget mapping appinfo nodes.<p>
     * 
     * @throws Exception in case something goes wrong
     */
    public void testLayoutWidgetMapping() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing mapping of the XML content GUI to different widgets");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String content;

        // unmarshal content definition
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-definition-5.xsd", CmsEncoder.ENCODING_UTF_8);
        CmsXmlContentDefinition definition = CmsXmlContentDefinition.unmarshal(content, SCHEMA_SYSTEM_ID_5, resolver);
        // store content definition in entitiy resolver
        CmsXmlEntityResolver.cacheSystemId(SCHEMA_SYSTEM_ID_5, content.getBytes(CmsEncoder.ENCODING_UTF_8));

        // now read the XML content
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-5.xml", CmsEncoder.ENCODING_UTF_8);
        CmsXmlContent xmlcontent = CmsXmlContentFactory.unmarshal(content, CmsEncoder.ENCODING_UTF_8, resolver);

        // validate the XML structure
        xmlcontent.validateXmlStructure(resolver);

        I_CmsWidget widget;
        I_CmsXmlContentHandler handler = definition.getContentHandler();

        // make sure the selected widgets are of the configured "non-standard" type
        widget = handler.getWidget(xmlcontent.getValue("Title", Locale.ENGLISH));
        assertNotNull(widget);
        assertEquals(CmsCheckboxWidget.class.getName(), widget.getClass().getName());
        assertEquals("Configuration for Title", handler.getConfiguration(xmlcontent.getValue("Title", Locale.ENGLISH)));

        // make sure the alias name works
        widget = handler.getWidget(xmlcontent.getValue("Test", Locale.ENGLISH));
        assertNotNull(widget);
        assertEquals(CmsHtmlWidget.class.getName(), widget.getClass().getName());
        assertEquals("Configuration for Test", handler.getConfiguration(xmlcontent.getValue("Test", Locale.ENGLISH)));

        // make sure the custom class name works
        widget = handler.getWidget(xmlcontent.getValue("Toast", Locale.ENGLISH));
        assertNotNull(widget);
        assertEquals(TestCustomInputWidgetImpl.class.getName(), widget.getClass().getName());
        assertEquals("Configuration for Toast", handler.getConfiguration(xmlcontent.getValue("Toast", Locale.ENGLISH)));
        // custom widget configuration has extended the handler String
        assertEquals("Configuration for Toast[some addition here]", widget.getConfiguration());
    }

    /**
     * Test resolving the links from an XML content.<p>
     * 
     * @throws Exception in case something goes wrong
     */
    public void testLinkResolver() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing link resolver for XML content");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String content;

        // unmarshal content definition
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-definition-2.xsd", CmsEncoder.ENCODING_UTF_8);
        CmsXmlContentDefinition definition = CmsXmlContentDefinition.unmarshal(content, SCHEMA_SYSTEM_ID_2, resolver);
        // store content definition in entitiy resolver
        CmsXmlEntityResolver.cacheSystemId(SCHEMA_SYSTEM_ID_2, content.getBytes(CmsEncoder.ENCODING_UTF_8));

        // now create the XML content
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-2.xml", CmsEncoder.ENCODING_UTF_8);
        CmsXmlContent xmlcontent = CmsXmlContentFactory.unmarshal(content, CmsEncoder.ENCODING_UTF_8, resolver);

        assertTrue(xmlcontent.hasValue("Html", Locale.ENGLISH));
        assertTrue(xmlcontent.hasValue("VfsLink", Locale.ENGLISH));
        assertSame(definition.getContentHandler().getClass().getName(), CmsDefaultXmlContentHandler.class.getName());

        CmsXmlHtmlValue htmlValue = (CmsXmlHtmlValue)xmlcontent.getValue("Html", Locale.ENGLISH);
        CmsXmlVfsFileValue vfsValue = (CmsXmlVfsFileValue)xmlcontent.getValue("VfsLink", Locale.ENGLISH);

        // must set the value again to ensure link table is properly initialized
        htmlValue.setStringValue(cms, htmlValue.getStringValue(cms));
        vfsValue.setStringValue(cms, vfsValue.getStringValue(cms));

        Iterator i;
        CmsLinkTable table;

        String retranslatedOutput = htmlValue.getStringValue(cms);
        assertEquals("Incorrect links in resulting output", "<a href=\"http://www.alkacon.com\">Alkacon</a>\n"
            + "<a href=\"/data/opencms/index.html\">Index page</a>\n"
            + "<a href=\"/data/opencms/folder1/index.html?a=b&amp;c=d#anchor\">Index page</a>\n"
            + "<a href=\"/data/opencms/folder1/index.html?a2=b2&amp;c2=d2\">Index page with unescaped ampersand</a>",
        // note that the & in the links appear correctly escaped here
            retranslatedOutput.trim());

        table = htmlValue.getLinkTable();
        assertEquals(4, table.size());

        i = table.iterator();
        int result = 0;
        while (i.hasNext()) {
            // iterate all links and check if the required values are found
            CmsLink link = (CmsLink)i.next();
            if (link.getTarget().equals("/sites/default/index.html") && link.isInternal()) {
                result++;
            } else if (link.getTarget().equals("http://www.alkacon.com") && !link.isInternal()) {
                result++;
            } else if (link.getTarget().equals("/sites/default/folder1/index.html")
                && link.getQuery().equals("a=b&c=d") // at this point the & in the link should be unescaped
                && link.getAnchor().equals("anchor")
                && link.isInternal()) {
                result++;
            } else if (link.getTarget().equals("/sites/default/folder1/index.html")
                && link.getQuery().equals("a2=b2&c2=d2") // at this point the & in the link should be unescaped
                && link.isInternal()) {
                result++;
            }
        }

        assertEquals(4, result);

        CmsLink link = vfsValue.getLink(cms);
        assertEquals("/sites/default/index.html", link.getTarget());
        assertTrue(link.isInternal());
        assertEquals("/index.html", vfsValue.getStringValue(cms));
    }

    /**
     * Test resolving a {@link CmsXmlVarLinkValue} in an XML content.<p>
     * 
     * @throws Exception in case something goes wrong
     */
    public void testVarLinkResolver() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing link CmsXmlVarLinkValue in an XML content");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String content;

        // unmarshal content definition
        content = CmsFileUtil.readFile(
            "org/opencms/xml/content/xmlcontent-VarLink-definition-1.xsd",
            CmsEncoder.ENCODING_UTF_8);
        String schemaId = "http://www.opencms.org/testVarLink1.xsd";
        CmsXmlContentDefinition definition = CmsXmlContentDefinition.unmarshal(content, schemaId, resolver);
        // store content definition in entitiy resolver
        CmsXmlEntityResolver.cacheSystemId(schemaId, content.getBytes(CmsEncoder.ENCODING_UTF_8));

        // now create the XML content
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-VarLink-1.xml", CmsEncoder.ENCODING_UTF_8);
        CmsXmlContent xmlcontent = CmsXmlContentFactory.unmarshal(content, CmsEncoder.ENCODING_UTF_8, resolver);

        assertTrue(xmlcontent.hasValue("VfsLink", Locale.ENGLISH));
        assertTrue(xmlcontent.hasValue("VarLink", Locale.ENGLISH));
        assertSame(definition.getContentHandler().getClass().getName(), CmsDefaultXmlContentHandler.class.getName());

        CmsXmlVfsFileValue vfsValue = (CmsXmlVfsFileValue)xmlcontent.getValue("VfsLink", Locale.ENGLISH);
        CmsXmlVarLinkValue varValue1 = (CmsXmlVarLinkValue)xmlcontent.getValue("VarLink", Locale.ENGLISH, 0);
        CmsXmlVarLinkValue varValue2 = (CmsXmlVarLinkValue)xmlcontent.getValue("VarLink", Locale.ENGLISH, 1);

        // make sure the XML unmarshals as expected
        CmsLink link = vfsValue.getLink(cms);
        assertEquals("/sites/default/index.html", link.getTarget());
        assertTrue(link.isInternal());
        assertEquals("/index.html", vfsValue.getStringValue(cms));

        CmsLink varLink1 = varValue1.getLink(cms);
        assertEquals("/sites/default/index.html", varLink1.getTarget());
        assertTrue(varLink1.isInternal());
        assertEquals("/index.html", varValue1.getStringValue(cms));

        CmsLink varLink2 = varValue2.getLink(cms);
        assertEquals("http://www.alkacon.com", varLink2.getTarget());
        assertFalse(varLink2.isInternal());

        // now set some VarLinks with different types of targets

        // simple external link
        CmsXmlVarLinkValue varVal;
        CmsLink varLink;

        varVal = (CmsXmlVarLinkValue)xmlcontent.addValue(cms, "VarLink", Locale.ENGLISH, 2);
        varVal.setStringValue(cms, "http://www.opencms.org");
        varLink = varVal.getLink(cms);
        assertEquals("http://www.opencms.org", varLink.getTarget());
        assertFalse(varLink.isInternal());

        // internal link to an existing file
        varVal = (CmsXmlVarLinkValue)xmlcontent.addValue(cms, "VarLink", Locale.ENGLISH, 3);
        varVal.setStringValue(cms, "/folder1/page1.html");
        varLink = varVal.getLink(cms);
        assertEquals("/sites/default/folder1/page1.html", varLink.getTarget());
        assertTrue(varLink.isInternal());
        assertEquals("/folder1/page1.html", varVal.getStringValue(cms));

        // internal link to a not existing file
        varVal = (CmsXmlVarLinkValue)xmlcontent.addValue(cms, "VarLink", Locale.ENGLISH, 4);
        varVal.setStringValue(cms, "/folder_notexist/page_i_dont_exist.html");
        varLink = varVal.getLink(cms);
        assertEquals("/sites/default/folder_notexist/page_i_dont_exist.html", varLink.getTarget());
        assertTrue(varLink.isInternal());
        assertEquals("/folder_notexist/page_i_dont_exist.html", varVal.getStringValue(cms));

        // internal link using the server prefix to an existing file
        varVal = (CmsXmlVarLinkValue)xmlcontent.addValue(cms, "VarLink", Locale.ENGLISH, 5);
        varVal.setStringValue(cms, "http://localhost:8080/folder1/page1.html");
        varLink = varVal.getLink(cms);
        assertEquals("/sites/default/folder1/page1.html", varLink.getTarget());
        assertTrue(varLink.isInternal());
        assertEquals("/folder1/page1.html", varVal.getStringValue(cms));

        // internal link using the server prefix to a not existing file
        varVal = (CmsXmlVarLinkValue)xmlcontent.addValue(cms, "VarLink", Locale.ENGLISH, 6);
        varVal.setStringValue(cms, "http://localhost:8080/folder_notexist/page_i_dont_exist.html");
        varLink = varVal.getLink(cms);
        assertEquals("/sites/default/folder_notexist/page_i_dont_exist.html", varLink.getTarget());
        assertTrue(varLink.isInternal());
        assertEquals("/folder_notexist/page_i_dont_exist.html", varVal.getStringValue(cms));

        // output the XML content after modifications
        echo("XML Content after VarLink modification:");
        echo(xmlcontent.toString());
        echo("-----------------");

        // create the content definition
        CmsXmlContentDefinition cd = CmsXmlContentDefinition.unmarshal(content, schemaId, resolver);
        CmsXmlContent newContent = CmsXmlContentFactory.createDocument(
            cms,
            Locale.ENGLISH,
            CmsEncoder.ENCODING_UTF_8,
            cd);

        echo("New XML Content for VarLink:");
        echo(newContent.toString());
        echo("-----------------");

        // validate the XML of the created XML content
        xmlcontent.validateXmlStructure(resolver);

        // validate the XML of the created XML content
        newContent.validateXmlStructure(resolver);
    }

    /**
     * Tests the macros in messages and default values.<p>
     * 
     * @throws Exception in case something goes wrong
     */
    public void testMacros() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing macros in the XML content");

        CmsUser admin = cms.getRequestContext().currentUser();
        admin.setFirstname("Hans");
        admin.setLastname("Mustermann");
        admin.setEmail("hans.mustermann@germany.de");
        admin.setAddress("Heidestra遝 17, M黱chen");
        cms.writeUser(admin);

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String content;
        CmsXmlContent xmlcontent;

        // unmarshal content definition
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-definition-9.xsd", CmsEncoder.ENCODING_UTF_8);
        // store content definition in entitiy resolver

⌨️ 快捷键说明

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