blob: 9fe93c7069745242faceaf7edb50e6c77e6c9a5b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.lenya.cms.site;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceSelector;
import org.apache.lenya.ac.impl.AbstractAccessControlTest;
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.publication.DocumentBuildException;
import org.apache.lenya.cms.publication.DocumentFactory;
import org.apache.lenya.cms.publication.DocumentManager;
import org.apache.lenya.cms.publication.DocumentUtil;
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.publication.ResourceType;
import org.apache.lenya.cms.repository.RepositoryException;
import org.apache.lenya.cms.repository.Session;
import org.apache.lenya.cms.site.Link;
import org.apache.lenya.cms.site.SiteException;
import org.apache.lenya.cms.site.SiteManager;
import org.apache.lenya.cms.site.SiteNode;
import org.apache.lenya.cms.site.SiteStructure;
import org.apache.lenya.cms.site.simple.DocumentStore;
public class SimpleSiteManagerTest extends AbstractAccessControlTest {
protected static final String PATH = "/foo/bar";
protected static final String PARENT_PATH = "/foo";
public void testSimpleSiteManager() throws Exception {
Session session = login("lenya");
DocumentFactory factory = DocumentUtil.createDocumentFactory(getManager(), session);
Publication[] pubs = factory.getPublications();
for (int i = 0; i < pubs.length; i++) {
checkPublication(session, factory, pubs[i]);
}
}
protected void checkPublication(Session session, DocumentFactory factory, Publication pub)
throws ServiceException, SiteException, DocumentBuildException, PublicationException,
RepositoryException {
DocumentManager docManager = null;
ServiceSelector selector = null;
SiteManager siteManager = null;
ServiceSelector resourceTypeSelector = null;
try {
selector = (ServiceSelector) getManager().lookup(SiteManager.ROLE + "Selector");
siteManager = (SiteManager) selector.select(pub.getSiteManagerHint());
SiteStructure structure = siteManager.getSiteStructure(factory, pub,
Publication.AUTHORING_AREA);
docManager = (DocumentManager) getManager().lookup(DocumentManager.ROLE);
resourceTypeSelector = (ServiceSelector) getManager().lookup(
ResourceType.ROLE + "Selector");
ResourceType type = (ResourceType) resourceTypeSelector.select("entry");
String contentSourceUri = "context://sitemap.xmap";
Document doc = docManager.add(factory, type, contentSourceUri, pub,
Publication.AUTHORING_AREA, "en", "xml");
structure.add(PATH, doc);
assertTrue(structure.contains(PATH));
Document linkDoc = structure.getNode(PATH).getLink("en").getDocument();
assertSame(linkDoc, doc);
if (!(structure instanceof DocumentStore)) {
Link link = doc.getLink();
checkSetLabel(link);
}
SiteNode[] nodes = structure.getNodes();
assertTrue(nodes.length > 0);
for (int i = 0; i < nodes.length; i++) {
assertTrue(structure.contains(nodes[i].getPath()));
SiteNode node = structure.getNode(nodes[i].getPath());
assertNotNull(node);
assertEquals(nodes[i], node);
checkLinks(siteManager, node);
}
doc.getLink().delete();
assertFalse(structure.containsByUuid(doc.getUUID(), doc.getLanguage()));
assertFalse(structure.contains(PATH));
assertFalse(structure.contains(PARENT_PATH));
} finally {
if (selector != null) {
if (siteManager != null) {
selector.release(siteManager);
}
getManager().release(selector);
}
if (docManager != null) {
getManager().release(docManager);
}
if (resourceTypeSelector != null) {
getManager().release(resourceTypeSelector);
}
}
// session.commit();
}
protected void checkSetLabel(Link link) {
String newLabel = "New Label";
String oldLabel = link.getLabel();
assertFalse(oldLabel.equals(newLabel));
link.setLabel(newLabel);
assertTrue(link.getLabel().equals(newLabel));
link.setLabel(oldLabel);
}
protected void checkLinks(SiteManager siteManager, SiteNode node) throws SiteException {
String[] languages = node.getLanguages();
for (int i = 0; i < languages.length; i++) {
Link link = node.getLink(languages[i]);
assertEquals(link.getLanguage(), languages[i]);
assertNotNull(link.getLabel());
if (node.getUuid() != null) {
Document doc = link.getDocument();
assertNotNull(doc);
String docUuid = doc.getUUID();
String nodeUuid = node.getUuid();
assertNotNull(doc.getUUID());
assertEquals(docUuid, nodeUuid);
assertEquals(doc.getLanguage(), link.getLanguage());
// it may not be allowed to insert the doc twice
try {
siteManager.add("/sidebar", doc);
assertTrue("No exception thrown", false);
} catch (Exception expected) {
}
}
}
}
}