001
014
015 package com.liferay.portal.jsonwebservice;
016
017 import com.liferay.portal.kernel.util.CharPool;
018 import com.liferay.portal.kernel.util.GetterUtil;
019 import com.liferay.portal.kernel.util.StringPool;
020 import com.liferay.portal.kernel.util.Validator;
021
022 import java.util.ArrayList;
023 import java.util.HashMap;
024 import java.util.List;
025 import java.util.Map;
026
027 import jodd.util.NameValue;
028
029
032 public class JSONWebServiceActionParametersMap extends HashMap<String, Object> {
033
034 public List<NameValue<String, Object>> getInnerParameters(String baseName) {
035 if (_innerParameters == null) {
036 return null;
037 }
038
039 return _innerParameters.get(baseName);
040 }
041
042 public String getParameterTypeName(String name) {
043 if (_parameterTypes == null) {
044 return null;
045 }
046
047 return _parameterTypes.get(name);
048 }
049
050 public boolean includeDefaultParameters() {
051 if (_defaultParameters == null) {
052 return false;
053 }
054
055 for (DefaultParameter defaultParameter : _defaultParameters) {
056 put(defaultParameter.getName(), defaultParameter.getValue());
057 }
058
059 return true;
060 }
061
062 @Override
063 public Object put(String key, Object value) {
064 int pos = key.indexOf(CharPool.COLON);
065
066 if (key.startsWith(StringPool.DASH)) {
067 key = key.substring(1);
068
069 value = null;
070 }
071 else if (key.startsWith(StringPool.PLUS)) {
072 key = key.substring(1);
073
074 String typeName = null;
075
076 if (pos != -1) {
077 typeName = key.substring(pos);
078
079 key = key.substring(0, pos - 1);
080 }
081 else {
082 if (value != null) {
083 typeName = value.toString();
084
085 value = Void.TYPE;
086 }
087 }
088
089 if (typeName != null) {
090 if (_parameterTypes == null) {
091 _parameterTypes = new HashMap<>();
092 }
093
094 _parameterTypes.put(key, typeName);
095 }
096
097 if (Validator.isNull(GetterUtil.getString(value))) {
098 value = Void.TYPE;
099 }
100 }
101 else if (pos != -1) {
102 String typeName = key.substring(pos + 1);
103
104 key = key.substring(0, pos);
105
106 if (_parameterTypes == null) {
107 _parameterTypes = new HashMap<>();
108 }
109
110 _parameterTypes.put(key, typeName);
111
112 if (Validator.isNull(GetterUtil.getString(value))) {
113 value = Void.TYPE;
114 }
115 }
116
117 pos = key.indexOf(CharPool.PERIOD);
118
119 if (pos != -1) {
120 String baseName = key.substring(0, pos);
121
122 String innerName = key.substring(pos + 1);
123
124 if (_innerParameters == null) {
125 _innerParameters = new HashMap<>();
126 }
127
128 List<NameValue<String, Object>> values = _innerParameters.get(
129 baseName);
130
131 if (values == null) {
132 values = new ArrayList<>();
133
134 _innerParameters.put(baseName, values);
135 }
136
137 values.add(new NameValue<>(innerName, value));
138
139 return value;
140 }
141
142 return super.put(key, value);
143 }
144
145 public void putDefaultParameter(String key, Object value) {
146 if (_defaultParameters == null) {
147 _defaultParameters = new ArrayList<>();
148 }
149
150 _defaultParameters.add(new DefaultParameter(key, value));
151 }
152
153 public static class DefaultParameter {
154
155 public DefaultParameter(String name, Object value) {
156 _name = name;
157 _value = value;
158 }
159
160 public String getName() {
161 return _name;
162 }
163
164 public Object getValue() {
165 return _value;
166 }
167
168 private final String _name;
169 private final Object _value;
170
171 }
172
173 private List<DefaultParameter> _defaultParameters;
174 private Map<String, List<NameValue<String, Object>>> _innerParameters;
175 private Map<String, String> _parameterTypes;
176
177 }