/** * 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")); }
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()); } } }