blob: 017b34da1c416b711e7c01e14c18256bddee5315 [file] [log] [blame]
/**
* 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 com.datatorrent.contrib.cassandra;
import java.nio.ByteBuffer;
import com.datastax.driver.core.ProtocolVersion;
import com.datastax.driver.core.TypeCodec;
import com.datastax.driver.core.UDTValue;
import com.datastax.driver.core.UserType;
import com.datastax.driver.core.exceptions.InvalidTypeException;
public class AddressCodec extends TypeCodec<Address>
{
private final TypeCodec<UDTValue> innerCodec;
private final UserType userType;
public AddressCodec(TypeCodec<UDTValue> innerCodec, Class<Address> javaType)
{
super(innerCodec.getCqlType(), javaType);
this.innerCodec = innerCodec;
this.userType = (UserType)innerCodec.getCqlType();
}
@Override
public ByteBuffer serialize(Address value, ProtocolVersion protocolVersion) throws InvalidTypeException
{
return innerCodec.serialize(toUDTValue(value), protocolVersion);
}
@Override
public Address deserialize(ByteBuffer bytes, ProtocolVersion protocolVersion) throws InvalidTypeException
{
return toAddress(innerCodec.deserialize(bytes, protocolVersion));
}
@Override
public Address parse(String value) throws InvalidTypeException
{
return value == null || value.isEmpty() ? null : toAddress(innerCodec.parse(value));
}
@Override
public String format(Address value) throws InvalidTypeException
{
return value == null ? null : innerCodec.format(toUDTValue(value));
}
protected Address toAddress(UDTValue value)
{
return value == null ? null : new Address(
value.getString("city"),
value.getString("street"),
value.getInt("zip_code"),
value.getSet("phones", String.class)
);
}
protected UDTValue toUDTValue(Address value)
{
return value == null ? null : userType.newValue()
.setString("street", value.getStreet())
.setInt("zip_code", value.getZip_code())
.setString("city", value.getCity())
.setSet("phones", value.getPhones());
}
}