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&c=d#anchor\">Index page</a>\n"
+ "<a href=\"/data/opencms/folder1/index.html?a2=b2&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 + -
显示快捷键?