/// <summary>
        /// Ctor.
        /// </summary>
        /// <param name="metadata">event type metadata</param>
        /// <param name="typeName">is the event type name</param>
        /// <param name="eventTypeId">The event type id.</param>
        /// <param name="eventType">is the event type of the wrapped events</param>
        /// <param name="properties">is the additional properties this wrapper adds</param>
        /// <param name="eventAdapterService">is the service for resolving unknown wrapped types</param>
        public WrapperEventType(EventTypeMetadata metadata,
                                String typeName,
                                int eventTypeId,
                                EventType eventType,
                                IDictionary <String, Object> properties,
                                EventAdapterService eventAdapterService)
        {
            CheckForRepeatedPropertyNames(eventType, properties);

            _metadata            = metadata;
            _underlyingEventType = eventType;
            EventTypeMetadata metadataMapType = EventTypeMetadata.CreateAnonymous(typeName);

            _underlyingMapType   = new MapEventType(metadataMapType, typeName, 0, eventAdapterService, properties, null, null, null);
            _isNoMapProperties   = properties.IsEmpty();
            _eventAdapterService = eventAdapterService;
            EventTypeId          = eventTypeId;
            _propertyGetterCache = new Dictionary <String, EventPropertyGetter>();

            UpdatePropertySet();

            if (metadata.TypeClass == TypeClass.NAMED_WINDOW)
            {
                StartTimestampPropertyName = eventType.StartTimestampPropertyName;
                EndTimestampPropertyName   = eventType.EndTimestampPropertyName;
                EventTypeUtility.ValidateTimestampProperties(this, StartTimestampPropertyName, EndTimestampPropertyName);
            }
        }
Exemple #2
0
        internal WrapperEventType(
            EventTypeMetadata metadata,
            EventType underlyingEventType,
            IDictionary<string, object> properties,
            EventBeanTypedEventFactory eventBeanTypedEventFactory,
            BeanEventTypeFactory beanEventTypeFactory)
        {
            CheckForRepeatedPropertyNames(underlyingEventType, properties);

            this.metadata = metadata;
            this.underlyingEventType = underlyingEventType;
            var innerName = EventTypeNameUtil.GetWrapperInnerTypeName(metadata.Name);
            var ids = ComputeIdFromWrapped(metadata.AccessModifier, innerName, metadata);
            var metadataMapType = new EventTypeMetadata(
                innerName,
                this.metadata.ModuleName,
                metadata.TypeClass,
                metadata.ApplicationType,
                metadata.AccessModifier,
                EventTypeBusModifier.NONBUS,
                false,
                ids);
            underlyingMapType = new MapEventType(
                metadataMapType,
                properties,
                null,
                null,
                null,
                null,
                beanEventTypeFactory);
            isNoMapProperties = properties.IsEmpty();
            this.eventBeanTypedEventFactory = eventBeanTypedEventFactory;
            propertyGetterCache = new Dictionary<string, EventPropertyGetterSPI>();

            UpdatePropertySet();

            if (metadata.TypeClass == EventTypeTypeClass.NAMED_WINDOW) {
                StartTimestampPropertyName = underlyingEventType.StartTimestampPropertyName;
                EndTimestampPropertyName = underlyingEventType.EndTimestampPropertyName;
                EventTypeUtility.ValidateTimestampProperties(
                    this,
                    StartTimestampPropertyName,
                    EndTimestampPropertyName);
            }
        }
Exemple #3
0
        /// <summary>
        /// Set the preconfigured event properties resolved by XPath expression.
        /// </summary>
        /// <param name="explicitXPathProperties">are preconfigured event properties</param>
        /// <param name="additionalSchemaProperties">the explicit properties</param>
        protected void Initialize(ICollection <ConfigurationEventTypeXMLDOM.XPathPropertyDesc> explicitXPathProperties,
                                  IList <ExplicitPropertyDescriptor> additionalSchemaProperties)
        {
            // make sure we override those explicitly provided with those derived from a metadataz
            var namedProperties = new LinkedHashMap <String, ExplicitPropertyDescriptor>();

            foreach (ExplicitPropertyDescriptor desc in additionalSchemaProperties)
            {
                namedProperties[desc.Descriptor.PropertyName] = desc;
            }

            String xPathExpression = null;

            try
            {
                foreach (ConfigurationEventTypeXMLDOM.XPathPropertyDesc property in explicitXPathProperties)
                {
                    xPathExpression = property.XPath;
                    if (Log.IsInfoEnabled)
                    {
                        Log.Info("Compiling XPath expression for property '" + property.Name + "' as '" +
                                 xPathExpression + "'");
                    }

                    var expressionContext = NamespaceContext ?? GetExtendedContext();
                    var expression        = XPathExpression.Compile(xPathExpression, expressionContext);

                    FragmentFactoryXPathPredefinedGetter fragmentFactory = null;

                    var isFragment = false;
                    if (property.OptionalEventTypeName != null)
                    {
                        fragmentFactory = new FragmentFactoryXPathPredefinedGetter(
                            EventAdapterService,
                            property.OptionalEventTypeName,
                            property.Name);
                        isFragment = true;
                    }

                    var getter = new XPathPropertyGetter(
                        property.Name,
                        xPathExpression,
                        expression,
                        property.ResultType,
                        property.OptionalCastToType,
                        fragmentFactory);
                    var returnType = SchemaUtil.ToReturnType(
                        property.ResultType,
                        property.OptionalCastToType.GetBoxedType());
                    var indexType = returnType.GetIndexType();
                    var isIndexed = indexType != null;

                    if (property.ResultType == XPathResultType.NodeSet)
                    {
                        isIndexed = true;
                    }

                    var desc = new EventPropertyDescriptor(
                        property.Name, returnType, indexType, false, false,
                        isIndexed, false, isFragment);
                    var @explicit = new ExplicitPropertyDescriptor(
                        desc, getter, isIndexed,
                        property.OptionalEventTypeName);

                    namedProperties[desc.PropertyName] = @explicit;
                }
            }
            catch (XPathException ex)
            {
                throw new EPException(
                          "XPath expression could not be compiled for expression '" + xPathExpression + '\'', ex);
            }

            Initialize(namedProperties.Values);

            // evaluate start and end timestamp properties if any
            _startTimestampPropertyName = ConfigurationEventTypeXMLDOM.StartTimestampPropertyName;
            _endTimestampPropertyName   = ConfigurationEventTypeXMLDOM.EndTimestampPropertyName;
            EventTypeUtility.ValidateTimestampProperties(this, _startTimestampPropertyName, _endTimestampPropertyName);
        }