/*
Copyright (c) 2014 LinkedIn Corp.
Licensed 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 com.linkedin.restli.server;
import com.linkedin.data.template.RecordTemplate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Concrete implementation of {@link RestLiRequestData}.
*
* @author nshankar
*
*/
public class RestLiRequestDataImpl implements RestLiRequestData
{
private Object _key;
private RecordTemplate _entity;
private final List<?> _keys;
private final List<? extends RecordTemplate> _entities;
private final Map<?, ? extends RecordTemplate> _keyEntityMap;
@Override
public Object getKey()
{
return _key;
}
@Override
public void setKey(Object key)
{
_key = key;
}
@Override
public List<?> getBatchKeys()
{
return _keys;
}
@Override
public RecordTemplate getEntity()
{
return _entity;
}
@Override
public void setEntity(RecordTemplate entity)
{
_entity = entity;
}
@Override
public List<? extends RecordTemplate> getBatchEntities()
{
return _entities;
}
@Override
public Map<?, ? extends RecordTemplate> getBatchKeyEntityMap()
{
return _keyEntityMap;
}
@Override
public boolean hasKey()
{
return _key != null;
}
@Override
public boolean hasBatchKeys()
{
return !_keys.isEmpty();
}
@Override
public boolean hasEntity()
{
return _entity != null;
}
@Override
public boolean hasBatchEntities()
{
return !_entities.isEmpty();
}
@Override
public boolean hasBatchKeyEntityMap()
{
return !_keyEntityMap.isEmpty();
}
@Override
public boolean isBatchRequest()
{
return hasBatchEntities() || hasBatchKeys() || hasBatchKeyEntityMap();
}
private RestLiRequestDataImpl(Object key,
RecordTemplate entity,
List<?> keys,
List<? extends RecordTemplate> entities,
Map<?, ? extends RecordTemplate> keyEntityMap)
{
_key = key;
_entity = entity;
_keys = keys;
_entities = entities;
_keyEntityMap = keyEntityMap;
}
public static class Builder
{
private Object _key;
private RecordTemplate _entity;
private List<?> _keys;
private List<? extends RecordTemplate> _entities;
private Map<?, ? extends RecordTemplate> _keyEntityMap;
public Builder()
{
_keys = new ArrayList<Object>();
_entities = new ArrayList<RecordTemplate>();
_keyEntityMap = new HashMap<Object, RecordTemplate>();
}
public Builder key(Object key)
{
_key = key;
return this;
}
public Builder entity(RecordTemplate entity)
{
_entity = entity;
return this;
}
public Builder batchKeys(Collection<?> keys)
{
_keys = new ArrayList<Object>(keys);
return this;
}
public Builder batchEntities(Collection<? extends RecordTemplate> entities)
{
_entities = new ArrayList<RecordTemplate>(entities);
return this;
}
public Builder batchKeyEntityMap(Map<?, ? extends RecordTemplate> map)
{
_keyEntityMap = new HashMap<Object, RecordTemplate>(map);
return this;
}
public RestLiRequestData build()
{
return new RestLiRequestDataImpl(_key, _entity, _keys, _entities, _keyEntityMap);
}
}
}