public override TestResult Execute(int paramSetId) { try { NameValueCollection param = new NameValueCollection(); _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param); _unitTestVm.ReadParameterValue(paramSetId, "CLASSNAME", param); //_unitTestVm.ReadParameterValue(paramSetId, "PROPERTIES", param); //_unitTestVm.ReadParameterValue(paramSetId, "FILTER", param); MgResourceIdentifier resId = null; if (param["RESOURCEID"] != null) { resId = new MgResourceIdentifier(param["RESOURCEID"]); } MgFeatureAggregateOptions query = new MgFeatureAggregateOptions(); //TODO: Set query options /* * if (param["FILTER"] != null) * { * query.SetFilter(param["FILTER"]); * } */ //PROPERTIES should be stored in the database as comma separated string without spaces /* * if (param["PROPERTIES"] != null) * { * string[] props = param["PROPERTIES"].Split(','); * foreach (var p in props) * { * query.AddFeatureProperty(p); * } * }*/ MgDataReader reader = _featureService.SelectAggregate(resId, param["CLASSNAME"], query); MgByteReader byteReader = reader.ToXml(); reader.Close(); return(TestResult.FromByteReader(byteReader)); } catch (MgException ex) { return(TestResult.FromMgException(ex)); } catch (Exception ex) { return(TestResult.FromException(ex)); } }
public void TestCase_DeleteResource() { try { var fact = new MgdServiceFactory(); var service = (MgResourceService)fact.CreateService(MgServiceType.ResourceService); var featSvc = (MgdFeatureService)fact.CreateService(MgServiceType.FeatureService); Assert.Throws <MgNullArgumentException>(() => service.DeleteResource(null)); service.DeleteResource(resourceNotExist); service.DeleteResource(resourceIdentifier); service.DeleteResource(resourceIdentifier2); service.DeleteResource(resourceIdentifier3); var resource = new MgResourceIdentifier("Library://UnitTests/Data/TEST.FeatureSource"); var source = new MgByteSource("..\\UnitTestFiles\\TEST.FeatureSource"); var reader = source.GetReader(); service.SetResource(resource, reader, null); var dataSource = new MgByteSource("..\\UnitTestFiles\\TEST.sdf"); var dataReader = dataSource.GetReader(); service.SetResourceData(resource, "TEST.sdf", "File", dataReader); MgFeatureAggregateOptions agg = new MgFeatureAggregateOptions(); agg.AddFeatureProperty("Data"); var mgdr = featSvc.SelectAggregate(resource, "TEST", agg); Assert.True(mgdr.ReadNext()); mgdr.Close(); service.DeleteResource(resource); } catch (MgException ex) { Assert.Fail(ex.Message); ex.Dispose(); } }
private void button1_Click(object sender, EventArgs e) { try { var fact = new MgdServiceFactory(); MgFeatureService featSvc = (MgdFeatureService)fact.CreateService(MgServiceType.FeatureService); MgFeatureAggregateOptions query = new MgFeatureAggregateOptions(); string[] propNames = txtProps.Text.Split(','); foreach (var p in propNames) { if (string.IsNullOrEmpty(p)) { continue; } query.AddFeatureProperty(p); } foreach (Pair p in lstComputed.Items) { query.AddComputedProperty(p.Name, p.Expr); } if (!string.IsNullOrEmpty(txtFilter.Text.Trim())) { query.SetFilter(txtFilter.Text.Trim()); } query.SelectDistinct(chkDistinct.Checked); MgResourceIdentifier fsId = new MgResourceIdentifier(txtFeatureSource.Text); MgDataReader reader = featSvc.SelectAggregate(fsId, txtClass.Text, query); new ReaderResponseDialog(reader).ShowDialog(); } catch (MgException ex) { MessageBox.Show(ex.ToString(), "Error from MapGuide"); } }
private void button1_Click(object sender, EventArgs e) { try { var fact = new MgdServiceFactory(); MgFeatureService featSvc = (MgdFeatureService)fact.CreateService(MgServiceType.FeatureService); MgFeatureAggregateOptions query = new MgFeatureAggregateOptions(); string[] propNames = txtProps.Text.Split(','); foreach (var p in propNames) { if (string.IsNullOrEmpty(p)) continue; query.AddFeatureProperty(p); } foreach (Pair p in lstComputed.Items) { query.AddComputedProperty(p.Name, p.Expr); } if (!string.IsNullOrEmpty(txtFilter.Text.Trim())) query.SetFilter(txtFilter.Text.Trim()); query.SelectDistinct(chkDistinct.Checked); MgResourceIdentifier fsId = new MgResourceIdentifier(txtFeatureSource.Text); MgDataReader reader = featSvc.SelectAggregate(fsId, txtClass.Text, query); new ReaderResponseDialog(reader).ShowDialog(); } catch (MgException ex) { MessageBox.Show(ex.ToString(), "Error from MapGuide"); } }
private string ApplyTheme(ThemeParams themeParams) { var provider = _viewer.GetProvider(); var map = _viewer.GetMap(); var layers = map.GetLayers(); MgResourceService resourceService = (MgResourceService)provider.CreateService(MgServiceType.ResourceService); MgFeatureService featureService = (MgFeatureService)provider.CreateService(MgServiceType.FeatureService); MgResourceIdentifier resId = new MgResourceIdentifier(themeParams.layer.GetFeatureSourceId()); MgResourceIdentifier layerDefResId = themeParams.layer.GetLayerDefinition(); MgByteReader byteReader = resourceService.GetResourceContent(layerDefResId); // Load the Layer Definition and Navigate to the specified <VectorScaleRange> XmlDocument doc = new XmlDocument(); String xmlLayerDef = byteReader.ToString(); doc.LoadXml(xmlLayerDef); XmlNodeList nodeList = doc.GetElementsByTagName("VectorScaleRange"); //NOXLATE XmlElement vectorScaleRangecElement = (XmlElement)nodeList.Item(themeParams.scaleRangeIndex); XmlElement areaTypeStyle = (XmlElement)vectorScaleRangecElement.GetElementsByTagName("AreaTypeStyle").Item(0); //NOXLATE // Remove any existing <AreaRule> elements. XmlNodeList areaRuleList = areaTypeStyle.GetElementsByTagName("AreaRule"); //NOXLATE int count = areaRuleList.Count; for (int i = 0; i < count; i++) { //The areaRuleList shrinks as we remove items, so always //remove the first item (don't use the index i) areaTypeStyle.RemoveChild(areaRuleList.Item(0)); } // Now create the new <AreaRule> elements. String areaRuleTemplate = Properties.Resources.AreaRuleTemplate; MgFeatureAggregateOptions aggregateOptions = new MgFeatureAggregateOptions(); String value = null; String filterText = null; String areaRuleXML = null; XmlDocument areaDoc = null; XmlNode areaNode = null; double portion = 0.0; double increment = (themeParams.numRules > 1) ? 1.0 / (themeParams.numRules - 1) : 1.0; if (THEME_INDIVIDUAL == themeParams.distro) { aggregateOptions.AddComputedProperty("THEME_VALUE", "UNIQUE(\"" + themeParams.property.Name + "\")"); //NOXLATE MgDataReader dataReader = featureService.SelectAggregate(resId, themeParams.layer.GetFeatureClassName(), aggregateOptions); while (dataReader.ReadNext()) { value = Util.GetFeaturePropertyValue(dataReader, "THEME_VALUE"); //NOXLATE filterText = """ + themeParams.property.Name + "" = "; //NOXLATE if (themeParams.property.DataType == MgPropertyType.String) filterText = filterText + "'" + value + "'"; //NOXLATE else filterText = filterText + value; areaRuleXML = String.Format(areaRuleTemplate, themeParams.property.Name + ":" + value, //NOXLATE filterText, Util.InterpolateColor(portion, themeParams.fillFrom, themeParams.fillTo, themeParams.fillTrans), Util.InterpolateColor(portion, themeParams.borderFrom, themeParams.borderTo, 0)); areaDoc = new XmlDocument(); areaDoc.LoadXml(areaRuleXML); areaNode = doc.ImportNode(areaDoc.DocumentElement, true); areaTypeStyle.AppendChild(areaNode); portion = portion + increment; } dataReader.Close(); } else { var values = new List<string>(); var expr = themeParams.distro + "(\"" + themeParams.property.Name + "\"," + themeParams.numRules + "," + themeParams.minValue + "," + themeParams.maxValue + ")"; //NOXLATE aggregateOptions.AddComputedProperty("THEME_VALUE", expr); //NOXLATE MgDataReader dataReader = featureService.SelectAggregate(resId, themeParams.layer.GetFeatureClassName(), aggregateOptions); while (dataReader.ReadNext()) { value = Util.GetFeaturePropertyValue(dataReader, "THEME_VALUE"); //NOXLATE values.Add(value); } dataReader.Close(); for (int i = 0; i < values.Count - 1; i++) { filterText = """ + themeParams.property.Name + "" >= " + values[i] + " AND "" + themeParams.property.Name; //NOXLATE if (i == values.Count - 1) filterText = filterText + "" <= " + values[i + 1]; //NOXLATE else filterText = filterText + "" < " + values[i + 1]; //NOXLATE areaRuleXML = String.Format(areaRuleTemplate, themeParams.property.Name + ":" + values[i] + " - " + values[i + 1], //NOXLATE filterText, Util.InterpolateColor(portion, themeParams.fillFrom, themeParams.fillTo, themeParams.fillTrans), Util.InterpolateColor(portion, themeParams.borderFrom, themeParams.borderTo, 0)); areaDoc = new XmlDocument(); areaDoc.LoadXml(areaRuleXML); areaNode = doc.ImportNode(areaDoc.DocumentElement, true); areaTypeStyle.AppendChild(areaNode); portion = portion + increment; } } // Now save our new layer definition to the session and add it to the map. String xmlString = doc.DocumentElement.OuterXml; String uniqueName = Util.MakeUniqueLayerName(map, themeParams.layer.Name, themeParams.themeName); String legendLabel = themeParams.layer.GetLegendLabel(); if (!string.IsNullOrEmpty(themeParams.themeName)) legendLabel = legendLabel + " (" + themeParams.themeName + ")"; //NOXLATE MgResourceIdentifier layerResId = new MgResourceIdentifier("Session:" + _sessionId + "//" + uniqueName + ".LayerDefinition"); //NOXLATE resourceService.SetResource(layerResId, new MgByteReader(xmlString, "text/xml"), null); //NOXLATE var newLayer = provider.CreateLayer(layerResId); newLayer.SetName(uniqueName); newLayer.SetLegendLabel(legendLabel); newLayer.SetDisplayInLegend(themeParams.layer.GetDisplayInLegend()); newLayer.SetVisible(true); newLayer.SetSelectable(themeParams.layer.GetSelectable()); //HACK: This has to be true otherwise owner-drawn nodes will not display its children (the theme rules) provider.SetLayerExpandInLegend(newLayer, true); layers.Insert(layers.IndexOf(themeParams.layer), newLayer); //map.Save(resourceService); return uniqueName; }
private string ApplyTheme(ThemeParams themeParams) { var provider = _viewer.GetProvider(); var map = _viewer.GetMap(); var layers = map.GetLayers(); MgResourceService resourceService = (MgResourceService)provider.CreateService(MgServiceType.ResourceService); MgFeatureService featureService = (MgFeatureService)provider.CreateService(MgServiceType.FeatureService); MgResourceIdentifier resId = new MgResourceIdentifier(themeParams.layer.GetFeatureSourceId()); MgResourceIdentifier layerDefResId = themeParams.layer.GetLayerDefinition(); MgByteReader byteReader = resourceService.GetResourceContent(layerDefResId); // Load the Layer Definition and Navigate to the specified <VectorScaleRange> XmlDocument doc = new XmlDocument(); String xmlLayerDef = byteReader.ToString(); doc.LoadXml(xmlLayerDef); XmlNodeList nodeList = doc.GetElementsByTagName("VectorScaleRange"); //NOXLATE XmlElement vectorScaleRangecElement = (XmlElement)nodeList.Item(themeParams.scaleRangeIndex); XmlElement areaTypeStyle = (XmlElement)vectorScaleRangecElement.GetElementsByTagName("AreaTypeStyle").Item(0); //NOXLATE // Remove any existing <AreaRule> elements. XmlNodeList areaRuleList = areaTypeStyle.GetElementsByTagName("AreaRule"); //NOXLATE int count = areaRuleList.Count; for (int i = 0; i < count; i++) { //The areaRuleList shrinks as we remove items, so always //remove the first item (don't use the index i) areaTypeStyle.RemoveChild(areaRuleList.Item(0)); } // Now create the new <AreaRule> elements. String areaRuleTemplate = Properties.Resources.AreaRuleTemplate; MgFeatureAggregateOptions aggregateOptions = new MgFeatureAggregateOptions(); String value = null; String filterText = null; String areaRuleXML = null; XmlDocument areaDoc = null; XmlNode areaNode = null; double portion = 0.0; double increment = (themeParams.numRules > 1) ? 1.0 / (themeParams.numRules - 1) : 1.0; if (THEME_INDIVIDUAL == themeParams.distro) { aggregateOptions.AddComputedProperty("THEME_VALUE", "UNIQUE(\"" + themeParams.property.Name + "\")"); //NOXLATE MgDataReader dataReader = featureService.SelectAggregate(resId, themeParams.layer.GetFeatureClassName(), aggregateOptions); while (dataReader.ReadNext()) { value = Util.GetFeaturePropertyValue(dataReader, "THEME_VALUE"); //NOXLATE filterText = """ + themeParams.property.Name + "" = "; //NOXLATE if (themeParams.property.DataType == MgPropertyType.String) { filterText = filterText + "'" + value + "'"; //NOXLATE } else { filterText = filterText + value; } areaRuleXML = String.Format(areaRuleTemplate, themeParams.property.Name + ":" + value, //NOXLATE filterText, Util.InterpolateColor(portion, themeParams.fillFrom, themeParams.fillTo, themeParams.fillTrans), Util.InterpolateColor(portion, themeParams.borderFrom, themeParams.borderTo, 0)); areaDoc = new XmlDocument(); areaDoc.LoadXml(areaRuleXML); areaNode = doc.ImportNode(areaDoc.DocumentElement, true); areaTypeStyle.AppendChild(areaNode); portion = portion + increment; } dataReader.Close(); } else { var values = new List <string>(); var expr = themeParams.distro + "(\"" + themeParams.property.Name + "\"," + themeParams.numRules + "," + themeParams.minValue + "," + themeParams.maxValue + ")"; //NOXLATE aggregateOptions.AddComputedProperty("THEME_VALUE", expr); //NOXLATE MgDataReader dataReader = featureService.SelectAggregate(resId, themeParams.layer.GetFeatureClassName(), aggregateOptions); while (dataReader.ReadNext()) { value = Util.GetFeaturePropertyValue(dataReader, "THEME_VALUE"); //NOXLATE values.Add(value); } dataReader.Close(); for (int i = 0; i < values.Count - 1; i++) { filterText = """ + themeParams.property.Name + "" >= " + values[i] + " AND "" + themeParams.property.Name; //NOXLATE if (i == values.Count - 1) { filterText = filterText + "" <= " + values[i + 1]; //NOXLATE } else { filterText = filterText + "" < " + values[i + 1]; //NOXLATE } areaRuleXML = String.Format(areaRuleTemplate, themeParams.property.Name + ":" + values[i] + " - " + values[i + 1], //NOXLATE filterText, Util.InterpolateColor(portion, themeParams.fillFrom, themeParams.fillTo, themeParams.fillTrans), Util.InterpolateColor(portion, themeParams.borderFrom, themeParams.borderTo, 0)); areaDoc = new XmlDocument(); areaDoc.LoadXml(areaRuleXML); areaNode = doc.ImportNode(areaDoc.DocumentElement, true); areaTypeStyle.AppendChild(areaNode); portion = portion + increment; } } // Now save our new layer definition to the session and add it to the map. String xmlString = doc.DocumentElement.OuterXml; String uniqueName = Util.MakeUniqueLayerName(map, themeParams.layer.Name, themeParams.themeName); String legendLabel = themeParams.layer.GetLegendLabel(); if (!string.IsNullOrEmpty(themeParams.themeName)) { legendLabel = legendLabel + " (" + themeParams.themeName + ")"; //NOXLATE } MgResourceIdentifier layerResId = new MgResourceIdentifier("Session:" + _sessionId + "//" + uniqueName + ".LayerDefinition"); //NOXLATE resourceService.SetResource(layerResId, new MgByteReader(xmlString, "text/xml"), null); //NOXLATE var newLayer = provider.CreateLayer(layerResId); newLayer.SetName(uniqueName); newLayer.SetLegendLabel(legendLabel); newLayer.SetDisplayInLegend(themeParams.layer.GetDisplayInLegend()); newLayer.SetVisible(true); newLayer.SetSelectable(themeParams.layer.GetSelectable()); //HACK: This has to be true otherwise owner-drawn nodes will not display its children (the theme rules) provider.SetLayerExpandInLegend(newLayer, true); layers.Insert(layers.IndexOf(themeParams.layer), newLayer); //map.Save(resourceService); return(uniqueName); }
private IReader AggregateQueryFeatureSourceCore(string resourceID, string schema, string query, string[] columns, System.Collections.Specialized.NameValueCollection computedProperties) { MgFeatureService fes = this.Connection.CreateService(MgServiceType.FeatureService) as MgFeatureService; MgFeatureAggregateOptions mgf = new MgFeatureAggregateOptions(); if (query != null) mgf.SetFilter(query); if (columns != null && columns.Length != 0) foreach (string s in columns) mgf.AddFeatureProperty(s); if (computedProperties != null && computedProperties.Count > 0) foreach (string s in computedProperties.Keys) mgf.AddComputedProperty(s, computedProperties[s]); var reader = fes.SelectAggregate(new MgResourceIdentifier(resourceID), schema, mgf); LogMethodCall("MgFeatureService::SelectAggregate", true, resourceID, schema, "MgFeatureAggregateOptions"); return new LocalNativeDataReader(reader); }
private int GetLastUID(MgResourceIdentifier resId) { int uid = 0; MgFeatureAggregateOptions opt = new MgFeatureAggregateOptions(); opt.AddComputedProperty("UID", "MAX(\"UID\")"); MgDataReader reader = _featureService.SelectAggregate(resId, "MarkupSchema:Markup", opt); if (reader.ReadNext()) { uid = reader.GetInt32("UID"); } return uid; }
public void TestCase_DeleteResource() { try { var fact = new MgdServiceFactory(); var service = (MgResourceService)fact.CreateService(MgServiceType.ResourceService); var featSvc = (MgdFeatureService)fact.CreateService(MgServiceType.FeatureService); Assert.Throws<MgNullArgumentException>(() => service.DeleteResource(null)); service.DeleteResource(resourceNotExist); service.DeleteResource(resourceIdentifier); service.DeleteResource(resourceIdentifier2); service.DeleteResource(resourceIdentifier3); var resource = new MgResourceIdentifier("Library://UnitTests/Data/TEST.FeatureSource"); var source = new MgByteSource("..\\UnitTestFiles\\TEST.FeatureSource"); var reader = source.GetReader(); service.SetResource(resource, reader, null); var dataSource = new MgByteSource("..\\UnitTestFiles\\TEST.sdf"); var dataReader = dataSource.GetReader(); service.SetResourceData(resource, "TEST.sdf", "File", dataReader); MgFeatureAggregateOptions agg = new MgFeatureAggregateOptions(); agg.AddFeatureProperty("Data"); var mgdr = featSvc.SelectAggregate(resource, "TEST", agg); Assert.True(mgdr.ReadNext()); mgdr.Close(); service.DeleteResource(resource); } catch (MgException ex) { Assert.Fail(ex.Message); ex.Dispose(); } }
public Dictionary<string, string> GetMinMax(MgLayerBase layer, string propertyName) { Dictionary<string, string> result = new Dictionary<string, string>(); object min = null; object max = null; MgFeatureAggregateOptions opt = new MgFeatureAggregateOptions(); opt.AddComputedProperty("MIN", string.Format("Min({0})", propertyName)); opt.AddComputedProperty("MAX", string.Format("Max({0})", propertyName)); MgDataReader reader = this.FeatureService.SelectAggregate(new MgResourceIdentifier(layer.FeatureSourceId), layer.FeatureClassName, opt); if (reader.ReadNext()) { min = this.GetFeaturePropertyValue(reader, "MIN"); max = this.GetFeaturePropertyValue(reader, "MAX"); } if (min != null) { result.Add("min", min.ToString()); } if (max != null) { result.Add("max", max.ToString()); } return result; }