All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.xml.content.TestCmsXmlContentDefinition Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software GmbH & Co. KG, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.xml.content;

import org.opencms.i18n.CmsEncoder;
import org.opencms.test.OpenCmsTestCase;
import org.opencms.util.CmsFileUtil;
import org.opencms.xml.CmsXmlContentDefinition;
import org.opencms.xml.CmsXmlEntityResolver;
import org.opencms.xml.CmsXmlException;
import org.opencms.xml.types.CmsXmlDateTimeValue;
import org.opencms.xml.types.CmsXmlStringValue;

import java.io.StringWriter;
import java.util.Locale;

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * Tests for generating an XML content definition.

* */ public class TestCmsXmlContentDefinition extends OpenCmsTestCase { /** The schema id. */ private static final String SCHEMA_SYSTEM_ID_1B = "http://www.opencms.org/test1b.xsd"; /** * Default JUnit constructor.

* * @param arg0 JUnit parameters */ public TestCmsXmlContentDefinition(String arg0) { super(arg0); } /** * Basic test for xml content definitions.

* * @throws Exception in case an error occurred */ public void testCmsXmlContentDefiniton() throws Exception { CmsXmlContentDefinition cd1 = new CmsXmlContentDefinition("Article", null); cd1.addType(new CmsXmlStringValue("Author", "1", "1")); cd1.addType(new CmsXmlStringValue("Teaser", "0", "1")); cd1.addType(new CmsXmlStringValue("Toaster", "1", String.valueOf(Integer.MAX_VALUE))); cd1.addType(new CmsXmlStringValue("Rollercoaster", "3", "10")); Document schema; StringWriter out; out = new StringWriter(); schema = cd1.getSchema(); XMLWriter writer; // output the schema XML writer = new XMLWriter(out, OutputFormat.createPrettyPrint()); writer.write(schema); writer.flush(); System.out.println(out.toString()); CmsXmlContentDefinition cd2 = CmsXmlContentDefinition.unmarshal(out.toString().getBytes(), null, null); out = new StringWriter(); schema = cd2.getSchema(); // output the schema XML writer = new XMLWriter(out, OutputFormat.createPrettyPrint()); writer.write(schema); writer.flush(); System.out.println(out.toString()); assertEquals(cd1, cd2); cd1.addType(new CmsXmlStringValue("AddedLater", "1", "1")); assertFalse(cd1.equals(cd2)); } /** * Tests creation of an XML content from a XML content definition.

* * @throws Exception if something goes wrong */ public void testCreateXmlContent() throws Exception { String schemaUri = "http://www.opencms.org/test.xsd"; CmsXmlContentDefinition cd1 = new CmsXmlContentDefinition("Article", schemaUri); cd1.addType(new CmsXmlStringValue("Author", "1", "1")); cd1.addType(new CmsXmlStringValue("Teaser", "1", "1")); cd1.addType(new CmsXmlStringValue("Text", "1", "1")); cd1.addType(new CmsXmlDateTimeValue("Date", "1", "1")); cd1.addType(new CmsXmlStringValue("Option", "0", "1")); CmsXmlEntityResolver.cacheSystemId(schemaUri, cd1.getSchema().asXML().getBytes(CmsEncoder.ENCODING_UTF_8)); CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(null); Locale locale = Locale.ENGLISH; CmsXmlContent content = CmsXmlContentFactory.createDocument(null, locale, CmsEncoder.ENCODING_UTF_8, cd1); content.validateXmlStructure(resolver); // change cd to break validation cd1.addType(new CmsXmlStringValue("Kaputt", "1", "1")); CmsXmlEntityResolver.cacheSystemId(schemaUri, cd1.getSchema().asXML().getBytes(CmsEncoder.ENCODING_UTF_8)); try { content.validateXmlStructure(resolver); fail("Validation wrongly works with modified cd"); } catch (CmsXmlException e) { // this is expected, so no error } String schemaUri2 = "http://www.opencms.org/test2.xsd"; CmsXmlContentDefinition cd2 = new CmsXmlContentDefinition("ArticleList", "Article", schemaUri2); cd2.addType(new CmsXmlStringValue("Author", "1", "1")); cd2.addType(new CmsXmlStringValue("Teaser", "1", "1")); cd2.addType(new CmsXmlStringValue("Text", "1", "1")); cd2.addType(new CmsXmlDateTimeValue("Date", "1", "1")); cd2.addType(new CmsXmlStringValue("Option", "0", "1")); CmsXmlEntityResolver.cacheSystemId(schemaUri2, cd2.getSchema().asXML().getBytes(CmsEncoder.ENCODING_UTF_8)); CmsXmlEntityResolver resolver2 = new CmsXmlEntityResolver(null); CmsXmlContent content2 = CmsXmlContentFactory.createDocument( null, Locale.ENGLISH, CmsEncoder.ENCODING_UTF_8, cd2); content2.validateXmlStructure(resolver2); // output the schema XML System.out.println(content.toString()); } /** * Tests XML content definition with a different inner / outer sequence name.

* * @throws Exception if something goes wrong */ public void testDifferentInnerOuterName() throws Exception { CmsXmlEntityResolver resolver = new CmsXmlEntityResolver(null); String content; // unmarshal content definition content = CmsFileUtil.readFile( "org/opencms/xml/content/xmlcontent-definition-1b.xsd", CmsEncoder.ENCODING_UTF_8); CmsXmlContentDefinition cd1 = CmsXmlContentDefinition.unmarshal(content, SCHEMA_SYSTEM_ID_1B, resolver); Document schema; StringWriter out; out = new StringWriter(); schema = cd1.getSchema(); XMLWriter writer; // output the schema XML writer = new XMLWriter(out, OutputFormat.createPrettyPrint()); writer.write(schema); writer.flush(); System.out.println(out.toString()); CmsXmlContentDefinition cd2 = new CmsXmlContentDefinition("Outer", "Inner", SCHEMA_SYSTEM_ID_1B); cd2.addType(new CmsXmlStringValue("E1", "1", "1")); cd2.addType(new CmsXmlStringValue("E2", "1", "1")); out = new StringWriter(); schema = cd2.getSchema(); // output the schema XML writer = new XMLWriter(out, OutputFormat.createPrettyPrint()); writer.write(schema); writer.flush(); System.out.println(out.toString()); assertEquals(cd1, cd2); CmsXmlContentDefinition cd3 = CmsXmlContentDefinition.unmarshal(out.toString().getBytes(), null, null); out = new StringWriter(); schema = cd3.getSchema(); // output the schema XML writer = new XMLWriter(out, OutputFormat.createPrettyPrint()); writer.write(schema); writer.flush(); System.out.println(out.toString()); assertEquals(cd1, cd3); cd2.addType(new CmsXmlStringValue("AddedLater", "1", "1")); assertEquals(cd1, cd3); assertFalse(cd2.equals(cd1)); assertFalse(cd2.equals(cd3)); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy