/** * Copyright (C) 2014 Stratio (http://stratio.com) * * 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.stratio.decision.serializer.impl; import com.stratio.decision.commons.constants.ColumnType; import com.stratio.decision.commons.messages.ColumnNameTypeValue; import com.stratio.decision.commons.messages.StratioStreamingMessage; import com.stratio.decision.serializer.Serializer; import com.stratio.decision.service.StreamMetadataService; import org.wso2.siddhi.core.event.Event; import org.wso2.siddhi.core.event.in.InEvent; import org.wso2.siddhi.query.api.definition.Attribute; import org.wso2.siddhi.query.api.definition.Attribute.Type; import java.util.ArrayList; import java.util.List; public class JavaToSiddhiSerializer implements Serializer<StratioStreamingMessage, Event> { private static final long serialVersionUID = 1694881934063941893L; private final StreamMetadataService streamMetadataService; public JavaToSiddhiSerializer(StreamMetadataService streamMetadataService) { this.streamMetadataService = streamMetadataService; } @Override public Event serialize(StratioStreamingMessage object) { Object[] values = new Object[object.getColumns().size()]; for (ColumnNameTypeValue column : object.getColumns()) { values[streamMetadataService.getAttributePosition(object.getStreamName(), column.getColumn())] = column .getValue(); } return new InEvent(object.getStreamName(), System.currentTimeMillis(), values); } @Override public StratioStreamingMessage deserialize(Event object) { List<ColumnNameTypeValue> columns = new ArrayList<>(); for (int i = 0; i < object.getData().length; i++) { Object data = object.getData()[i]; Attribute attribute = streamMetadataService.getAttribute(object.getStreamId(), i); columns.add(new ColumnNameTypeValue(attribute.getName(), encodeSiddhiType(attribute.getType()), data)); } return new StratioStreamingMessage(object.getStreamId(), object.getTimeStamp(), columns); } @Override public List<Event> serialize(List<StratioStreamingMessage> object) { List<Event> result = new ArrayList<>(); if (object != null) { for (StratioStreamingMessage message : object) { result.add(serialize(message)); } } return result; } @Override public List<StratioStreamingMessage> deserialize(List<Event> object) { List<StratioStreamingMessage> result = new ArrayList<>(); if (object != null) { for (Event event : object) { result.add(deserialize(event)); } } return result; } private ColumnType encodeSiddhiType(Type type) { switch (type) { case STRING: return ColumnType.STRING; case BOOL: return ColumnType.BOOLEAN; case DOUBLE: return ColumnType.DOUBLE; case INT: return ColumnType.INTEGER; case LONG: return ColumnType.LONG; case FLOAT: return ColumnType.FLOAT; default: throw new RuntimeException("Unsupported Column type: " + type); } } }