/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library 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 library 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.
*/
package com.liferay.sync.util;
import com.liferay.portal.kernel.util.CharPool;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jodd.util.NameValue;
/**
* @author Igor Spasic
*/
public class JSONWebServiceActionParametersMap extends HashMap<String, Object> {
public List<NameValue<String, Object>> getInnerParameters(String baseName) {
if (_innerParameters == null) {
return null;
}
return _innerParameters.get(baseName);
}
public String getParameterTypeName(String name) {
if (_parameterTypes == null) {
return null;
}
return _parameterTypes.get(name);
}
public boolean includeDefaultParameters() {
if (_defaultParameters == null) {
return false;
}
for (DefaultParameter defaultParameter : _defaultParameters) {
put(defaultParameter.getName(), defaultParameter.getValue());
}
return true;
}
@Override
public Object put(String key, Object value) {
int pos = key.indexOf(CharPool.COLON);
if (key.startsWith(StringPool.DASH)) {
key = key.substring(1);
value = null;
}
else if (key.startsWith(StringPool.PLUS)) {
key = key.substring(1);
String typeName = null;
if (pos != -1) {
typeName = key.substring(pos);
key = key.substring(0, pos - 1);
}
else {
if (value != null) {
typeName = value.toString();
value = Void.TYPE;
}
}
if (typeName != null) {
if (_parameterTypes == null) {
_parameterTypes = new HashMap<>();
}
_parameterTypes.put(key, typeName);
}
if (Validator.isNull(GetterUtil.getString(value))) {
value = Void.TYPE;
}
}
else if (pos != -1) {
String typeName = key.substring(pos + 1);
key = key.substring(0, pos);
if (_parameterTypes == null) {
_parameterTypes = new HashMap<>();
}
_parameterTypes.put(key, typeName);
if (Validator.isNull(GetterUtil.getString(value))) {
value = Void.TYPE;
}
}
pos = key.indexOf(CharPool.PERIOD);
if (pos != -1) {
String baseName = key.substring(0, pos);
String innerName = key.substring(pos + 1);
if (_innerParameters == null) {
_innerParameters = new HashMap<>();
}
List<NameValue<String, Object>> values = _innerParameters.get(
baseName);
if (values == null) {
values = new ArrayList<>();
_innerParameters.put(baseName, values);
}
values.add(new NameValue<String, Object>(innerName, value));
return value;
}
return super.put(key, value);
}
public void putDefaultParameter(String key, Object value) {
if (_defaultParameters == null) {
_defaultParameters = new ArrayList<>();
}
_defaultParameters.add(new DefaultParameter(key, value));
}
public static class DefaultParameter {
public DefaultParameter(String name, Object value) {
_name = name;
_value = value;
}
public String getName() {
return _name;
}
public Object getValue() {
return _value;
}
private final String _name;
private final Object _value;
}
private List<DefaultParameter> _defaultParameters;
private Map<String, List<NameValue<String, Object>>> _innerParameters;
private Map<String, String> _parameterTypes;
}