/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. 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. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.usergrid.persistence.collection.serialization.impl;
import java.nio.ByteBuffer;
import java.util.UUID;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.entity.SimpleId;
import com.google.common.base.Preconditions;
import com.netflix.astyanax.model.CompositeBuilder;
import com.netflix.astyanax.model.Composites;
import com.netflix.astyanax.model.DynamicComposite;
import com.netflix.astyanax.serializers.AbstractSerializer;
import com.netflix.astyanax.serializers.StringSerializer;
import com.netflix.astyanax.serializers.UUIDSerializer;
/**
* Serialize EntityVersion, entity ID and version, for use a column name in Unique Values Column Family.
*/
public class EntityVersionSerializer extends AbstractSerializer<EntityVersion> {
@Override
public ByteBuffer toByteBuffer(final EntityVersion ev) {
final UUID entityVersion = ev.getEntityVersion();
final Id entityId = ev.getEntityId();
final UUID entityUuid = entityId.getUuid();
final String entityType = entityId.getType();
CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
builder.addUUID( entityVersion );
builder.addUUID( entityUuid );
builder.addString(entityType );
return builder.build();
}
@Override
public EntityVersion fromByteBuffer(final ByteBuffer byteBuffer) {
// would use Composites.newDynamicCompositeParser(byteBuffer) but it is not implemented
DynamicComposite composite = DynamicComposite.fromByteBuffer(byteBuffer);
Preconditions.checkArgument(composite.size() == 3, "Composite should have 3 elements");
final UUID version = composite.get( 0, UUIDSerializer.get() );
final UUID entityId = composite.get( 1, UUIDSerializer.get() );
final String entityType = composite.get( 2, StringSerializer.get() );
return new EntityVersion( new SimpleId( entityId, entityType ), version);
}
}