/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.config;
import org.exoplatform.services.jcr.util.StringNumberParser;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Created by The eXo Platform SAS.
*
* @author <a href="mailto:geaz@users.sourceforge.net">Gennady Azarenkov </a>
* @version $Id: MappedParametrizedObjectEntry.java 1807 2005-08-28 13:34:58Z geaz $
*/
public abstract class MappedParametrizedObjectEntry
{
private static final Log LOG = ExoLogger
.getLogger("org.exoplatform.services.jcr.config.MappedParametrizedObjectEntry");
protected String type;
protected Map<String, SimpleParameterEntry> parameters = new LinkedHashMap<String, SimpleParameterEntry>();
public MappedParametrizedObjectEntry()
{
}
public MappedParametrizedObjectEntry(String type, List<SimpleParameterEntry> parameters)
{
this.type = type;
setParameters(parameters);
}
public Collection<SimpleParameterEntry> getParameters()
{
return parameters.values();
}
public Iterator<SimpleParameterEntry> getParameterIterator()
{
return parameters.values().iterator();
}
public boolean hasParameters()
{
return !parameters.isEmpty();
}
public boolean hasParameter(String name)
{
return parameters.containsKey(name);
}
/**
* Parse named parameter.
*
* @param name
* parameter name
* @return String
* @throws RepositoryConfigurationException
*/
public String getParameterValue(String name) throws RepositoryConfigurationException
{
String value = getParameterValue(name, null);
if (value == null)
throw new RepositoryConfigurationException("Parameter " + name + " not found ");
return value;
}
/**
* Parse named parameter.
*
* @param name
* parameter name
* @param defaultValue
* default value
* @return String
*/
public String getParameterValue(String name, String defaultValue)
{
String value = defaultValue;
SimpleParameterEntry p = parameters.get(name);
if (p != null)
{
value = p.getValue();
}
return value;
}
public void putParameterValue(String name, String value)
{
SimpleParameterEntry p = parameters.get(name);
if (p != null)
{
p.setValue(value);
return;
}
SimpleParameterEntry newParam = new SimpleParameterEntry(name, value);
addParameter(newParam);
}
/**
* Parse named parameter as Integer.
*
* @param name
* parameter name
* @param defaultValue
* default Integer value
* @return Integer value
*/
public Integer getParameterInteger(String name, Integer defaultValue)
{
String value = getParameterValue(name, null);
if (value != null)
{
try
{
return StringNumberParser.parseInt(value);
}
catch (NumberFormatException e)
{
if (LOG.isTraceEnabled())
{
LOG.trace("An exception occurred: " + e.getMessage());
}
}
}
return defaultValue;
}
/**
* Set parameter as integer
*
* @param name
* @param value
*/
public void putIntegerParameter(String name, Integer value)
{
putParameterValue(name, value.toString());
}
/**
* Parse named parameter as Integer.
*
* @param name
* parameter name
* @return Integer value
* @throws RepositoryConfigurationException
*/
public Integer getParameterInteger(String name) throws RepositoryConfigurationException
{
try
{
return StringNumberParser.parseInt(getParameterValue(name));
}
catch (NumberFormatException e)
{
throw new RepositoryConfigurationException(name + ": unparseable Integer. " + e, e);
}
}
/**
* Parse named parameter as Long.
*
* @param name
* parameter name
* @param defaultValue
* default Long value
* @return Long value
*/
public Long getParameterLong(String name, Long defaultValue)
{
String value = getParameterValue(name, null);
if (value != null)
{
try
{
return StringNumberParser.parseLong(value);
}
catch (NumberFormatException e)
{
if (LOG.isTraceEnabled())
{
LOG.trace("An exception occurred: " + e.getMessage());
}
}
}
return defaultValue;
}
/**
* Parse named parameter as Long.
*
* @param name
* parameter name
* @return Long value
* @throws RepositoryConfigurationException
*/
public Long getParameterLong(String name) throws RepositoryConfigurationException
{
try
{
return StringNumberParser.parseLong(getParameterValue(name));
}
catch (NumberFormatException e)
{
throw new RepositoryConfigurationException(name + ": unparseable Long. " + e, e);
}
}
/**
* Parse named parameter as Double.
*
* @param name
* parameter name
* @param defaultValue
* default Double value
* @return Double value
*/
public Double getParameterDouble(String name, Double defaultValue)
{
String value = getParameterValue(name, null);
if (value != null)
{
try
{
return StringNumberParser.parseDouble(value);
}
catch (NumberFormatException e)
{
if (LOG.isTraceEnabled())
{
LOG.trace("An exception occurred: " + e.getMessage());
}
}
}
return defaultValue;
}
/**
* Parse named parameter as Double.
*
* @param name
* parameter name
* @return Double value
* @throws RepositoryConfigurationException
*/
public Double getParameterDouble(String name) throws RepositoryConfigurationException
{
try
{
return StringNumberParser.parseDouble(getParameterValue(name));
}
catch (NumberFormatException e)
{
throw new RepositoryConfigurationException(name + ": unparseable Long. " + e, e);
}
}
/**
* Parse named parameter using {@link StringNumberParser#parseTime(String)} and return time in
* milliseconds (Long value).
*
* @param name
* parameter name
* @param defaultValue
* default time value
* @return
*/
public Long getParameterTime(String name, Long defaultValue)
{
String value = getParameterValue(name, null);
if (value != null)
{
try
{
return StringNumberParser.parseTime(value);
}
catch (NumberFormatException e)
{
if (LOG.isTraceEnabled())
{
LOG.trace("An exception occurred: " + e.getMessage());
}
}
}
return defaultValue;
}
/**
* Parse named parameter using {@link StringNumberParser#parseTime(String)} and return time in
* milliseconds (Long value).
*
* @param name
* parameter name
* @return Long value
* @throws RepositoryConfigurationException
*/
public Long getParameterTime(String name) throws RepositoryConfigurationException
{
try
{
return StringNumberParser.parseTime(getParameterValue(name));
}
catch (NumberFormatException e)
{
throw new RepositoryConfigurationException(name + ": unparseable time (as Long). " + e, e);
}
}
/**
* Parse named parameter as Boolean.
*
* @param name
* parameter name
* @param defaultValue
* default value
* @return boolean value
*/
public Boolean getParameterBoolean(String name, Boolean defaultValue)
{
String value = getParameterValue(name, null);
if (value != null)
{
return new Boolean(value);
}
return defaultValue;
}
/**
* Set parameter as boolean
*
* @param name
* @param value
*/
public void putBooleanParameter(String name, Boolean value)
{
putParameterValue(name, value.toString());
}
/**
* Parse named parameter as Boolean.
*
* @param name
* @return Boolean value
* @throws RepositoryConfigurationException
*/
public Boolean getParameterBoolean(String name) throws RepositoryConfigurationException
{
return new Boolean(getParameterValue(name));
}
public String getType()
{
return type;
}
public void setParameters(List<SimpleParameterEntry> parameters)
{
Map<String, SimpleParameterEntry> mParameters = new LinkedHashMap<String, SimpleParameterEntry>();
if (parameters != null)
{
for (SimpleParameterEntry param : parameters)
{
mParameters.put(param.getName(), param);
}
}
this.parameters = mParameters;
}
public void addParameter(SimpleParameterEntry param)
{
parameters.put(param.getName(), param);
}
public SimpleParameterEntry getParameter(String name)
{
return parameters.get(name);
}
public void setType(String type)
{
this.type = type;
}
}