/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
***************************************************************************************
*/
package com.espertech.esper.epl.table.mgmt;
import com.espertech.esper.client.EventType;
import com.espertech.esper.collection.Pair;
import com.espertech.esper.epl.core.StreamTypeServiceImpl;
import com.espertech.esper.epl.lookup.IndexMultiKey;
import com.espertech.esper.epl.lookup.IndexedPropDesc;
import com.espertech.esper.event.EventTypeMetadata;
import com.espertech.esper.event.EventTypeSPI;
import com.espertech.esper.event.arr.ObjectArrayEventType;
import com.espertech.esper.util.CollectionUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class TableServiceUtil {
public static String getTableNameFromEventType(EventType type) {
if (!(type instanceof EventTypeSPI)) {
return null;
}
EventTypeSPI spi = (EventTypeSPI) type;
if (spi.getMetadata().getTypeClass() == EventTypeMetadata.TypeClass.TABLE) {
return spi.getMetadata().getPrimaryName();
}
return null;
}
public static StreamTypeServiceImpl streamTypeFromTableColumn(TableMetadataColumnAggregation column, String engineURI) {
if (column.getOptionalEventType() == null) {
throw new IllegalArgumentException("Required event type not provided");
}
return new StreamTypeServiceImpl(column.getOptionalEventType(), column.getOptionalEventType().getName(), false, engineURI);
}
public static Pair<int[], IndexMultiKey> getIndexMultikeyForKeys(Map<String, TableMetadataColumn> items, ObjectArrayEventType eventType) {
List<IndexedPropDesc> indexFields = new ArrayList<IndexedPropDesc>();
List<Integer> keyIndexes = new ArrayList<Integer>();
int count = 0;
for (Map.Entry<String, TableMetadataColumn> entry : items.entrySet()) {
if (entry.getValue().isKey()) {
indexFields.add(new IndexedPropDesc(entry.getKey(), eventType.getPropertyType(entry.getKey())));
keyIndexes.add(count + 1);
}
count++;
}
int[] keyColIndexes = CollectionUtil.intArray(keyIndexes);
return new Pair<int[], IndexMultiKey>(keyColIndexes, new IndexMultiKey(true, indexFields, Collections.<IndexedPropDesc>emptyList(), null));
}
}