package nl.gertontenham.magnolia.templating.tools.managers;
import info.magnolia.cms.beans.config.URI2RepositoryManager;
import info.magnolia.cms.beans.config.URI2RepositoryMapping;
import info.magnolia.link.Link;
import nl.gertontenham.magnolia.templating.managers.SiteManager;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.util.Collection;
import java.util.TreeSet;
/**
* Magnolia Uri2RepositoryManager implementation. Will be used in /server/URI2RepositoryMapping/class
*
* This implementation extends the normal Uri2RepositoryMappings with the ones configured in the SiteManager app.
*
*/
public class SiteURI2RepositoryManager extends URI2RepositoryManager {
private static Logger log = LoggerFactory.getLogger(SiteURI2RepositoryManager.class);
private SiteManager sitemanager;
@Inject
public SiteURI2RepositoryManager(SiteManager sitemanager) {
super();
this.sitemanager = sitemanager;
}
public SiteURI2RepositoryManager() { super(); }
/**
* Override to use getMappings method instead of mappings property.
* @param uri
* @return
*/
@Override
public URI2RepositoryMapping getMapping(String uri) {
for (URI2RepositoryMapping mapping : getMappings()) {
if (mapping.matches(uri)) {
return mapping;
}
}
return getDefaultMapping();
}
/**
* Override to use getMappings method instead of mappings property. Changed deprecated usage of getRepository
* @param uuidLink
* @return
*/
@Override
public String getURI(Link uuidLink) {
for (URI2RepositoryMapping mapping : getMappings()) {
if (StringUtils.equals(mapping.getRepository(), uuidLink.getWorkspace()) && uuidLink.getPath().startsWith(mapping.getHandlePrefix())) {
final String uri = mapping.getURI(uuidLink);
return uri;
}
}
return getDefaultMapping().getURI(uuidLink);
}
/**
* Override method to add own configured URI2RepositoryMappings before standard mappings
*
* @return
*/
@Override
public Collection<URI2RepositoryMapping> getMappings() {
TreeSet<URI2RepositoryMapping> mappings = new TreeSet<URI2RepositoryMapping>(getMappingComparator());
// Get beans domain mappings if exists for current browser url and add them to mappings
mappings.addAll(sitemanager.getCurrentSiteUriMappings());
// Add URI2Repository mappings defined in server beans
mappings.addAll(super.getMappings());
return mappings;
}
}