Commit fa36fbfb authored by Francesco Carraro's avatar Francesco Carraro
Browse files

a lot of refactring for trying to share XML saving between app and webapp; to be fully tested

parent 2198c8e9
Loading
Loading
Loading
Loading
+18 −303
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ using INAF.Apps.Uwp.SLabDataManager.Models.Chart;
using INAF.Apps.Uwp.SLabDataManager.Models.Chart.Fit;
using INAF.Libraries.NetStandard.Extensions;
using INAF.Libraries.NetStandard.Math.Models;
using INAF.Libraries.NetStandard.Math.Stats;
using INAF.Libraries.NetStandard.ScienceModels.Spectra;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Files;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum;
@@ -12,9 +11,7 @@ using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum.ProcessedSpect
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum.ProcessedSpectraInfo.ContinuumRemoval;
using INAF.Libraries.NetStandard.SLabCommonModels.Models.Spectrum.ProcessedSpectraInfo.Smoothing;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Telerik.UI.Xaml.Controls.Chart;
using Windows.Data.Xml.Dom;
@@ -28,19 +25,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
    public static class Extensions
    {
        #region spectrum model
        public static FileSpectrumModel ToSpectrumFile(this IChartSpectrumModel model)
        {
            return new FileSpectrumModel()
            {
                Id = model.Id,
                Filename = model.Filename,
                ParentId = model.ParentId,
                Type = model.Type,
                Level = model.Level,
                Xml = model.ToXmlString()
            };
        }

        public static FileSpectrumModel ToSpectrumFileBaseInfo(this ISpectrumModel model)
        {
            return new FileSpectrumModel()
@@ -69,7 +53,10 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
        {
            try
            {
                return new PointModel(element.X, element.Y);
                if (element.YStdDev == null)
                    return new PointModel(element.getValueInNanometers(), element.Y);
                else
                    return new PointModel(element.getValueInNanometers(), element.Y, (double)element.YStdDev);
            }
            catch (Exception)
            {
@@ -90,86 +77,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
        }

        #region local files
        public static string ToTxt(this IChartSpectrumModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
                return null;

            StringBuilder sb = new StringBuilder();
            foreach (var element in spectrum.Elements)
            {
                sb.AppendLine(element.toCsvString());
            }

            return sb.ToString();
        }

        private static XmlElement AppendParentFilesXml(XmlDocument dom,
                                                       ParentFilesModel parentFiles)
        {
            var xmlalignmentsettings = dom.CreateElement(Constants.Constants.XML_PARENT_FILES);

            /*  raw file id */
            var xmlrawfileid = dom.CreateElement(Constants.Constants.XML_PARENT_FILE_ID);
            xmlrawfileid.InnerText = parentFiles.ParentFile.Id.ToString();
            xmlalignmentsettings.AppendChild(xmlrawfileid);

            /*  ref file id */
            if (parentFiles.RefFile != null)
            {
                var xmlreffileid = dom.CreateElement(Constants.Constants.XML_REF_FILE_ID);
                xmlreffileid.InnerText = parentFiles.RefFile.Id.ToString();
                xmlalignmentsettings.AppendChild(xmlreffileid);
            }

            /*  raw file id */
            if (parentFiles.RefWhiteFile != null)
            {
                var xmlrefwhitefileid = dom.CreateElement(Constants.Constants.XML_REF_WHITE_FILE_ID);
                xmlrefwhitefileid.InnerText = parentFiles.RefWhiteFile.Id.ToString();
                xmlalignmentsettings.AppendChild(xmlrefwhitefileid);
            }

            return xmlalignmentsettings;
        }

        private static XmlDocument GetCommonXml(IChartSpectrumModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
                return null;

            XmlDocument dom = new XmlDocument();

            var xmlspectrum = dom.CreateElement(Constants.Constants.XML_SPECTRUM);
            dom.AppendChild(xmlspectrum);

            /* append spectrum info (filename, type) */
            var xmlinfo = dom.CreateElement(Constants.Constants.XML_INFO);
            /*  filename */
            var xmlfilename = dom.CreateElement(Constants.Constants.XML_RAW_FILENAME);
            xmlfilename.InnerText = spectrum.Filename;
            xmlinfo.AppendChild(xmlfilename);
            /*  type */
            var xmltype = dom.CreateElement(Constants.Constants.XML_TYPE);
            xmltype.InnerText = spectrum.Type.ToString();
            xmlinfo.AppendChild(xmltype);

            xmlspectrum.AppendChild(xmlinfo);

            return dom;
        }

        private static XmlElement GetElements(IChartSpectrumModel spectrum,
                                              XmlDocument dom)
        {
            /* append spectrum data (wavelength, value) */
            var xmlelements = dom.CreateElement(Constants.Constants.XML_ELEMENTS);
            foreach (var element in spectrum.Elements)
                xmlelements.AppendChild(element.ToXmlNode(dom));

            return xmlelements;
        }

        public static bool IsErrorBar(this CartesianChartAnnotation line)
        {
            bool isError = false;
@@ -179,66 +86,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions

            return isError;
        }

        /* used for 'saveSpectrumOfTypeAsLocalFileAsync' method in BaseUserControlViewModel */
        public static XmlDocument ToXml(this IChartSpectrumModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
                return null;

            XmlDocument dom = GetCommonXml(spectrum);

            var xmlspectrum = dom.SelectSingleNode(Constants.Constants.XML_SPECTRUM);

            /* append spectrum data (wavelength, value) */
            var xmlelements = GetElements(spectrum, dom);
            xmlspectrum.AppendChild(xmlelements);

            return dom;
        }

        public static XmlDocument ToXml(this IChartSpectrumOfTypeProcessedModel spectrum)
        {
            if (spectrum == null || spectrum.Elements == null || spectrum.Elements.Count == 0)
                return null;

            XmlDocument dom = GetCommonXml(spectrum);

            var xmlspectrum = dom.SelectSingleNode(Constants.Constants.XML_SPECTRUM);

            xmlspectrum.AppendChild(AppendParentFilesXml(dom, spectrum.ParentFiles));

            /* type specific actions */
            if (spectrum.GetType() == typeof(ChartSpectrumOfTypeAlignedModel))
            {
                xmlspectrum.AppendChild(GetAlignmentSettingsXml(dom, ((ChartSpectrumOfTypeAlignedModel)spectrum).AlignmentSettings));
            }
            else if (spectrum.GetType() == typeof(ChartSpectrumOfTypeContinuumRemovedModel))
            {
                xmlspectrum.AppendChild(GetSegmentsFitSettingsXml(dom, ((ChartSpectrumOfTypeContinuumRemovedModel)spectrum).ContinuumRemovalSettings));
            }
            else if (spectrum.GetType() == typeof(ChartSpectrumOfTypeSmoothedModel))
            {
                xmlspectrum.AppendChild(GetSmoothingSettingsXml(dom, ((ChartSpectrumOfTypeSmoothedModel)spectrum).SmoothingSettings));
            }

            /* append spectrum data (wavelength, value) */
            var xmlelements = GetElements(spectrum, dom);
            xmlspectrum.AppendChild(xmlelements);

            return dom;
        }

        /* used for 'ToSpectrumFile' extension method */
        public static string ToXmlString(this IChartSpectrumModel spectrum)
        {
            return spectrum.ToXml().GetXml();
        }

        public static string ToXmlString(this IChartSpectrumOfTypeProcessedModel spectrum)
        {
            return spectrum.ToXml().GetXml();
        }
        #endregion

        #region elements
@@ -255,134 +102,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
            return xmlelement;
        }
        #endregion

        #region settings
        private static XmlElement GetAlignmentSettingsXml(XmlDocument dom,
                                                          AlignmentSettingsModel alignmentSettings)
        {
            var xmlalignmentsettings = dom.CreateElement(Constants.Constants.XML_ALIGNMENT_SETTINGS);

            /* num of points */
            var xmlnumofpoints = dom.CreateElement(Constants.Constants.XML_NUM_OF_POINTS);
            xmlnumofpoints.InnerText = alignmentSettings.NumOfPoints.ToString();

            xmlalignmentsettings.AppendChild(xmlnumofpoints);

            /* segment boundaries */
            var xmlsegmentboundaries = dom.CreateElement(Constants.Constants.XML_ALIGNMENT_SETTINGS_SEGMENT_BOUNDARIES);
            /*  min */
            var xmlsegmentboundariesmin = dom.CreateElement(Constants.Constants.XML_MIN);
            xmlsegmentboundariesmin.InnerText = alignmentSettings.AlignmentSegmentBoundaries.Min.ToString();
            xmlsegmentboundaries.AppendChild(xmlsegmentboundariesmin);
            /*  max */
            var xmlsegmentboundariesmax = dom.CreateElement(Constants.Constants.XML_MAX);
            xmlsegmentboundariesmax.InnerText = alignmentSettings.AlignmentSegmentBoundaries.Max.ToString();
            xmlsegmentboundaries.AppendChild(xmlsegmentboundariesmax);

            xmlalignmentsettings.AppendChild(xmlsegmentboundaries);

            return xmlalignmentsettings;
        }

        private static XmlElement GetSegmentsFitSettingsXml(XmlDocument dom,
                                                            ContinuumRemovalSettingsModel continuumRemovalSettings)
        {
            var xmlcontinuumremovalsettings = dom.CreateElement(Constants.Constants.XML_CONTINUUM_REMOVAL_SETTINGS);

            /* num of points */
            var xmlnumofpoints = dom.CreateElement(Constants.Constants.XML_NUM_OF_POINTS);
            xmlnumofpoints.InnerText = continuumRemovalSettings.NumOfPointsForAveragingMissingPointX.ToString();
            xmlcontinuumremovalsettings.AppendChild(xmlnumofpoints);

            /* segments */
            var xmlsegments = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENTS);
            foreach (var segment in continuumRemovalSettings.Segments)
            {
                var xmlsegment = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENT);

                /* fit method name */
                var xmlfitmethodname = dom.CreateElement(Constants.Constants.XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT_FIT_METHOD_NAME);
                xmlfitmethodname.InnerText = segment.FitMethodName;
                xmlsegment.AppendChild(xmlfitmethodname);

                /* start */
                var xmlsegmentstart = dom.CreateElement(Constants.Constants.XML_SEGMENT_START);
                xmlsegmentstart.InnerText = segment.XStart.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentstart);

                /* end */
                var xmlsegmentend = dom.CreateElement(Constants.Constants.XML_SEGMENT_END);
                xmlsegmentend.InnerText = segment.XEnd.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentend);

                /* fit param value */
                if (segment.FitParamValue.HasValue)
                {
                    var xmlfitparamvalue = dom.CreateElement(Constants.Constants.XML_CONTINUUM_REMOVAL_SETTINGS_SEGMENT_PARAMETER_VALUE);
                    xmlfitparamvalue.InnerText = segment.FitParamValue.Value.ToDoubleInvariantString();
                    xmlsegment.AppendChild(xmlfitparamvalue);
                }

                xmlsegments.AppendChild(xmlsegment);
            }

            xmlcontinuumremovalsettings.AppendChild(xmlsegments);

            return xmlcontinuumremovalsettings;
        }

        private static XmlElement GetSmoothingSettingsXml(XmlDocument dom,
                                                          SmoothingSettingsModel smoothingSettings)
        {
            var xmlsmoothingsettings = dom.CreateElement(Constants.Constants.XML_SMOOTHING_SETTINGS);

            var xmlsegments = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENTS);
            foreach (var segment in smoothingSettings.Segments)
            {
                var xmlsegment = dom.CreateElement(Constants.Constants.XML_SETTINGS_SEGMENT);

                /* start */
                var xmlsegmentstart = dom.CreateElement(Constants.Constants.XML_SEGMENT_START);
                xmlsegmentstart.InnerText = segment.XStart.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentstart);

                /* end */
                var xmlsegmentend = dom.CreateElement(Constants.Constants.XML_SEGMENT_END);
                xmlsegmentend.InnerText = segment.XEnd.ToDoubleInvariantString();
                xmlsegment.AppendChild(xmlsegmentend);

                /* polynomial order */
                var xmlpolynomialorder = dom.CreateElement(Constants.Constants.XML_SMOOTHING_POLYNOMIAL_ORDER);
                xmlpolynomialorder.InnerText = segment.PolynomialOrder.ToString();
                xmlsegment.AppendChild(xmlpolynomialorder);

                /* window size */
                var xmlwindowsize = dom.CreateElement(Constants.Constants.XML_SMOOTHING_WINDOW_SIZE);
                xmlwindowsize.InnerText = segment.WindowSize.ToString();
                xmlsegment.AppendChild(xmlwindowsize);

                xmlsegments.AppendChild(xmlsegment);
            }

            xmlsmoothingsettings.AppendChild(xmlsegments);

            return xmlsmoothingsettings;
        }

        public static SegmentFitSettingsModel ToSegmentFitSettingsModel(this SegmentFitModel model)
        {
            var p = new SegmentFitSettingsModel()
            {
                Name = model.SelectedFitMethod.Name,
                FitMethodName = model.SelectedFitMethod.MethodName,
                FitParamValue = (model.SelectedFitMethod.ParameterConstraintValue != null ? model.SelectedFitMethod.ParameterConstraintValue.Value : 0),
                XStart = model.P1.X,
                XEnd = model.P2.X
            };

            return p;
        }
        #endregion
        #endregion

        public static string GetDescription(this Enum enumValue)
@@ -413,6 +132,20 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
                                               segment.SelectedFitMethod.ParameterConstraintValue?.Value);
        }

        public static SegmentFitSettingsModel ToSegmentFitSettingsModel(this SegmentFitModel model)
        {
            var p = new SegmentFitSettingsModel()
            {
                Name = model.SelectedFitMethod.Name,
                FitMethodName = model.SelectedFitMethod.MethodName,
                FitParamValue = (model.SelectedFitMethod.ParameterConstraintValue != null ? model.SelectedFitMethod.ParameterConstraintValue.Value : 0),
                XStart = model.P1.X,
                XEnd = model.P2.X
            };

            return p;
        }

        public static SmoothingSegment ToSmoothingSegment(this SegmentSmoothingSettingsModel segmentSettings)
        {
            return new SmoothingSegment(segmentSettings.Id,
@@ -444,23 +177,5 @@ namespace INAF.Apps.Uwp.SLabDataManager.Extensions
            // create the solidColorbrush
            return new SolidColorBrush(color);
        }

        //public static IChartSpectrumModel ToChartSpectrumModel(this FileSpectrumModel fileSpectrum)
        //{
        //    List<ElementModel> elements = new List<ElementModel>();
        //    foreach (var element in fileSpectrum.Elements)
        //    {
        //        elements.Add(new ElementModel(element.X, element.Y));
        //    }

        //    return new ChartSpectrumModel()
        //    {
        //        Id = fileSpectrum.Id,
        //        Filename = fileSpectrum.Filename,
        //        ParentId = fileSpectrum.ParentId,
        //        Type = fileSpectrum.Type,
        //        Elements = new ObservableCollection<ElementModel>(elements)
        //    };
        //}
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
{
    public class ProcessedFilesSummaryItemsTemplateSelector : DataTemplateSelector
    {
        public DataTemplate AlignedFileSettingsAummary { get; set; }
        public DataTemplate AlignedFileSettingsSummary { get; set; }

        public DataTemplate ContinuumRemovedFileSettingsSummary { get; set; }

@@ -19,7 +19,7 @@ namespace INAF.Apps.Uwp.SLabDataManager.Helpers.UI
            if (item is ChartSpectrumOfTypeRawModel)
                return RawOrRefSummary;
            else if (item is ChartSpectrumOfTypeAlignedModel)
                return AlignedFileSettingsAummary;
                return AlignedFileSettingsSummary;
            else if (item is ChartSpectrumOfTypeContinuumRemovedModel)
                return ContinuumRemovedFileSettingsSummary;
            else if (item is ChartSpectrumOfTypeSmoothedModel)
+1 −1
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@
    <Compile Include="Helpers\RemoteOperations\RemoteOperationsManagerMaterials.cs" />
    <Compile Include="Helpers\RemoteOperations\RemoteOperationsManagerSampleAndMeasurement.cs" />
    <Compile Include="Helpers\UI\Chart\YAxisLabelFormatter.cs" />
    <Compile Include="Models\Chart\ChartSpectrumOfTypeAlignedModel.cs" />
    <Compile Include="Models\Chart\SelectedRefBand.cs" />
    <Compile Include="Models\Containers\SpectraContainer.cs" />
    <Compile Include="Models\Chart\Smoothing\SmoothingSegment.cs" />
@@ -236,7 +237,6 @@
    <Compile Include="Helpers\UI\XamlHelpers.cs" />
    <Compile Include="Helpers\UpdateUIHelper.cs" />
    <Compile Include="Models\Chart\ChartSpectrumModel.cs" />
    <Compile Include="Models\Chart\ChartSpectrumOfTypeAlignedModel.cs" />
    <Compile Include="Models\Chart\ChartSpectrumOfTypeContinuumRemovedModel.cs" />
    <Compile Include="Models\Chart\ChartSpectrumOfTypeRawModel.cs" />
    <Compile Include="Models\Chart\ChartSpectrumOfTypeSmoothedModel.cs" />
+33 −10
Original line number Diff line number Diff line
@@ -38,6 +38,29 @@ namespace INAF.Apps.Uwp.SLabDataManager.Models.Chart
            Level= spectrumLevel;
        }

        public ChartSpectrumModel(IServiceProvider serviceProvider,
                                  SpectrumType spectrumType,
                                  SpectrumLevel spectrumLevel,
                                  string filename) : this(serviceProvider, spectrumType, spectrumLevel)
        {
            Filename = filename;
            Title = getTitle();

            IsVisible = true;
        }

        public ChartSpectrumModel(IServiceProvider serviceProvider,
                                  SpectrumType spectrumType,
                                  SpectrumLevel spectrumLevel,
                                  string filename,
                                  string filepath) : this(serviceProvider, spectrumType, spectrumLevel, filename)
        {
            Filepath = filepath;
            Title = getTitle();

            IsVisible = true;
        }

        public ChartSpectrumModel(SpectrumType spectrumType,
                                  SpectrumLevel spectrumLevel,
                                  IEnumerable<ElementModel> points) : this()
@@ -47,25 +70,20 @@ namespace INAF.Apps.Uwp.SLabDataManager.Models.Chart
            Elements = new ObservableCollection<ElementModel>(points);
        }

        public ChartSpectrumModel(IServiceProvider serviceProvider,
                                  SpectrumType spectrumType,
        public ChartSpectrumModel(SpectrumType spectrumType,
                                  SpectrumLevel spectrumLevel,
                                  string fileName) : this(serviceProvider, spectrumType, spectrumLevel)
                                  string fileName) : base(spectrumType, spectrumLevel, fileName)
        {
            Filename = fileName;
            Title = getTitle();

            IsVisible = true;
        }

        public ChartSpectrumModel(IServiceProvider serviceProvider,
                                  SpectrumType spectrumType,
        public ChartSpectrumModel(SpectrumType spectrumType,
                                  SpectrumLevel spectrumLevel,
                                  string fileName,
                                  string filepath) : this(serviceProvider, spectrumType, spectrumLevel)
                                  string filename,
                                  string filepath) : base(spectrumType, spectrumLevel, filename, filepath)
        {
            Filename = fileName;
            Filepath = filepath;
            Title = getTitle();

            IsVisible = true;
@@ -141,6 +159,11 @@ namespace INAF.Apps.Uwp.SLabDataManager.Models.Chart
            return Elements.Select(x => x.Y).ToArray();
        }

        protected void setPointsFromElements()
        {
            Points = Elements.Select(x => x.ToPointModel()).ToList();
        }

        public void switchToMeasureUnit(WavelengthMeasureUnit newMeasureUnit)
        {
            Elements.All(x => { x.switchToMeasureUnit(newMeasureUnit); return true; });
+6 −0
Original line number Diff line number Diff line
@@ -35,5 +35,11 @@ namespace INAF.Apps.Uwp.SLabDataManager.Models.Chart
        public AlignmentSettingsModel AlignmentSettings { get; set; }

        public ParentFilesModel ParentFiles { get; set; }

        public IChartSpectrumOfTypeProcessedModel prepareForSaving()
        {
            setPointsFromElements();
            return this;
        }
    }
}
Loading