Ejemplo n.º 1
0
        private DimensionItem AddTotalDimension(Page page, double locationX, bool indent_left, bool indent_right)
        {
            double x1 = _origin.X;
            double x2 = locationX;

            if (indent_left)
            {
                x1 -= 240;
            }
            if (indent_right)
            {
                x2 += 240;
            }

            DimensionItem item = Util.eplan.AddDimension(
                page,
                null,
                _totalWidth,
                x1,
                _origin.Y - _dimOffset[2],
                x2,
                _origin.Y - _dimOffset[2],
                20);

            item.ExtensionLineFirst       = !indent_left;
            item.ExtensionLineSecond      = !indent_right;
            item.DimensionCalculated      = false;
            item.DimensionLineTermination = DimensionItem.Enums.DimensionLineTermination.Without;
            item.DimensionText            = _totalWidth.ToString("F0");
            return(item);
        }
        public ListDimensionBuilder(ObjectConfiguration configuration, DimensionItem newDimension)
        {
            this._configuration = configuration;
            this._newDimension  = newDimension;

            _lookupRefinement = ListDimensionCache.Get(_configuration.repositoryId, _newDimension.DIdx, _configuration.query);

            //Try to get the Count objects from the cache
            //If not found it will be calculated below
            this.IsCachehit = (_lookupRefinement != null);
        }
Ejemplo n.º 3
0
        private void AddTotalDimension(Page page, double width, double startX, double endX)
        {
            DimensionItem item = Util.eplan.AddDimension(page, null, width, startX, _dimOffset[0], endX, _dimOffset[0], 20);

            if (item != null)
            {
                item.DimensionCalculated      = false;
                item.DimensionText            = string.Format("{0:F0}", width);
                item.DimensionLineTermination = DimensionItem.Enums.DimensionLineTermination.Without;
            }
        }
        /// <summary />
        public DimensionItem Where(string name)
        {
            var retval = this.FirstOrDefault(x => x.Name == name);

            if (retval == null)
            {
                retval = new DimensionItem
                {
                    Name = name,
                };
            }
            return(retval);
        }
