예제 #1
0
        public object OpenDataset(IDdxDataset dataset, Type knownType)
        {
            Assert.ArgumentNotNull(dataset, nameof(dataset));

            if (knownType != null)
            {
                return(OpenKnownDatasetType(dataset, knownType));
            }

            try
            {
                if (dataset is ObjectDataset objectDataset)
                {
                    return(_datasetContext.OpenObjectClass(objectDataset) != null);
                }

                // TODO: Raster, Mosaic

                return(null);
            }
            catch (Exception e)
            {
                _msg.VerboseDebug($"Error opening dataset {dataset.Name}", e);
                return(false);
            }
        }
예제 #2
0
        public static IObjectClass TryOpenFromMasterDatabase(
            [NotNull] IObjectDataset dataset, bool allowAlways = false)
        {
            IDatasetContext context = GetMasterDatabaseWorkspaceContext(dataset,
                                                                        allowAlways);

            return(context?.OpenObjectClass(dataset));
        }
예제 #3
0
        private static bool CanWriteToDataset([NotNull] IObjectDataset objectDataset,
                                              [NotNull] IDatasetContext datasetContext)
        {
            IObjectClass objectClass = datasetContext.OpenObjectClass(objectDataset);

            // TODO check for file geodatabase/personal geodatabase
            return(objectClass != null && DatasetUtils.UserHasWriteAccess(objectClass));
        }
예제 #4
0
        public static bool DetermineIfIssuesCanBeNavigated(
            [NotNull] IDatasetContext datasetContext,
            [NotNull] IEnumerable <IErrorDataset> errorDatasets,
            [CanBeNull] NotificationCollection notifications = null)
        {
            Assert.ArgumentNotNull(datasetContext, nameof(datasetContext));
            Assert.ArgumentNotNull(errorDatasets, nameof(errorDatasets));

            var unableToNavigate      = false;
            List <IErrorDataset> list = errorDatasets.ToList();

            if (list.Count == 0)
            {
                unableToNavigate = true;
                NotificationUtils.Add(notifications, "No error datasets exist in model");
            }

            foreach (IErrorDataset dataset in list)
            {
                if (dataset == null)
                {
                    continue;
                }

                if (datasetContext.OpenObjectClass(dataset) == null)
                {
                    unableToNavigate = true;
                    NotificationUtils.Add(notifications, "Dataset {0} does not exist in workspace",
                                          dataset.Name);
                }
            }

            // ok if there is at least dataset for rows without geometry
            if (!list.OfType <ErrorTableDataset>().Any())
            {
                unableToNavigate = true;
                NotificationUtils.Add(notifications,
                                      "Error dataset for errors without geometry is required");
            }

            return(!unableToNavigate);
        }
예제 #5
0
        public static IEnumerable <IObjectClass> GetObjectClasses(
            [NotNull] IEnumerable <Dataset> datasets,
            [NotNull] IDatasetContext datasetContext)
        {
            var result = new List <IObjectClass>();

            foreach (Dataset dataset in datasets)
            {
                if (dataset.Deleted || dataset.Model == null)
                {
                    continue;
                }

                var objectDataset = dataset as IObjectDataset;

                if (objectDataset == null)
                {
                    continue;
                }

                IObjectClass objectClass;
                try
                {
                    objectClass = datasetContext.OpenObjectClass(objectDataset);
                }
                catch (Exception e)
                {
                    _msg.DebugFormat("Error opening object class for dataset {0} ({1}): {2}",
                                     dataset.Name, dataset.Model.Name, e.Message);

                    objectClass = null;
                }

                if (objectClass != null)
                {
                    result.Add(objectClass);
                }
            }

            return(result);
        }