private void initializeWriters() { Set<WriteablePropertyDescriptor> writables = PropertyHelper.getWritableProperties(stem.getClazz()); EventPropertyDescriptor[] desc = new EventPropertyDescriptor[writables.size()]; Map<String, Pair<EventPropertyDescriptor, BeanEventPropertyWriter>> writers = new HashMap<String, Pair<EventPropertyDescriptor, BeanEventPropertyWriter>>(); int count = 0; for (final WriteablePropertyDescriptor writable : writables) { EventPropertyDescriptor propertyDesc = new EventPropertyDescriptor(writable.getPropertyName(), writable.getType(), null, false, false, false, false, false); desc[count++] = propertyDesc; writers.put(writable.getPropertyName(), new Pair<>(propertyDesc, new BeanEventPropertyWriter(stem.getClazz(), writable.getWriteMethod()))); } writerMap = writers; writeablePropertyDescriptors = desc; }
private static void addIntrospectPropertiesWritable(Class clazz, Set<WriteablePropertyDescriptor> result) { PropertyDescriptor[] properties = introspect(clazz); for (int i = 0; i < properties.length; i++) { PropertyDescriptor property = properties[i]; String propertyName = property.getName(); Method writeMethod = property.getWriteMethod(); if (writeMethod == null) { continue; } result.add(new WriteablePropertyDescriptor(propertyName, writeMethod.getParameterTypes()[0], writeMethod, false)); } }
/** * Ctor. * * @param beanEventType target type * @param properties written properties * @param classpathImportService for resolving write methods * @throws EventBeanManufactureException if the write method lookup fail */ public EventBeanManufacturerBeanForge(BeanEventType beanEventType, WriteablePropertyDescriptor[] properties, ClasspathImportService classpathImportService ) throws EventBeanManufactureException { this.beanEventType = beanEventType; this.properties = properties; this.classpathImportService = classpathImportService; beanInstantiator = BeanInstantiatorFactory.makeInstantiator(beanEventType, classpathImportService); writeMethodsReflection = new Method[properties.length]; boolean primitiveTypeCheck = false; primitiveType = new boolean[properties.length]; for (int i = 0; i < properties.length; i++) { writeMethodsReflection[i] = properties[i].getWriteMethod(); primitiveType[i] = properties[i].getType().isPrimitive(); primitiveTypeCheck |= primitiveType[i]; } hasPrimitiveTypes = primitiveTypeCheck; }
if (!desc.getPropertyName().equals(streamNames[i])) { continue; widener = TypeWidenerFactory.getCheckPropertyAssignType(streamNames[i], streamTypes[i].getUnderlyingType(), desc.getType(), desc.getPropertyName(), false, typeWidenerCustomizer, statementName); } catch (TypeWidenerException ex) { throw new ExprValidationException(ex.getMessage(), ex);
private static WriteablePropertyDescriptor findWritable(String columnName, Set<WriteablePropertyDescriptor> writables) { for (WriteablePropertyDescriptor writable : writables) { if (writable.getPropertyName().equals(columnName)) { return writable; } } return null; }
writersMap.put(beanClass, writers); for (WriteablePropertyDescriptor prop : props) { Method writerMethod = prop.getWriteMethod(); writers.put(prop.getPropertyName(), new BeanEventPropertyWriter(beanClass, writerMethod));
if (!desc.getPropertyName().equals(columnNames[i])) { continue; if (columnType == null) { try { TypeWidenerFactory.getCheckPropertyAssignType(columnNames[i], null, desc.getType(), desc.getPropertyName(), false, typeWidenerCustomizer, statementName); } catch (TypeWidenerException ex) { throw new ExprValidationException(ex.getMessage(), ex); final Class returnType = columnEventType.getUnderlyingType(); try { widener = TypeWidenerFactory.getCheckPropertyAssignType(columnNames[i], columnEventType.getUnderlyingType(), desc.getType(), desc.getPropertyName(), false, typeWidenerCustomizer, statementName); } catch (TypeWidenerException ex) { throw new ExprValidationException(ex.getMessage(), ex); if (JavaClassHelper.isSubclassOrImplementsInterface(returnType, desc.getType())) { selectedWritable = desc; widener = new TypeWidenerSPI() { widener = TypeWidenerFactory.getCheckPropertyAssignType(columnNames[i], arrayReturnType, desc.getType(), desc.getPropertyName(), allowObjectArrayToCollectionConversion, typeWidenerCustomizer, statementName); } catch (TypeWidenerException ex) { throw new ExprValidationException(ex.getMessage(), ex); String message = "Invalid assignment of column '" + columnNames[i] + "' of type '" + columnType + "' to event property '" + desc.getPropertyName() + "' typed as '" + desc.getType().getName() + "', column and parameter types mismatch"; throw new ExprValidationException(message);
private static WriteablePropertyDescriptor findWritable(String columnName, Set<WriteablePropertyDescriptor> writables) { for (WriteablePropertyDescriptor writable : writables) { if (writable.getPropertyName().equals(columnName)) { return writable; } } return null; }
/** * Ctor. * * @param beanEventType target type * @param service factory for events * @param properties written properties * @param classpathImportService for resolving write methods * @throws EventBeanManufactureException if the write method lookup fail */ public EventBeanManufacturerBean(BeanEventType beanEventType, EventBeanTypedEventFactory service, WriteablePropertyDescriptor[] properties, ClasspathImportService classpathImportService ) throws EventBeanManufactureException { this.beanEventType = beanEventType; this.service = service; beanInstantiator = BeanInstantiatorFactory.makeInstantiator(beanEventType, classpathImportService).getBeanInstantiator(); writeMethodsReflection = new Method[properties.length]; boolean primitiveTypeCheck = false; primitiveType = new boolean[properties.length]; for (int i = 0; i < properties.length; i++) { writeMethodsReflection[i] = properties[i].getWriteMethod(); primitiveType[i] = properties[i].getType().isPrimitive(); primitiveTypeCheck |= primitiveType[i]; } hasPrimitiveTypes = primitiveTypeCheck; }
writersMap.put(beanClass, writers); for (WriteablePropertyDescriptor prop : props) { Method writerMethod = prop.getWriteMethod(); writers.put(prop.getPropertyName(), new BeanEventPropertyWriter(beanClass, writerMethod));
TypeWidenerCustomizer typeWidenerCustomizer = args.getEventTypeAvroHandler().getTypeWidenerCustomizer(targetType); for (int i = 0; i < written.size(); i++) { Class expected = written.get(i).getType(); Map.Entry<String, Object> provided = writtenOffered.get(i); if (provided.getValue() instanceof Class) { try { wideners[i] = TypeWidenerFactory.getCheckPropertyAssignType(provided.getKey(), (Class) provided.getValue(), expected, written.get(i).getPropertyName(), false, typeWidenerCustomizer, args.getStatementName()); } catch (TypeWidenerException ex) { throw new ExprValidationException(ex.getMessage(), ex);
private static WriteablePropertyDescriptor findWritable(String columnName, Set<WriteablePropertyDescriptor> writables) { for (WriteablePropertyDescriptor writable : writables) { if (writable.getPropertyName().equals(columnName)) { return writable; } } return null; }
Object coerceProperty = coerceProperty(propertyName, applicableClass, property.getValue(), descriptor.getType(), exprNodeOrigin, exprValidationContext, false, true); descriptor.getWriteMethod().invoke(top, new Object[]{coerceProperty}); } catch (IllegalArgumentException e) { throw new ExprValidationException("Illegal argument invoking setter method for property '" + propertyName + "' for class " + applicableClass.getName() + " method " + descriptor.getWriteMethod().getName() + " provided value " + coerceProperty, e); } catch (IllegalAccessException e) { throw new ExprValidationException("Illegal access invoking setter method for property '" + propertyName + "' for class " + applicableClass.getName() + " method " + descriptor.getWriteMethod().getName(), e); } catch (InvocationTargetException e) { throw new ExprValidationException("Exception invoking setter method for property '" + propertyName + "' for class " + applicableClass.getName() + " method " + descriptor.getWriteMethod().getName() + ": " + e.getTargetException().getMessage(), e);
private FileBeginEndProcessor getBeginEndProcessor(DataFlowOpInitializeContext context, int outputPort) { EventType portEventType = factory.getOutputPortTypes()[outputPort]; Set<WriteablePropertyDescriptor> writeables = EventTypeUtility.getWriteableProperties(portEventType, false, false); List<WriteablePropertyDescriptor> writeableList = new ArrayList<WriteablePropertyDescriptor>(); EventBeanManufacturer manufacturer; if (propertyNameFile != null) { WriteablePropertyDescriptor writeableFile = EventTypeUtility.findWritable(propertyNameFile, writeables); if (writeableFile == null || writeableFile.getType() != String.class) { throw new EPException("Failed to find writable String-type property '" + propertyNameFile + "', is the property read-only?"); } writeableList.add(writeableFile); } try { manufacturer = EventTypeUtility.getManufacturer(portEventType, writeableList.toArray(new WriteablePropertyDescriptor[writeableList.size()]), context.getAgentInstanceContext().getClasspathImportServiceRuntime(), false, context.getAgentInstanceContext().getEventTypeAvroHandler()).getManufacturer(context.getAgentInstanceContext().getEventBeanTypedEventFactory()); } catch (EventBeanManufactureException e) { throw new EPException("Event type '" + portEventType.getName() + "' cannot be written to: " + e.getMessage(), e); } return new FileBeginEndProcessorGeneralPurpose(manufacturer); }
for (Map.Entry<String, Object> types : mapdef.entrySet()) { if (types.getValue() instanceof Class) { writables.add(new WriteablePropertyDescriptor(types.getKey(), (Class) types.getValue(), null, false)); Class clazz = JavaClassHelper.getPrimitiveClassForName(typeName); if (clazz != null) { writables.add(new WriteablePropertyDescriptor(types.getKey(), clazz, null, false)); } else if (allowFragmentType) { writables.add(new WriteablePropertyDescriptor(types.getKey(), clazz, null, true)); writables.add(new WriteablePropertyDescriptor(types.getKey(), und.getEventType().getUnderlyingType(), null, true)); writables.add(new WriteablePropertyDescriptor(types.getKey(), und[0].getEventType().getUnderlyingType(), null, true)); EventPropertyDescriptor[] desc = typeSPI.getWriteableProperties(); for (EventPropertyDescriptor prop : desc) { writables.add(new WriteablePropertyDescriptor(prop.getPropertyName(), prop.getPropertyType(), null, false));
for (WriteablePropertyDescriptor writable : writables) { Object providedProperty = allProperties.get(writable.getPropertyName()); ExprNode exprNode = (ExprNode) providedProperty; ExprNode validated = EPLValidationUtil.validateSimpleGetSubtree(ExprNodeOrigin.DATAFLOWBEACON, exprNode, null, false, context.getBase().getStatementRawInfo(), context.getServices()); try { widener = TypeWidenerFactory.getCheckPropertyAssignType(ExprNodeUtilityPrint.toExpressionStringMinPrecedenceSafe(validated), validated.getForge().getEvaluationType(), writable.getType(), writable.getPropertyName(), false, typeWidenerCustomizer, context.getBase().getStatementName()); } catch (TypeWidenerException e) { throw new ExprValidationException("Failed for property '" + writable.getPropertyName() + "'"); evaluatorForges[index] = new ExprEvalWithTypeWidener(widener, validated, writable.getType()); } else { evaluatorForges[index] = validated.getForge();
public static WriteablePropertyDescriptor findWritable(String propertyName, Set<WriteablePropertyDescriptor> writables) { for (WriteablePropertyDescriptor writable : writables) { if (writable.getPropertyName().equals(propertyName)) { return writable; } } return null; }
Object coerceProperty = coerceProperty(propertyName, applicableClass, property.getValue(), descriptor.getType(), exprNodeOrigin, exprValidationContext, false, true); descriptor.getWriteMethod().invoke(top, new Object[]{coerceProperty}); } catch (IllegalArgumentException e) { throw new ExprValidationException("Illegal argument invoking setter method for property '" + propertyName + "' for class " + applicableClass.getName() + " method " + descriptor.getWriteMethod().getName() + " provided value " + coerceProperty, e); } catch (IllegalAccessException e) { throw new ExprValidationException("Illegal access invoking setter method for property '" + propertyName + "' for class " + applicableClass.getName() + " method " + descriptor.getWriteMethod().getName(), e); } catch (InvocationTargetException e) { throw new ExprValidationException("Exception invoking setter method for property '" + propertyName + "' for class " + applicableClass.getName() + " method " + descriptor.getWriteMethod().getName() + ": " + e.getTargetException().getMessage(), e);