Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.usergrid.services; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.usergrid.utils.JsonUtils; import org.apache.commons.collections.iterators.EmptyIterator; import org.apache.commons.collections.iterators.SingletonListIterator; import static org.apache.usergrid.utils.JsonUtils.normalizeJsonTree; public class ServicePayload { private final Map<String, Object> properties; private final List<Map<String, Object>> batch; private final List<UUID> list; public ServicePayload() { properties = new LinkedHashMap<String, Object>(); batch = null; list = null; } private ServicePayload(Map<String, Object> properties, List<Map<String, Object>> batch, List<UUID> list) { this.properties = properties; this.batch = batch; this.list = list; } public static ServicePayload payload(Map<String, Object> properties) { return new ServicePayload(properties, null, null); } public static ServicePayload batchPayload(List<Map<String, Object>> batch) { return new ServicePayload(null, batch, null); } public static ServicePayload idListPayload(List<UUID> list) { return new ServicePayload(null, null, list); } @SuppressWarnings("unchecked") public static ServicePayload jsonPayload(Object json) { ServicePayload payload = null; json = normalizeJsonTree(json); if (json instanceof Map) { Map<String, Object> jsonMap = (Map<String, Object>) json; payload = payload(jsonMap); } else if (json instanceof List) { List<?> jsonList = (List<?>) json; if (jsonList.size() > 0) { if (jsonList.get(0) instanceof UUID) { payload = idListPayload((List<UUID>) json); } else if (jsonList.get(0) instanceof Map) { payload = ServicePayload.batchPayload((List<Map<String, Object>>) jsonList); } } } return payload; } public static ServicePayload stringPayload(String str) { return jsonPayload(JsonUtils.parse(str)); } public boolean isBatch() { return batch != null; } public boolean isList() { return list != null; } public Map<String, Object> getProperties() { if (properties != null) { return properties; } if ((batch != null) && (batch.size() > 0)) { return batch.get(0); } return null; } public Object getProperty(String property) { Map<String, Object> p = getProperties(); if (p == null) { return null; } return p.get(property); } public void setProperty(String property, Object value) { Map<String, Object> p = getProperties(); if (p == null) { throw new NullPointerException("No payload exists, cannot add properties to it"); } p.put(property, value); } public String getStringProperty(String property) { Object obj = getProperty(property); if (obj instanceof String) { return (String) obj; } return null; } public Long getLongProperty(String property) { Object obj = getProperty(property); if (obj instanceof Long) { return (Long) obj; } return null; } public List<Map<String, Object>> getBatchProperties() { if (batch != null) { return batch; } if (properties != null) { List<Map<String, Object>> l = new ArrayList<Map<String, Object>>(1); l.add(properties); return l; } return null; } public List<UUID> getIdList() { return list; } @Override public String toString() { if (batch != null) { return JsonUtils.mapToJsonString(batch); } else if (list != null) { return JsonUtils.mapToJsonString(list); } return JsonUtils.mapToJsonString(properties); } @SuppressWarnings("unchecked") public Iterator<Map<String, Object>> payloadIterator() { if (isBatch()) { return batch.iterator(); } if (properties != null) { return new SingletonListIterator(properties); } return EmptyIterator.INSTANCE; } }