/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.app.xmlui.aspect.general;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.matching.Matcher;
import org.apache.cocoon.sitemap.PatternException;
import org.apache.cocoon.util.ConfigurationUtil;
import org.apache.commons.lang.StringUtils;
import org.dspace.app.xmlui.utils.ContextUtil;
import org.dspace.app.xmlui.utils.HandleUtil;
import org.dspace.authorize.AuthorizeManager;
import org.dspace.content.DSpaceObject;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Constants;
import org.dspace.core.Context;
/**
* Use the configuration in Dspace.cfg to select paths in sitemap.xmap
*
* Original Concept, JSPUI version: Universidade do Minho at www.uminho.pt
* Sponsorship of XMLUI version: Instituto Oceanográfico de España at www.ieo.es
*
* @author Adán Román Ruiz at arvo.es
*/
public class ConfigurationMatcher extends AbstractLogEnabled implements Matcher
{
/**
* Format "keyInDspace.cfg,value,value"
* "Only property" check if it is defined(not empty),
* "property,value" check if property has this value,
* "property, value,value..." check that property has one of the following values.
* operator ! is alowed: "!property, value, value2" property has not value 1 nor value 2
* @param pattern
* name of sitemap parameter to find
* @param objectModel
* environment passed through via cocoon
* @return null or map containing value of sitemap parameter 'pattern'
*/
public Map match(String pattern, Map objectModel, Parameters parameters) throws PatternException
{
boolean not = false;
boolean itMatch = false;
if (pattern.startsWith("!")) {
not = true;
pattern = pattern.substring(1);
}
String[] expressions = pattern.split(",");
String propertyValue = ConfigurationManager.getProperty(expressions[0]);
if (expressions.length == 1) {
if (StringUtils.isNotEmpty(propertyValue)) {
itMatch = true;
} else {
itMatch = false;
}
} else {
for (int i = 1; i < expressions.length; i++) {
if (StringUtils.equalsIgnoreCase(expressions[i], propertyValue)) {
itMatch = true;
break;
}
}
itMatch = false;
}
if (itMatch && !not) {
return new HashMap();
} else if (itMatch && not) {
return null;
} else if (!itMatch && !not) {
return null;
} else if (!itMatch && not) {
return new HashMap();
}
return null;
}
}