📄 testlinkvalidation.java
字号:
resAll.add(res6);
resAll.add(res7);
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, resAll, false),
report);
assertTrue(validation.isEmpty());
// publish
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
OpenCms.getPublishManager().publishProject(cms, report);
OpenCms.getPublishManager().waitWhileRunning();
// check links after deletion
touchResources(cms, resAll);
validation = validateAfterDelete(cms, Collections.singletonList(res1), resAll, report);
assertTrue(validation.isEmpty());
validation = validateAfterDelete(cms, Collections.singletonList(res2), resAll, report);
assertEquals(validation.size(), 2);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename1)));
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename4)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename1));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res1, res2, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res1, res2, CmsRelationType.XML_WEAK)));
}
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename4));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res4, res2, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res4, res2, CmsRelationType.XML_WEAK)));
}
validation = validateAfterDelete(cms, Collections.singletonList(res3), resAll, report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename1)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename1));
assertEquals(brokenLinks.size(), 1);
assertTrue(brokenLinks.contains(new CmsRelation(res1, res3, relType1)));
validation = validateAfterDelete(cms, Collections.singletonList(res4), resAll, report);
assertTrue(validation.isEmpty());
validation = validateAfterDelete(cms, Collections.singletonList(res5), resAll, report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename6)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename6));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res6, res5, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res6, res5, CmsRelationType.XML_WEAK)));
}
validation = validateAfterDelete(cms, Collections.singletonList(res6), resAll, report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename5)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename5));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res5, res6, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res5, res6, CmsRelationType.XML_WEAK)));
}
validation = validateAfterDelete(cms, Collections.singletonList(res7), resAll, report);
assertTrue(validation.isEmpty());
validation = validateAfterDelete(cms, res56, resAll, report);
assertTrue(validation.isEmpty());
// check links after modification
// Publishing after deleting file5 and changing the link
// from file6 on file5 to file7 must generate no errors
CmsResource file5 = cms.readResource(filename5); // keeping the id for restoration
delete(cms, filename5, report);
switch (mode) {
case 1:
setXmlContent(cms, filename6, "<a href='" + filename7 + "'>file7</a>", filename7);
break;
case 2:
setXmlContentHtml(cms, filename6, "<a href='" + filename7 + "'>file7</a>");
break;
case 3:
setXmlContentFileRef(cms, filename6, filename7, null);
break;
default:
setContent(cms, filename6, "<a href='" + filename7 + "'>file7</a>");
break;
}
List resources = new ArrayList(resAll);
resources.remove(res5);
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, resources, false),
report);
assertTrue(validation.isEmpty());
switch (mode) {
case 1:
setXmlContent(cms, filename6, content6, filename5);
break;
case 2:
setXmlContentHtml(cms, filename6, content6);
break;
case 3:
setXmlContentFileRef(cms, filename6, filename5, null);
break;
default:
setContent(cms, filename6, content6);
break;
}
restore(cms, file5, report);
// Publishing after deleting file2 and changing the link from file4 on file2 to file7
// and removing the link from file1 on file2 must generate no errors
CmsResource file2 = cms.readResource(filename2); // keeping id for restoration
delete(cms, filename2, report);
switch (mode) {
case 1:
setXmlContent(cms, filename1, "no link!", null);
setXmlContent(cms, filename4, "<a href='" + filename7 + "'>file7</a>", filename7);
break;
case 2:
setXmlContentHtml(cms, filename1, "no link!");
setXmlContentHtml(cms, filename4, "<a href='" + filename7 + "'>file7</a>");
break;
case 3:
setXmlContentFileRef(cms, filename1, null, null);
setXmlContentFileRef(cms, filename4, filename7, null);
break;
default:
setContent(cms, filename1, "no link!");
setContent(cms, filename4, "<a href='" + filename7 + "'>file7</a>");
break;
}
resources = new ArrayList(resAll);
resources.remove(res2);
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, resources, false),
report);
assertTrue(validation.isEmpty());
switch (mode) {
case 1:
setXmlContent(cms, filename1, content1, filename2);
setXmlContent(cms, filename4, content4, filename2);
break;
case 2:
setXmlContentHtml(cms, filename1, content1);
setXmlContentHtml(cms, filename4, content4);
break;
case 3:
setXmlContentFileRef(cms, filename1, filename2, filename3);
setXmlContentFileRef(cms, filename4, filename2, null);
break;
default:
setContent(cms, filename1, content1);
setContent(cms, filename4, content4);
break;
}
restore(cms, file2, report);
// Publishing just file7 after creating a new file8 and creating a link
// from file7 to file8 must generate one error
CmsResource res8 = cms.createResource(filename8, type);
switch (mode) {
case 1:
setXmlContent(cms, filename7, "<a href='" + filename8 + "'>file8</a>", filename8);
break;
case 2:
setXmlContentHtml(cms, filename7, "<a href='" + filename8 + "'>file8</a>");
break;
case 3:
setXmlContentFileRef(cms, filename7, filename8, null);
break;
default:
setContent(cms, filename7, "<a href='" + filename8 + "'>file8</a>");
break;
}
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res7), false),
report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename7)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename7));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res7, res8, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res7, res8, CmsRelationType.XML_WEAK)));
}
// Publishing after creating a new file8 and creating a link
// from file7 to file8 must generate no errors
List res78 = new ArrayList();
res78.add(res7);
res78.add(res8);
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, res78, false),
report);
assertTrue(validation.isEmpty());
// Linking file8 to file7
switch (mode) {
case 1:
setXmlContent(cms, filename8, "<a href='" + filename7 + "'>file7</a>", filename7);
break;
case 2:
setXmlContentHtml(cms, filename8, "<a href='" + filename7 + "'>file7</a>");
break;
case 3:
setXmlContentFileRef(cms, filename8, filename7, null);
break;
default:
setContent(cms, filename8, "<a href='" + filename7 + "'>file7</a>");
break;
}
// first publish
OpenCms.getPublishManager().publishResource(cms, filename7);
OpenCms.getPublishManager().publishResource(cms, filename8);
OpenCms.getPublishManager().waitWhileRunning();
// now check the link validation if you want to delete one of them
cms.lockResource(filename7);
cms.deleteResource(filename7, CmsResource.DELETE_PRESERVE_SIBLINGS);
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(
cms,
Collections.singletonList(cms.readResource(filename7, CmsResourceFilter.ALL)),
false),
report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename7)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename7));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res8, res7, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res8, res7, CmsRelationType.XML_WEAK)));
}
// then check the link if you want to delete them together
cms.lockResource(filename8);
cms.deleteResource(filename8, CmsResource.DELETE_PRESERVE_SIBLINGS);
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
res78 = new ArrayList();
res78.add(cms.readResource(filename7, CmsResourceFilter.ALL));
res78.add(cms.readResource(filename8, CmsResourceFilter.ALL));
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, res78, false),
report);
assertTrue(validation.isEmpty());
}
/**
* Touch all resources in the given list.<p>
*
* @param cms the cms context
* @param resources the resources to touch
* @throws CmsException if something goes wrong
*/
private void touchResources(CmsObject cms, List resources) throws CmsException {
Iterator it = resources.iterator();
while (it.hasNext()) {
CmsResource resource = (CmsResource)it.next();
String resName = cms.getRequestContext().removeSiteRoot(resource.getRootPath());
cms.lockResource(resName);
cms.setDateLastModified(resName, System.currentTimeMillis(), false);
}
}
/**
* Validates the links after the deletion of all the given resources.<p>
*
* @param cms the cms context
* @param resources the resources to delete
* @param allResources the resource context
* @param report the report
*
* @return the validation map
*
* @throws Exception if something goes wrong
*/
private Map validateAfterDelete(CmsObject cms, List resources, List allResources, CmsShellReport report)
throws Exception {
List otherRes = new ArrayList(allResources);
Iterator itRes = resources.iterator();
while (itRes.hasNext()) {
CmsResource resource = (CmsResource)itRes.next();
String resName = cms.getRequestContext().getSitePath(resource);
delete(cms, resName, report);
otherRes.remove(resource);
}
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
Map validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, otherRes, false),
report);
itRes = resources.iterator();
while (itRes.hasNext()) {
CmsResource resource = (CmsResource)itRes.next();
restore(cms, resource, report);
}
touchResources(cms, resources);
return validation;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -