use of com.predic8.schema.Schema in project core by s4.
the class AbstractWindowingPE method processEvent.
public void processEvent(Object event) {
long currentTime = getCurrentTime();
long maybeCurrentTime = -1;
if (timestampFields != null) {
Schema schema = schemaContainer.getSchema(event.getClass());
String fieldName = timestampFields.get(getStreamName());
if (fieldName != null) {
Property property = schema.getProperties().get(fieldName);
if (property != null && (property.getType().equals(Long.TYPE) || property.getType().equals(Long.class))) {
try {
maybeCurrentTime = (Long) property.getGetterMethod().invoke(event);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
if (maybeCurrentTime > -1) {
currentTime = maybeCurrentTime;
lastTimestamp = currentTime;
}
// convert
long slotTime = slotUtils.getSlotAtTime(currentTime / 1000);
if (slots == null) {
slots = Collections.synchronizedMap(new HashMap<Long, Slot>());
}
Slot slot = slots.get(slotTime);
if (slot == null) {
try {
slot = (Slot) slotClass.newInstance();
} catch (IllegalAccessException iae) {
throw new RuntimeException(iae);
} catch (InstantiationException ie) {
throw new RuntimeException(ie);
}
slots.put(slotTime, slot);
}
overloadDispatcher.dispatch(slot, event, slotTime, this);
}
use of com.predic8.schema.Schema in project core by s4.
the class JoinPE method processEvent.
public void processEvent(Object event) {
if (eventsToJoin == null) {
eventsToJoin = new HashMap<String, Object>();
}
List<String> fieldNames = eventFields.get(getStreamName());
if (fieldNames == null) {
return;
}
// we only use the last event that comes through on the given stream
eventsToJoin.put(getStreamName(), event);
if (eventsToJoin.keySet().size() == eventFields.keySet().size()) {
Object newEvent = null;
try {
newEvent = outputClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
Schema newEventSchema = schemaContainer.getSchema(newEvent.getClass());
for (String streamName : eventsToJoin.keySet()) {
Object partialEvent = eventsToJoin.get(streamName);
Schema partialEventSchema = schemaContainer.getSchema(partialEvent.getClass());
List<String> includeFields = eventFields.get(streamName);
if (includeFields.size() == 1 && includeFields.get(0).equals("*")) {
for (Property partialEventProperty : partialEventSchema.getProperties().values()) {
copyField(partialEventProperty.getName(), partialEventSchema, newEventSchema, partialEvent, newEvent);
}
} else {
for (String includeField : includeFields) {
copyField(includeField, partialEventSchema, newEventSchema, partialEvent, newEvent);
}
}
}
dispatcher.dispatchEvent(outputStreamName, newEvent);
if (logger.isDebugEnabled()) {
logger.debug("STEP 7 (JoinPE): " + newEvent.toString());
}
}
}
use of com.predic8.schema.Schema in project core by s4.
the class DefaultPartitioner method getKeyValues.
private List<KeyInfo> getKeyValues(Object record, Schema schema, List<String> keyNameElements, int elementIndex, List<KeyInfo> keyInfoList, KeyInfo keyInfo) {
String keyElement = keyNameElements.get(elementIndex);
Property property = schema.getProperties().get(keyElement);
if (property == null) {
return null;
}
keyInfo.addElementToPath(keyElement);
Object value = null;
try {
value = property.getGetterMethod().invoke(record);
} catch (Exception e) {
if (debug) {
System.out.println("key element is " + keyElement);
e.printStackTrace();
}
}
if (value == null) {
// return a null KeyInfo list if we hit a null value
return null;
}
if (property.isList()) {
List list = (List) value;
// TODO: handle case where key does not include property of
// component type
Schema componentSchema = property.getComponentProperty().getSchema();
int listLength = list.size();
for (int i = 0; i < listLength; i++) {
Object listEntry = list.get(i);
KeyInfo keyInfoForListEntry = keyInfo.copy();
keyInfoForListEntry.addElementToPath(i);
Object partialList = getKeyValues(listEntry, componentSchema, keyNameElements, elementIndex + 1, keyInfoList, keyInfoForListEntry);
if (partialList == null) {
return null;
}
}
} else if (property.getSchema() != null) {
return getKeyValues(value, property.getSchema(), keyNameElements, elementIndex + 1, keyInfoList, keyInfo);
} else {
keyInfo.setValue(String.valueOf(value));
keyInfoList.add(keyInfo);
}
return keyInfoList;
}
Aggregations