package com.alibaba.doris.dataserver.extratools.replica.action; import org.apache.commons.beanutils.BeanUtils; import com.alibaba.doris.common.data.util.ByteUtils; import com.alibaba.doris.dataserver.action.data.ActionData; import com.alibaba.doris.dataserver.action.parser.BaseActionParser; import com.alibaba.doris.dataserver.net.ByteBufferWrapper; import com.alibaba.doris.dataserver.net.protocol.ProtocolParseExcetion; import com.alibaba.doris.dataserver.net.protocol.text.ProtocolConstant; /** * @author ajun Email:jack.yuj@alibaba-inc.com */ public class ExportActionParser extends BaseActionParser { public ActionData readHead(byte[] header, int startPos) { ActionData actionData = generateActionData(); int[] pos = new int[] { startPos }; String itemString = null; while (((itemString = parseNextField(header, pos)) != null)) { String[] item = parseItem(itemString); setActionProperties(actionData, item[0], item[1]); } return actionData; } protected ActionData generateActionData() { return new ExportActionData(); } private String[] parseItem(String item) { String[] items = item.split("="); if (items.length != 2) { throw new ProtocolParseExcetion("Invalid command arguments :" + item + ". (eg: namespace=1)"); } return items; } private void setActionProperties(ActionData actionData, String propName, String propValue) { try { BeanUtils.setProperty(actionData, propName, propValue); } catch (Exception e) { throw new ProtocolParseExcetion(e); } } public void writeHead(ByteBufferWrapper buffer, ActionData actionData) { ExportActionData exportActionData = (ExportActionData) actionData; String message = exportActionData.getMessage(); if (null != message) { buffer.writeBytes(ByteUtils.stringToByte(message)); } buffer.writeBytes(ProtocolConstant.CRLF); } }