public void Export(Site site, IEnumerable <Label> labels, IEnumerable <string> categories, Stream outputStream) { if ((labels == null || labels.Count() == 0) && (categories == null || categories.Count() == 0)) { this.ExportLabelsToDisk(site); using (ZipFile zipFile = new ZipFile()) { zipFile.AddSelectedFiles("*.json", new LabelPath(site).PhysicalPath, ""); zipFile.Save(outputStream); } } else { var tempFolder = GetImportExportTempFolder(site); Kooboo.IO.IOUtility.DeleteDirectory(tempFolder, true); if (labels != null) { foreach (var item in labels) { var label = _rawLabelProvider.Get(item); if (label != null) { var storage = GetStorage(GetImportExportLabelFile(site, label.Category)); storage.Add(label); } } } if (categories != null) { foreach (var item in categories) { foreach (var label in _rawLabelProvider.GetLabels(site, item).ToArray()) { var storage = GetStorage(GetImportExportLabelFile(site, label.Category)); storage.Add(label); } } } using (ZipFile zipFile = new ZipFile()) { zipFile.AddSelectedFiles("*.json", tempFolder, ""); zipFile.Save(outputStream); } Kooboo.IO.IOUtility.DeleteDirectory(tempFolder, true); } }
private void CreateTicks(Size axisSize) { Range range = new Range( DataTransform.PlotToData(Double.IsInfinity(Range.Min) || Double.IsNaN(Range.Min) ? 0 : Range.Min), DataTransform.PlotToData(Double.IsInfinity(Range.Max) || Double.IsNaN(Range.Max) ? 1 : Range.Max)); // One tick if range is point if (range.IsPoint) { var t = new double[] { range.Min }; Ticks = t; labels = labelProvider.GetLabels(t); return; } // Do first pass of ticks arrangement ticksProvider.Range = range; double[] ticks = ticksProvider.GetTicks(); labels = labelProvider.GetLabels(ticks); TickChange result; if (ticks.Length > MaxTicks) { result = TickChange.Decrease; } else if (ticks.Length < 2) { result = TickChange.Increase; } else { result = CheckLabelsArrangement(axisSize, labels, ticks); } int iterations = 0; int prevLength = ticks.Length; while (result != TickChange.OK && iterations++ < maxTickArrangeIterations) { if (result == TickChange.Increase) { ticksProvider.IncreaseTickCount(); } else { ticksProvider.DecreaseTickCount(); } double[] newTicks = ticksProvider.GetTicks(); if (newTicks.Length > MaxTicks && result == TickChange.Increase) { ticksProvider.DecreaseTickCount(); // Step back and stop to not get more than MaxTicks break; } else if (newTicks.Length < 2 && result == TickChange.Decrease) { ticksProvider.IncreaseTickCount(); // Step back and stop to not get less than 2 break; } var prevTicks = ticks; ticks = newTicks; var prevLabels = labels; labels = labelProvider.GetLabels(newTicks); var newResult = CheckLabelsArrangement(axisSize, labels, ticks); if (newResult == result) // Continue in the same direction { prevLength = newTicks.Length; } else // Direction changed or layout OK - stop the loop { if (newResult != TickChange.OK) // Direction changed - time to stop { if (result == TickChange.Decrease) { if (prevLength < MaxTicks) { ticks = prevTicks; labels = prevLabels; ticksProvider.IncreaseTickCount(); } } else { if (prevLength >= 2) { ticks = prevTicks; labels = prevLabels; ticksProvider.DecreaseTickCount(); } } break; } break; } } Ticks = ticks; }
public IQueryable <Label> GetLabels(Site site, string category) { return(inner.GetLabels(site, category)); }