testcmsxmlcontentwithvfs.java

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

JAVA
1,409
字号
        // validate the XML structure
        xmlcontent.validateXmlStructure(resolver);

        deepNestedSequence = xmlcontent.getValueSequence("DeepCascade", Locale.ENGLISH);
        assertEquals(1, deepNestedSequence.getElementCount());

        nestedSequence = xmlcontent.getValueSequence("Cascade", Locale.ENGLISH);
        assertEquals(2, nestedSequence.getElementCount());

        nestedSequence.removeValue(1);
        deepNestedSequence.removeValue(0);

        // re-create the XML content
        content = xmlcontent.toString();
        System.out.println(content);
        xmlcontent = CmsXmlContentFactory.unmarshal(content, CmsEncoder.ENCODING_UTF_8, resolver);
        // validate the XML structure
        xmlcontent.validateXmlStructure(resolver);

        deepNestedSequence = xmlcontent.getValueSequence("DeepCascade", Locale.ENGLISH);
        assertEquals(0, deepNestedSequence.getElementCount());

        nestedSequence = xmlcontent.getValueSequence("Cascade", Locale.ENGLISH);
        assertEquals(1, nestedSequence.getElementCount());
    }

    /**
     * Tests creation of the automatic XML schema XSD.
     * 
     * @throws Exception in case something goes wrong
     */
    public void testAutoXsd() throws Exception {

        org.opencms.xml.CmsXmlEntityResolver resolver = new org.opencms.xml.CmsXmlEntityResolver(null);
        org.xml.sax.InputSource source = resolver.resolveEntity(
            null,
            org.opencms.xml.CmsXmlContentDefinition.XSD_INCLUDE_OPENCMS);
        byte[] bytes = org.opencms.util.CmsFileUtil.readFully(source.getByteStream());
        String string = org.opencms.i18n.CmsEncoder.createString(bytes, "UTF-8");
        System.out.println(string);
    }

    /**
     * Test using a different XML content handler then the default handler.<p>
     * 
     * @throws Exception in case something goes wrong
     */
    public void testContentHandler() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing individual content handler for XML content");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String content;

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

        // now create the XML content
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-3.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(), TestXmlContentHandler.class.getName());
    }

    /**
     * Tests locale copy, move and remove operation on an XML content.<p>
     * 
     * @throws Exception if the test fails
     */
    public void testCopyMoveRemoveLocale() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing locale copy, move and remove operation on an XML content");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String iso = "ISO-8859-1";

        String content;
        CmsXmlContent xmlcontent;

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

        // read an existing (empty) XML content with just one locale node
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-8.xml", iso);
        xmlcontent = CmsXmlContentFactory.unmarshal(content, iso, resolver);
        // validate the XML structure
        xmlcontent.validateXmlStructure(resolver);
        List locales = xmlcontent.getLocales();
        assertEquals(1, locales.size());
        assertEquals(Locale.ENGLISH, locales.get(0));

        xmlcontent.copyLocale(Locale.ENGLISH, Locale.GERMANY);
        assertEquals(2, xmlcontent.getLocales().size());
        assertTrue(xmlcontent.hasLocale(Locale.ENGLISH));
        assertTrue(xmlcontent.hasLocale(Locale.GERMANY));

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

        xmlcontent.moveLocale(Locale.GERMANY, Locale.FRENCH);
        assertEquals(2, xmlcontent.getLocales().size());
        assertTrue(xmlcontent.hasLocale(Locale.ENGLISH));
        assertTrue(xmlcontent.hasLocale(Locale.FRENCH));
        assertFalse(xmlcontent.hasLocale(Locale.GERMANY));

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

        xmlcontent.removeLocale(Locale.ENGLISH);
        assertEquals(1, xmlcontent.getLocales().size());
        assertTrue(xmlcontent.hasLocale(Locale.FRENCH));
        assertFalse(xmlcontent.hasLocale(Locale.ENGLISH));
        assertFalse(xmlcontent.hasLocale(Locale.GERMANY));
        assertEquals(Locale.FRENCH, xmlcontent.getLocales().get(0));

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

    /**
     * Test default values in the appinfo node using a nested XML content schema.<p>
     * 
     * @throws Exception in case something goes wrong
     */
    public void testDefaultNested() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing for default values in nested XML content schemas");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String content;

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

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

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

        I_CmsXmlContentValue value1;

        value1 = xmlcontent.addValue(cms, "Title", Locale.ENGLISH, 0);
        assertEquals("Test", value1.getStringValue(cms));

        value1 = xmlcontent.addValue(cms, "Cascade[1]/Option", Locale.ENGLISH, 0);
        assertEquals("Default value from the XML", value1.getStringValue(cms));

        // check exact default mappings for nested content
        value1 = xmlcontent.addValue(cms, "Cascade[1]/Option", Locale.ENGLISH, 1);
        assertEquals("Default value from outer content definition", value1.getStringValue(cms));

        // check generic default mappings for nested content
        value1 = xmlcontent.addValue(cms, "Cascade[1]/VfsLink", Locale.ENGLISH, 1);
        assertEquals("/default/for/all/from/outer.txt", value1.getStringValue(cms));

        value1 = xmlcontent.addValue(cms, "Cascade[1]/VfsLink", Locale.ENGLISH, 2);
        assertEquals("/default/for/all/from/outer.txt", value1.getStringValue(cms));

    }

    /**
     * Test default values after a new XML content has been created.<p>
     * 
     * @throws Exception in case the test fails
     */
    public void testDefaultOnCreation() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing default values when creating an XML content resource");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        // create a new xml content article
        String xmlContentFile = "/xmlcontent/article_0005.html";
        cms.createResource(xmlContentFile, OpenCmsTestCase.ARTICLE_TYPEID);

        CmsFile file = cms.readFile(xmlContentFile);
        String content = new String(file.getContents(), CmsEncoder.ENCODING_UTF_8);
        CmsXmlContent xmlcontent = CmsXmlContentFactory.unmarshal(content, CmsEncoder.ENCODING_UTF_8, resolver);

        String value = xmlcontent.getStringValue(cms, "Title", Locale.ENGLISH);
        assertEquals("Default title value", value);

        value = xmlcontent.getStringValue(cms, "Release", Locale.ENGLISH);
        assertEquals("1114525380000", value);
    }

    /**
     * Test default values in the appinfo node using a nested XML content schema when creating a new content.<p>
     * 
     * The nested content definition must be non-optional, and must have non-optional element.<p>
     * 
     * @throws Exception in case something goes wrong
     */
    public void testDefaultOnCreationWithNested() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing for default values in nested XML content schemas when creating a new content");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String content;

        // unmarshal content definitions
        content = CmsFileUtil.readFile(
            "org/opencms/xml/content/xmlcontent-definition-3b.xsd",
            CmsEncoder.ENCODING_UTF_8);
        // store content definition in entitiy resolver
        CmsXmlEntityResolver.cacheSystemId(SCHEMA_SYSTEM_ID_3B, content.getBytes(CmsEncoder.ENCODING_UTF_8));
        content = CmsFileUtil.readFile(
            "org/opencms/xml/content/xmlcontent-definition-4b.xsd",
            CmsEncoder.ENCODING_UTF_8);
        // store content definition in entitiy resolver
        CmsXmlEntityResolver.cacheSystemId(SCHEMA_SYSTEM_ID_4B, content.getBytes(CmsEncoder.ENCODING_UTF_8));

        // create the content definition
        CmsXmlContentDefinition cd = CmsXmlContentDefinition.unmarshal(content, SCHEMA_SYSTEM_ID_4B, resolver);

        CmsXmlContent xmlcontent = CmsXmlContentFactory.createDocument(cms, Locale.ENGLISH, content, cd);

        String value = xmlcontent.getStringValue(cms, "Title", Locale.ENGLISH);
        assertEquals("Test", value);

        value = xmlcontent.getStringValue(cms, "Cascade/Option", Locale.ENGLISH);
        assertEquals("Default value from outer content definition", value);

        value = xmlcontent.getStringValue(cms, "Cascade/Option[2]", Locale.ENGLISH);
        assertEquals("Default value from outer content definition (for option node 2)", value);

        value = xmlcontent.getStringValue(cms, "Cascade/VfsLink", Locale.ENGLISH);
        assertEquals("/default/for/all/from/outer.txt", value);
    }

    /**
     * Tests the Locale settings of XMLContents with only optional elements and no element present.<p>
     * 
     * @throws Exception if the test fails
     */
    public void testEmptyLocale() throws Exception {

        CmsObject cms = getCmsObject();
        echo("Testing handling of empty locale nodes in XML content");

        CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(cms);

        String iso = "ISO-8859-1";

        String content;
        CmsXmlContent xmlcontent;

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

        // read an existing (empty) XML content with just one locale node
        content = CmsFileUtil.readFile("org/opencms/xml/content/xmlcontent-8.xml", iso);
        xmlcontent = CmsXmlContentFactory.unmarshal(content, iso, resolver);
        // validate the XML structure
        xmlcontent.validateXmlStructure(resolver);
        List locales = xmlcontent.getLocales();
        assertEquals(1, locales.size());
        assertEquals(Locale.ENGLISH, locales.get(0));

⌨️ 快捷键说明

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