📄 testlinkparseableresourcetypes.java
字号:
*/
public void testReplaceLinkParseableResource() throws Throwable {
CmsObject cms = getCmsObject();
echo("Testing 'replaceResource' method, replace link parseable with non link parseable resource");
String sourceName = "/folder1/subfolder11/subsubfolder111/jsp.jsp";
CmsResource source = cms.readResource(sourceName);
String targetName = "/folder1/image2.gif";
CmsResource target = cms.readResource(targetName);
List relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
int sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
String replacedName = "/index_created.html";
cms.lockResource(replacedName);
cms.replaceResource(replacedName, source.getTypeId(), cms.readFile(source).getContents(), null);
CmsResource replaced = cms.readResource(replacedName);
relations = cms.getRelationsForResource(replacedName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
assertRelationOperation(cms, replaced, target, sources - 1, 0);
// check the online project
CmsProject project = cms.getRequestContext().currentProject();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
assertRelationOperation(cms, replaced, target, sources, 1);
cms.getRequestContext().setCurrentProject(project);
cms.unlockResource(replacedName);
OpenCms.getPublishManager().publishResource(cms, replacedName);
OpenCms.getPublishManager().waitWhileRunning();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
relations = cms.getRelationsForResource(replacedName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
assertRelationOperation(cms, replaced, target, sources - 1, 0);
}
/**
* Test replaceResource method.<p>
*
* @throws Throwable if something goes wrong
*/
public void testReplaceNonLinkParseableResource() throws Throwable {
CmsObject cms = getCmsObject();
echo("Testing 'replaceResource' method, replace non link parseable with link parseable resource");
String sourceName = "/index.html";
CmsResource source = cms.readResource(sourceName);
String targetName = "/folder1/image2.gif";
CmsResource target = cms.readResource(targetName);
List relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
int sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
String replacedName = "/index_created.html";
cms.lockResource(replacedName);
cms.replaceResource(replacedName, source.getTypeId(), cms.readFile(source).getContents(), null);
CmsResource replaced = cms.readResource(replacedName);
assertRelationOperation(cms, replaced, target, sources + 1, 1);
// check the online project
CmsProject project = cms.getRequestContext().currentProject();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
assertRelationOperation(cms, replaced, target, sources, 0);
cms.getRequestContext().setCurrentProject(project);
cms.unlockResource(replacedName);
OpenCms.getPublishManager().publishResource(cms, replacedName);
OpenCms.getPublishManager().waitWhileRunning();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
assertRelationOperation(cms, replaced, target, sources + 1, 1);
}
/**
* Test undoChanges method.<p>
*
* @throws Throwable if something goes wrong
*/
public void testUndoChanges() throws Throwable {
CmsObject cms = getCmsObject();
echo("Testing 'undoChanges' method");
String sourceName = "/index.html";
CmsResource source = cms.readResource(sourceName);
String targetName = "/folder1/index.html";
CmsResource target = cms.readResource(targetName);
List relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertEquals(1, relations.size());
assertTrue(cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).isEmpty());
// add new relation
cms.lockResource(sourceName);
cms.addRelationToResource(sourceName, targetName, CmsRelationType.CATEGORY.getName());
relations = cms.getRelationsForResource(sourceName, CmsRelationFilter.TARGETS);
assertEquals(2, relations.size());
assertRelation(new CmsRelation(source, target, CmsRelationType.CATEGORY), (CmsRelation)relations.get(1));
relations = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES);
assertEquals(1, relations.size());
assertRelation(new CmsRelation(source, target, CmsRelationType.CATEGORY), (CmsRelation)relations.get(0));
// publish
OpenCms.getPublishManager().publishResource(cms, sourceName);
OpenCms.getPublishManager().waitWhileRunning();
// delete relation
cms.lockResource(sourceName);
cms.deleteRelationsFromResource(
sourceName,
CmsRelationFilter.TARGETS.filterResource(target).filterNotDefinedInContent());
relations = cms.getRelationsForResource(sourceName, CmsRelationFilter.TARGETS);
assertEquals(1, relations.size());
assertTrue(cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).isEmpty());
// undo changes
cms.undoChanges(sourceName, CmsResource.UNDO_CONTENT);
relations = cms.getRelationsForResource(sourceName, CmsRelationFilter.TARGETS);
assertEquals(2, relations.size());
assertRelation(new CmsRelation(source, target, CmsRelationType.CATEGORY), (CmsRelation)relations.get(1));
relations = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES);
assertEquals(1, relations.size());
assertRelation(new CmsRelation(source, target, CmsRelationType.CATEGORY), (CmsRelation)relations.get(0));
}
/**
* Test writeFile method.<p>
*
* @throws Throwable if something goes wrong
*/
public void testWriteFile() throws Throwable {
CmsObject cms = getCmsObject();
echo("Testing 'writeFile' method");
String sourceName = "/index.html";
CmsResource source = cms.readResource(sourceName);
String targetName = "/folder1/image2.gif";
CmsResource target = cms.readResource(targetName);
int sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
assertRelationOperation(cms, source, target, sources, 1);
// duplicate the english body into a new german body element
CmsFile file = cms.readFile(source);
CmsXmlPage page = CmsXmlPageFactory.unmarshal(cms, file);
page.addLocale(cms, Locale.GERMAN);
page.addValue("body", Locale.GERMAN);
page.setStringValue(cms, "body", Locale.GERMAN, page.getStringValue(cms, "body", Locale.ENGLISH));
file.setContents(page.marshal());
cms.lockResource(sourceName);
cms.writeFile(file);
// the same <link> node is reused
assertRelationOperation(cms, source, target, sources, 1);
// check the online project
CmsProject project = cms.getRequestContext().currentProject();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
List relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
assertRelationOperation(cms, source, target, sources, 1);
cms.getRequestContext().setCurrentProject(project);
cms.unlockResource(sourceName);
OpenCms.getPublishManager().publishResource(cms, sourceName);
OpenCms.getPublishManager().waitWhileRunning();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
assertRelationOperation(cms, source, target, sources, 1);
cms.getRequestContext().setCurrentProject(project);
String newLinkName = "/index_created.html";
// now add an additional link
file = cms.readFile(source);
page = CmsXmlPageFactory.unmarshal(cms, file);
page.addLocale(cms, Locale.FRENCH);
page.addValue("body", Locale.FRENCH);
page.setStringValue(cms, "body", Locale.FRENCH, "<a href='" + newLinkName + "'>French</a>");
file.setContents(page.marshal());
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertTrue(relations.isEmpty());
cms.lockResource(sourceName);
cms.writeFile(file);
assertRelationOperation(cms, source, target, sources, 2);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertEquals(relations.size(), 2); // since the source file has a sibling!
// check the online project
project = cms.getRequestContext().currentProject();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
assertRelationOperation(cms, source, target, sources, 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertTrue(relations.isEmpty());
cms.getRequestContext().setCurrentProject(project);
cms.unlockResource(sourceName);
OpenCms.getPublishManager().publishResource(cms, sourceName);
OpenCms.getPublishManager().waitWhileRunning();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
assertRelationOperation(cms, source, target, sources, 2);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertEquals(relations.size(), 1);
cms.getRequestContext().setCurrentProject(project);
// now go back
file = cms.readFile(source);
page = CmsXmlPageFactory.unmarshal(cms, file);
page.removeLocale(Locale.GERMAN);
page.removeLocale(Locale.FRENCH);
file.setContents(page.marshal());
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertEquals(relations.size(), 2); // since the source file has a sibling!
cms.lockResource(sourceName);
cms.writeFile(file);
assertRelationOperation(cms, source, target, sources, 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertTrue(relations.isEmpty());
// check the online project
project = cms.getRequestContext().currentProject();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
relations = cms.getRelationsForResource(targetName, CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
sources = cms.getRelationsForResource(targetName, CmsRelationFilter.SOURCES).size();
assertRelationOperation(cms, source, target, sources, 2);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertEquals(relations.size(), 1);
cms.getRequestContext().setCurrentProject(project);
cms.unlockResource(sourceName);
OpenCms.getPublishManager().publishResource(cms, sourceName);
OpenCms.getPublishManager().waitWhileRunning();
cms.getRequestContext().setCurrentProject(cms.readProject(CmsProject.ONLINE_PROJECT_ID));
assertRelationOperation(cms, source, target, sources, 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.TARGETS);
assertEquals(relations.size(), 1);
relations = cms.getRelationsForResource(newLinkName, CmsRelationFilter.SOURCES);
assertTrue(relations.isEmpty());
}
private void assertRelationOperation(
CmsObject cms,
CmsResource source,
CmsResource target,
int sources,
int sourceRelations) throws CmsException {
List relations = cms.getRelationsForResource(
cms.getRequestContext().removeSiteRoot(source.getRootPath()),
CmsRelationFilter.TARGETS);
assertEquals(relations.size(), sourceRelations);
if (relations.size() == 1) {
CmsRelation expected = new CmsRelation(source, target, CmsRelationType.EMBEDDED_IMAGE);
assertRelation(expected, (CmsRelation)relations.get(0));
}
relations = cms.getRelationsForResource(
cms.getRequestContext().removeSiteRoot(source.getRootPath()),
CmsRelationFilter.SOURCES);
assertTrue(relations.isEmpty());
relations = cms.getRelationsForResource(
cms.getRequestContext().removeSiteRoot(target.getRootPath()),
CmsRelationFilter.TARGETS);
assertTrue(relations.isEmpty());
relations = cms.getRelationsForResource(
cms.getRequestContext().removeSiteRoot(target.getRootPath()),
CmsRelationFilter.SOURCES);
assertEquals(relations.size(), sources);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -