/*
* Copyright(C) 2010-2011 Alibaba Group Holding Limited All rights reserved. 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.alibaba.doris.client.operation.impl;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.doris.client.cn.OperationDataConverter;
import com.alibaba.doris.client.operation.OperationData;
import com.alibaba.doris.common.data.Key;
import com.alibaba.doris.common.data.KeyFactory;
import com.alibaba.doris.common.data.Value;
import com.alibaba.doris.common.data.impl.ValueImpl;
import com.alibaba.doris.common.route.VirtualRouter;
/**
* OperationDataConverterImpl
*
* @author Kun He (Raymond He), kun.hek@alibaba-inc.com
* @since 1.0 2011-5-5
*/
public class OperationDataConverterImpl implements OperationDataConverter {
private VirtualRouter virtualRouter;
/**
* buildKey
*
* @see com.alibaba.doris.client.cn.OperationDataConverter#buildKey(com.alibaba.doris.client.operation.OperationData)
*/
public Key buildKey(OperationData operationData, long routeVersion) {
validNamespace(operationData);
Object appKey = operationData.getArgs().get(0);
String appKeyStr = String.valueOf(appKey);
Key key = KeyFactory.createKey(operationData.getNamespace().getId(), appKeyStr, routeVersion, Key.DEFAULT_VNODE);
int vnode = virtualRouter.findVirtualNode(key.getPhysicalKey());
key.setVNode(vnode);
return key;
}
/**
* 验证 Namespace.
*
* @param operationData
*/
private void validNamespace(OperationData operationData) {
if (operationData.getNamespace() == null || operationData.getNamespace().getName().trim().length() == 0
|| operationData.getNamespace().getId() == 0) {
Object appKey = operationData.getArgs().get(0);
throw new IllegalArgumentException("Namespace is missing of operationData: key=" + appKey);
}
}
/*
* @see
* com.alibaba.doris.client.cn.OperationDataConverter#buildValue(com.alibaba.doris.client.operation.OperationData)
*/
public Value buildValue(OperationData operationData) {
validNamespace(operationData);
byte[] appValue = (byte[]) operationData.getArgs().get(1);
Value value = new ValueImpl(appValue, System.currentTimeMillis());
return value;
}
/**
* @see com.alibaba.doris.client.cn.OperationDataConverter#unbuildKey(com.alibaba.doris.client.operation.OperationData)
*/
public Object unbuildKey(OperationData operationData) {
validNamespace(operationData);
// TODO Auto-generated method stub
return null;
}
/*
* @see
* com.alibaba.doris.client.cn.OperationDataConverter#unbuildValue(com.alibaba.doris.client.operation.OperationData)
*/
public Object unbuildValue(Value value) {
return value.getValueBytes();
}
public Key buildKeys(OperationData operationData, long routeVersion) {
validNamespace(operationData);
// TODO Auto-generated method stub
return null;
}
public Value buildValues(OperationData operationData) {
// TODO Auto-generated method stub
return null;
}
public Object unbuildKeys(OperationData operationData) {
validNamespace(operationData);
// TODO Auto-generated method stub
return null;
}
public Object unbuildValues(List<Value> values) {
List<Object> objList = new ArrayList<Object>(values.size());
for (Value v : values) {
objList.add(v.getValue());
}
return objList;
}
public VirtualRouter getVirtualRouter() {
return virtualRouter;
}
public void setVirtualRouter(VirtualRouter virtualRouter) {
this.virtualRouter = virtualRouter;
}
}