/**
         * Specific configuration for GeospatialCoordinateEncoder builder
         * @param encoderSettings
         * @param builder
         */
        private static void ConfigureGeoBuilder(MultiEncoder multiEncoder, string fieldName, Map <string, Map <string, object> > encoderSettings, GeospatialCoordinateEncoder.Builder builder)
        {
            Map <string, object> geoEncoderSettings = GetEncoderMap(fieldName, encoderSettings, "GeospatialCoordinateEncoder");

            if (geoEncoderSettings == null)
            {
                throw new InvalidOperationException("Input requires missing GeospatialCoordinateEncoder settings mapping.");
            }

            foreach (string key in geoEncoderSettings.Keys)
            {
                if (!key.Equals("fieldName") && !key.Equals("encoderType") &&
                    !key.Equals("fieldType") && !key.Equals("fieldEncodings"))
                {
                    if (!key.Equals("scale") && !key.Equals("timestep"))
                    {
                        multiEncoder.SetValue(builder, key, geoEncoderSettings[key]);
                    }
                    else
                    {
                        SetGeoFieldBits(builder, geoEncoderSettings, key);
                    }
                }
            }
        }
 private static void ConfigureCategoryBuilder(MultiEncoder multiEncoder,
                                              Map <string, object> encoderSettings, IBuilder builder)
 {
     if (encoderSettings.ContainsKey("name"))
     {
         multiEncoder.SetValue(builder, "name", encoderSettings["name"]);
     }
     multiEncoder.SetValue(builder, "n", encoderSettings["n"]);
     multiEncoder.SetValue(builder, "w", encoderSettings["w"]);
     multiEncoder.SetValue(builder, "forced", encoderSettings.Get("forced", true));
     multiEncoder.SetValue(builder, "categoryList", encoderSettings.Get("categoryList"));
 }
Beispiel #3
0
            public override IEncoder Build()
            {
                //Must be instantiated so that super class can initialize
                //boilerplate variables.
                encoder = new MultiEncoder();

                //Call super class here
                base.Build();

                ////////////////////////////////////////////////////////
                //  Implementing classes would do setting of specific //
                //  vars here together with any sanity checking       //
                ////////////////////////////////////////////////////////

                //Call init
                ((MultiEncoder)encoder).Init();

                return((MultiEncoder)encoder);
            }
        /**
         * Do special configuration for DateEncoder
         * @param encoderSettings
         */
        private static void ConfigureDateBuilder(MultiEncoder multiEncoder, string fieldName, Map <string, Map <string, object> > encoderSettings, DateEncoder.Builder b)
        {
            Map <string, object> dateEncoderSettings = GetEncoderMap(fieldName, encoderSettings, "DateEncoder");

            if (dateEncoderSettings == null)
            {
                throw new InvalidOperationException("Input requires missing DateEncoder settings mapping.");
            }

            foreach (string key in dateEncoderSettings.Keys)
            {
                if (!key.Equals("fieldname", StringComparison.InvariantCultureIgnoreCase) && !key.Equals("encoderType") && !key.Equals("type") &&
                    !key.Equals("fieldType") && !key.Equals("fieldEncodings"))
                {
                    if (!key.Equals("season") && !key.Equals("dayOfWeek") &&
                        !key.Equals("weekend") && !key.Equals("holiday") &&
                        !key.Equals("timeOfDay") &&
                        !key.Equals("customDays") &&
                        !key.Equals("formatPattern") && !key.Equals("dateFormatter"))
                    {
                        multiEncoder.SetValue(b, key, dateEncoderSettings[key]);
                    }
                    else
                    {
                        if (key.Equals("formatPattern"))
                        {
                            b.FormatPattern((string)dateEncoderSettings[key]);
                        }
                        else if (key.Equals("dateFormatter"))
                        {
                            b.Formatter((DateTimeFormatInfo)dateEncoderSettings[key]);
                        }
                        else
                        {
                            SetDateFieldBits(b, dateEncoderSettings, key);
                        }
                    }
                }
            }
        }
        /**
         * Uses the specified Map containing encoder settings to configure the
         * {@link MultiEncoder} passed in.
         *
         * @param encoder           the {@link MultiEncoder} to configure.
         * @param encoderSettings   the Map containing MultiEncoder settings.
         */
        public static void Assemble(MultiEncoder encoder, Map <string, Map <string, object> > encoderSettings)
        {
            if (encoder is MultiEncoder)
            {
                if (encoderSettings == null || !encoderSettings.Any())
                {
                    throw new ArgumentException(
                              "Cannot initialize this Sensor's MultiEncoder with a null settings");
                }

                // Sort the encoders so that they end up in a controlled order
                List <string> sortedFields = new List <string>(encoderSettings.Keys);
                sortedFields.Sort();

                foreach (string field in sortedFields)
                {
                    Map <string, object> @params = encoderSettings[field];

                    if ([email protected]("fieldName") && [email protected]("fieldname"))
                    {
                        throw new ArgumentException("Missing fieldname for encoder " + field);
                    }
                    string fieldName = (string)(@params.Get("fieldName") ?? @params.Get("fieldname"));

                    if ([email protected]("encoderType") && [email protected]("type"))
                    {
                        throw new ArgumentException("Missing type for encoder " + field);
                    }

                    string   encoderType = (string)(@params.Get("encoderType") ?? @params.Get("type"));
                    IBuilder builder     = encoder.GetBuilder(encoderType);

                    if (encoderType.Equals("SDRCategoryEncoder"))
                    {
                        // Add mappings for category list
                        ConfigureCategoryBuilder(encoder, @params, builder);
                    }
                    else if (encoderType.Equals("DateEncoder"))
                    {
                        // Extract date specific mappings out of the map so that we can
                        // pre-configure the DateEncoder with its needed directives.
                        ConfigureDateBuilder(encoder, field, encoderSettings, (DateEncoder.Builder)builder);
                    }
                    else if (encoderType.Equals("GeospatialCoordinateEncoder"))
                    {
                        // Extract Geo specific mappings out of the map so that we can
                        // pre-configure the GeospatialCoordinateEncoder with its needed directives.
                        ConfigureGeoBuilder(encoder, field, encoderSettings, (GeospatialCoordinateEncoder.Builder)builder);
                    }
                    else
                    {
                        foreach (string param in @params.Keys)
                        {
                            if (!param.Equals("fieldName") && !param.Equals("encoderType") && !param.Equals("type") &&
                                !param.Equals("fieldType") && !param.Equals("fieldEncodings"))
                            {
                                encoder.SetValue(builder, param, @params[param]);
                            }
                        }
                    }

                    encoder.AddEncoder(field, fieldName, builder.Build());
                }
            }
        }