Ejemplo n.º 5
0
        public static List <MyItem> GetItems()
        {
            var          _headers    = new List <DimensionItem>();
            var          _dimensions = new List <DimensionItem>();
            const string FILE        = @"C:\Users\DB-Server\AppData\Local\Temp\c6827c93-db6a-465c-a3f9-a1112971487c";

            using (var reader = XmlReader.Create(FILE))
            {
                var inHeaders = false;
                while (reader.Read())
                {
                    if (inHeaders && reader.Name == "h")
                    {
                        _headers.Add(new DimensionItem
                        {
                            DIdx = Convert.ToInt64("0" + reader.GetAttribute("didx")),
                            Name = reader.ReadInnerXml(),
                        });
                    }
                    if (reader.Name == "headers")
                    {
                        inHeaders = true;
                    }
                    if (reader.Name == "dimensions")
                    {
                        break;
                    }
                }

                DimensionItem currentD = null;
                while (reader.Read())
                {
                    if (reader.Name == "d")
                    {
                        currentD = new DimensionItem {
                            Name = reader.GetAttribute("name"), DIdx = Convert.ToInt64(reader.GetAttribute("didx"))
                        };
                        _dimensions.Add(currentD);
                    }
                    else if (reader.Name == "r")
                    {
                        currentD.RefinementList.Add(new RefinementItem
                        {
                            DIdx       = currentD.DIdx,
                            DVIdx      = Convert.ToInt64(reader.GetAttribute("dvidx")),
                            FieldValue = reader.ReadElementContentAsString(),
                        });
                    }
                    if (reader.Name == "items")
                    {
                        break;
                    }
                }

                _dimensions.RemoveAll(x => x.DIdx == 0);
            }

            try
            {
                var retval          = new List <MyItem>();
                var ordinalPosition = 0;
                using (var reader = XmlReader.Create(FILE))
                {
                    while (reader.Read())
                    {
                        var isNewItem = false;
                        var newItem   = new MyItem();
                        if (reader.Name == "i")
                        {
                            isNewItem = true;
                            long.TryParse(reader.GetAttribute("ri"), out long ri);
                            int.TryParse(reader.GetAttribute("ts"), out int ts);

                            //Setup static values
                            newItem.__RecordIndex     = ri;
                            newItem.__Timestamp       = ts;
                            newItem.__OrdinalPosition = ordinalPosition++;

                            //Loop through all properties for this new item
                            var elementXml = reader.ReadOuterXml();
                            var doc        = XDocument.Parse(elementXml);
                            var fieldIndex = 0;
                            foreach (var n in doc.Descendants().Where(x => x.Name == "v"))
                            {
                                var prop   = newItem.GetType().GetProperty(_headers[fieldIndex].Name);
                                var isNull = n.Value == "~■!N";
                                if (isNull)
                                {
                                    prop.SetValue(newItem, null, null);
                                }
                                else if (prop.PropertyType == typeof(int?) || prop.PropertyType == typeof(int))
                                {
                                    prop.SetValue(newItem, int.Parse(n.Value), null);
                                }
                                else if (prop.PropertyType == typeof(DateTime?) || prop.PropertyType == typeof(DateTime))
                                {
                                    var dt = new DateTime(Convert.ToInt64(n.Value));
                                    prop.SetValue(newItem, dt, null);
                                }
                                else if (prop.PropertyType == typeof(bool?) || prop.PropertyType == typeof(bool))
                                {
                                    prop.SetValue(newItem, n.Value == "1", null);
                                }
                                else if (prop.PropertyType == typeof(Single?) || prop.PropertyType == typeof(Single))
                                {
                                    prop.SetValue(newItem, Convert.ToSingle(n.Value), null);
                                }
                                else if (prop.PropertyType == typeof(GeoCode))
                                {
                                    var geoArr = n.Value.Split('|');
                                    var geo    = new GeoCode {
                                        Latitude = Convert.ToDouble(geoArr[0]), Longitude = Convert.ToDouble(geoArr[1])
                                    };
                                    prop.SetValue(newItem, geo, null);
                                }
                                else if (prop.PropertyType == typeof(string))
                                {
                                    prop.SetValue(newItem, n.Value, null);
                                }
                                else if (prop.PropertyType == typeof(string[]))
                                {
                                    //Get real values
                                    var d = _dimensions.FirstOrDefault(x => x.DIdx == _headers[fieldIndex].DIdx);
                                    if (d != null)
                                    {
                                        var varr = n.Value.Split('|').Select(x => Convert.ToInt64(x)).ToList();
                                        var v    = d.RefinementList.Where(x => varr.Contains(x.DVIdx)).Select(x => x.FieldValue).ToArray();
                                        prop.SetValue(newItem, v, null);
                                    }
                                }
                                else
                                {
                                    //TODO
                                }

                                fieldIndex++;
                            }
                        }
                        if (isNewItem)
                        {
                            retval.Add(newItem);
                        }
                    }
                }
                return(retval);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
Ejemplo n.º 6
0
        private CacheResults GetCache(DatastoreEntities context, int id, RepositorySchema schema)
        {
            try
            {
                var dimensionValueTableName       = SqlHelper.GetDimensionValueTableName(schema.ID);
                var dimensionValueTableNameParent = string.Empty;

                lock (_cache)
                {
                    var dimensionStamp = RepositoryManager.GetDimensionChanged(context, id);
                    var retval         = _cache.FirstOrDefault(x => x.RepositoryId == id);

                    //Check repository DimensionStamp and if changed the reload dimensions
                    if (retval != null && retval.DimensionStamp != dimensionStamp)
                    {
                        Clear(id);
                        retval = null;
                    }

                    if (retval == null)
                    {
                        #region Parent table stuff
                        if (schema.ParentID != null)
                        {
                            if (!_parentSchemaCache.ContainsKey(schema.ID))
                            {
                                var parentSchema = RepositoryManager.GetSchema(schema.ParentID.Value);
                                _parentSchemaCache.Add(schema.ID, schema.Subtract(parentSchema));
                            }
                            dimensionValueTableNameParent = SqlHelper.GetDimensionValueTableName(schema.ParentID.Value);
                        }
                        #endregion

                        retval = new CacheResults()
                        {
                            RepositoryId = id, ParentId = RepositoryManager.GetSchemaParentId(id)
                        };
                        _cache.Add(retval);

                        var sb = new StringBuilder();
                        sb.AppendLine($"select v.DIdx, v.DVIdx, v.Value from [{dimensionValueTableName}] v");

                        //If there is a parent schema then UNION its dimension tables
                        if (schema.ParentID != null)
                        {
                            sb.AppendLine($"union select v.DIdx, v.DVIdx, v.Value from [{dimensionValueTableNameParent}] v");
                        }

                        sb.AppendLine("order by DIdx, DVIdx");

                        var ds = SqlHelper.GetDataset(ConfigHelper.ConnectionString, sb.ToString(), null);
                        retval.Results = new List <DimensionItem>();

                        //Load all dimensions
                        foreach (var dimension in schema.DimensionList)
                        {
                            retval.Results.Add(new DimensionItem
                            {
                                DIdx = dimension.DIdx,
                                Name = dimension.Name,
                            });
                        }

                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            var    didx  = (long)dr["DIdx"];
                            long   dvidx = 0;
                            string v     = null;
                            if (dr["DVIdx"] != System.DBNull.Value)
                            {
                                dvidx = (long)dr["DVIdx"];
                                v     = (string)dr["Value"];
                            }
                            var d = retval.Results.FirstOrDefault(x => x.DIdx == didx);
                            if (d == null)
                            {
                                d = new DimensionItem {
                                    DIdx = (int)didx, Name = schema.DimensionList.Where(x => x.DIdx == didx).Select(x => x.Name).FirstOrDefault()
                                };
                                retval.Results.Add(d);
                            }
                            if (dvidx != 0)
                            {
                                d.RefinementList.Add(new RefinementItem {
                                    DVIdx = dvidx, FieldValue = v, DIdx = didx
                                });
                            }

                            //Rearrange all refinements alpha (for debugging and such)
                            //retval.Results.ForEach(ditem => ditem.RefinementList = ditem.RefinementList.OrderBy(x => x.FieldValue).ToList());
                        }
                    }
                    retval.DimensionStamp = dimensionStamp;
                    retval.Timestamp      = DateTime.Now; //Accessed
                    return(retval);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        /// <summary />
        public void WaitUntilReady(long timeout = 0)
        {
            if (timeout < 0)
            {
                timeout = 0;
            }
            try
            {
                if (this.IsComplete)
                {
                    return;
                }

                #region Wait for file to be ready
                var startTime = DateTime.Now;
                while (!_dsService.QueryAsyncReady(_hookId))
                {
                    //If there is a timeout and it is exceeded then throw exception
                    if (timeout > 0 && DateTime.Now.Subtract(startTime).TotalMilliseconds > timeout)
                    {
                        throw new TimeoutException($"Time exceeded {timeout}ms");
                    }

                    System.Threading.Thread.Sleep(5000);
                }
                #endregion

                #region Get chunks and append to file
                var    chunk     = 0;
                byte[] chunkData = null;
                var    tempFile  = Path.Combine(this.GetTempPath(), Guid.NewGuid().ToString());

                do
                {
                    chunkData = _dsService.QueryAsyncDownload(_hookId, chunk);
                    if (chunkData != null)
                    {
                        using (var stream = new FileStream(tempFile, FileMode.Append))
                        {
                            stream.Write(chunkData, 0, chunkData.Length);
                        }
                        chunk++;
                    }
                } while (chunkData != null);
                #endregion

                #region Unzip the file in temp folder
                _dataFile = Path.Combine(this.GetTempPath(), Guid.NewGuid().ToString());
                Extensions.UnzipFile(tempFile, _dataFile);
                if (File.Exists(tempFile))
                {
                    File.Delete(tempFile);
                }
                #endregion

                #region Load file headers and dimensions
                //This will dispose in the dispose event
                _reader = XmlReader.Create(_dataFile);

                var inHeaders = false;
                while (_reader.Read())
                {
                    if (inHeaders && _reader.Name == "h" && _reader.NodeType == XmlNodeType.Element)
                    {
                        string tt   = null;
                        var    didx = Convert.ToInt64("0" + _reader.GetAttribute("didx"));
                        _reader.Read();

                        if (_reader.NodeType == XmlNodeType.Text)
                        {
                            tt = _reader.Value;
                        }

                        _headers.Add(new DimensionItem
                        {
                            DIdx = didx,
                            Name = tt,
                        });
                    }
                    if (_reader.Name == "headers")
                    {
                        inHeaders = true;
                    }
                    if (_reader.Name == "dimensions")
                    {
                        break;
                    }
                }

                DimensionItem currentD = null;
                while (_reader.Read())
                {
                    if (_reader.Name == "d" && _reader.NodeType == XmlNodeType.Element)
                    {
                        var didx = Convert.ToInt64("0" + _reader.GetAttribute("didx"));
                        var tt   = _reader.GetAttribute("name");
                        currentD = new DimensionItem
                        {
                            Name = tt,
                            DIdx = didx,
                        };
                        _dimensions.Add(currentD);
                    }
                    else if (_reader.Name == "r" && _reader.NodeType == XmlNodeType.Element)
                    {
                        string tt    = null;
                        var    dvidx = Convert.ToInt64("0" + _reader.GetAttribute("dvidx"));
                        _reader.Read();

                        if (_reader.NodeType == XmlNodeType.Text)
                        {
                            tt = _reader.Value;
                        }

                        //Never happens but needed to avoid false positive in security scans
                        if (currentD != null)
                        {
                            currentD.RefinementList.Add(new RefinementItem
                            {
                                DIdx       = currentD.DIdx,
                                DVIdx      = dvidx,
                                FieldValue = tt,
                            });
                        }
                    }
                    if (_reader.Name == "items")
                    {
                        break;
                    }
                }

                _dimensions.RemoveAll(x => x.DIdx == 0);

                #endregion

                this.IsComplete = true;
            }
            catch (Exception ex)
            {
                this.IsComplete = true;
                _dataFile       = null;
                throw;
            }
        }