/**
* 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 org.apache.hive.hcatalog.messaging;
import org.apache.hive.hcatalog.messaging.json.JSONCreateFunctionMessage;
import org.apache.hive.hcatalog.messaging.json.JSONDropFunctionMessage;
/**
* Interface for converting HCat events from String-form back to HCatEventMessage instances.
*/
public abstract class MessageDeserializer {
/**
* Method to construct HCatEventMessage from string.
*/
public HCatEventMessage getHCatEventMessage(String eventTypeString, String messageBody) {
switch (HCatEventMessage.EventType.valueOf(eventTypeString)) {
case CREATE_DATABASE:
return getCreateDatabaseMessage(messageBody);
case DROP_DATABASE:
return getDropDatabaseMessage(messageBody);
case CREATE_TABLE:
return getCreateTableMessage(messageBody);
case ALTER_TABLE:
return getAlterTableMessage(messageBody);
case DROP_TABLE:
return getDropTableMessage(messageBody);
case ADD_PARTITION:
return getAddPartitionMessage(messageBody);
case ALTER_PARTITION:
return getAlterPartitionMessage(messageBody);
case DROP_PARTITION:
return getDropPartitionMessage(messageBody);
case CREATE_FUNCTION:
return getCreateFunctionMessage(messageBody);
case DROP_FUNCTION:
return getDropFunctionMessage(messageBody);
case CREATE_INDEX:
return getCreateIndexMessage(messageBody);
case DROP_INDEX:
return getDropIndexMessage(messageBody);
case ALTER_INDEX:
return getAlterIndexMessage(messageBody);
case INSERT:
return getInsertMessage(messageBody);
default:
throw new IllegalArgumentException("Unsupported event-type: " + eventTypeString);
}
}
/**
* Method to de-serialize CreateDatabaseMessage instance.
*/
public abstract CreateDatabaseMessage getCreateDatabaseMessage(String messageBody);
/**
* Method to de-serialize DropDatabaseMessage instance.
*/
public abstract DropDatabaseMessage getDropDatabaseMessage(String messageBody);
/**
* Method to de-serialize CreateTableMessage instance.
*/
public abstract CreateTableMessage getCreateTableMessage(String messageBody);
/**
* Method to de-serialize AlterTableMessge
* @param messageBody string message
* @return object message
*/
public abstract AlterTableMessage getAlterTableMessage(String messageBody);
/**
* Method to de-serialize DropTableMessage instance.
*/
public abstract DropTableMessage getDropTableMessage(String messageBody);
/**
* Method to de-serialize AddPartitionMessage instance.
*/
public abstract AddPartitionMessage getAddPartitionMessage(String messageBody);
/**
* Method to deserialize AlterPartitionMessage
* @param messageBody the message in serialized form
* @return message in object form
*/
public abstract AlterPartitionMessage getAlterPartitionMessage(String messageBody);
/**
* Method to de-serialize DropPartitionMessage instance.
*/
public abstract DropPartitionMessage getDropPartitionMessage(String messageBody);
/**
* Method to de-serialize CreateFunctionMessage instance.
*/
public abstract CreateFunctionMessage getCreateFunctionMessage(String messageBody);
/**
* Method to de-serialize DropFunctionMessage instance.
*/
public abstract DropFunctionMessage getDropFunctionMessage(String messageBody);
/**
* Method to de-serialize CreateIndexMessage instance.
*/
public abstract CreateIndexMessage getCreateIndexMessage(String messageBody);
/**
* Method to de-serialize DropIndexMessage instance.
*/
public abstract DropIndexMessage getDropIndexMessage(String messageBody);
/**
* Method to de-serialize AlterIndexMessage instance.
*/
public abstract AlterIndexMessage getAlterIndexMessage(String messageBody);
/**
* Method to deserialize InsertMessage
* @param messageBody the message in serialized form
* @return message in object form
*/
public abstract InsertMessage getInsertMessage(String messageBody);
// Protection against construction.
protected MessageDeserializer() {}
}