public void NewType(EventType type) { try { EventTypeUtility.ValidateModifiers(type.Name, type.Metadata.BusModifier, type.Metadata.AccessModifier); } catch (ExprValidationException e) { throw new ArgumentException(e.Message, e); } if (type.Metadata.AccessModifier == NameAccessModifier.PRECONFIGURED) { if (type.Metadata.ApplicationType != EventTypeApplicationType.XML) { throw new ArgumentException("Preconfigured-visibility is not allowed here"); } _eventTypeRepositoryPreconfigured.AddType(type); } if (_moduleTypesAdded.ContainsKey(type.Name)) { throw new ArgumentException("Event type '" + type.Name + "' has already been added by the module"); } if (type.Metadata.AccessModifier == NameAccessModifier.PRIVATE || type.Metadata.AccessModifier == NameAccessModifier.INTERNAL || type.Metadata.AccessModifier == NameAccessModifier.PUBLIC) { _moduleTypesAdded.Put(type.Name, type); } // We allow private types to register multiple times, the first one counts (i.e. rollup with multiple select-clauses active) if (!_newTypesAdded.ContainsKey(type.Name)) { _newTypesAdded.Put(type.Name, type); } else { throw new ArgumentException("Event type '" + type.Name + "' has already been added by the module"); } }
private EventType HandleVariantType( CreateSchemaDesc spec, StatementCompileTimeServices services) { if (spec.CopyFrom != null && !spec.CopyFrom.IsEmpty()) { throw new ExprValidationException("Copy-from types are not allowed with variant types"); } var eventTypeName = spec.SchemaName; // determine typing var isAny = false; ISet<EventType> types = new LinkedHashSet<EventType>(); foreach (var typeName in spec.Types) { if (typeName.Trim().Equals("*")) { isAny = true; } else { var eventType = services.EventTypeCompileTimeResolver.GetTypeByName(typeName); if (eventType == null) { throw new ExprValidationException( "Event type by name '" + typeName + "' could not be found for use in variant stream by name '" + eventTypeName + "'"); } types.Add(eventType); } } var eventTypes = types.ToArray(); var variantSpec = new VariantSpec(eventTypes, isAny ? TypeVariance.ANY : TypeVariance.PREDEFINED); var visibility = services.ModuleVisibilityRules.GetAccessModifierEventType(@base.StatementRawInfo, spec.SchemaName); var eventBusVisibility = services.ModuleVisibilityRules.GetBusModifierEventType(@base.StatementRawInfo, eventTypeName); EventTypeUtility.ValidateModifiers(spec.SchemaName, eventBusVisibility, visibility); var metadata = new EventTypeMetadata( eventTypeName, @base.ModuleName, EventTypeTypeClass.VARIANT, EventTypeApplicationType.VARIANT, visibility, eventBusVisibility, false, EventTypeIdPair.Unassigned()); var variantEventType = new VariantEventType(metadata, variantSpec); services.EventTypeCompileTimeRegistry.NewType(variantEventType); return variantEventType; }