Example #1
0
        private string GetUserBaseUriFromFilter(string filterpredicate)
        {
            var uri = GetPropertyFromFilter(filterpredicate, "UserProfileUri");

            uri = DataProviderHelper.GetWebIdRootURL(uri);

            return(uri);
        }
Example #2
0
        protected override void DoDelete(VisitedPlaceDataObject entity, LambdaExpression securityFilterExpression, IObjectsDataSet context, Dictionary <string, object> parameters)
        {
            var    userUri = DataProviderHelper.GetWebIdRootURL(entity.UserProfileUri);
            string visitedPlaceDocumentName = "myvisitedplaces.ttl";
            string visitedPlaceDocumentUri  = $"{userUri}/public/{visitedPlaceDocumentName}";

            StringBuilder sb;
            string        payload = "";

            if (!entity.IsNew)
            {
                // existing entity => we need to delete existing entry, before inserting modified one
                var existingEntity = DoGet(entity, securityFilterExpression, null, context, parameters);

                sb = new StringBuilder();
                sb.AppendLine($":{entity.Id} ");

                sb.AppendLine($"   a <http://generativeobjects.com/apps#VisitedPlace> ;");
                sb.AppendLine($"   <http://schema.org/startDate> \"{existingEntity.Date.ToString("yyyy-MM-dd")}\" ;");
                sb.AppendLine($"   <http://schema.org/description> \"\"\"{existingEntity.Description}\"\"\" ; ");
                sb.AppendLine($"   <http://generativeobjects.com/apps#VisitedPlaceType> \"{existingEntity.Typeofplace.ToString()}\" ; ");

                if (existingEntity.Typeofplace == PlaceTypesEnum.Country && entity.CountryURI != null)
                {
                    sb.AppendLine($"   <http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> <{existingEntity.CountryURI}> . ");
                }
                else
                {
                    sb.AppendLine($"   <http://dbpedia.org/ontology/Place> <{existingEntity.PlaceURI}> . ");
                }


                payload += $"DELETE DATA {{{sb.ToString()}}} ";
            }

            var token = DataProviderHelper.GetSolidToken();

            var statusPatch = DataProviderHelper.SendPatch(visitedPlaceDocumentUri, payload, token);

            if (statusPatch != HttpStatusCode.OK)
            {
                throw new GOServerException("Failed to delete the visited place information");
            }
        }
Example #3
0
        protected override UserProfileDataObject DoGet(UserProfileDataObject entity, LambdaExpression securityFilterExpression, List <string> includes, IObjectsDataSet context, Dictionary <string, object> parameters)
        {
            var userProfileUri = entity.Uri;

            var result = new UserProfileDataObject();

            result.Uri = entity.Uri;
            var dataset = ApplicationSettings.Container.Resolve <IObjectsDataSet>();

            dataset.AddObject(result);

            string tempfile = null;

            try
            {
                tempfile = DataProviderHelper.DownloadFile(userProfileUri, ".ttl");

                var g = new Graph();

                g.LoadFromFile(tempfile);
                //UriLoader.Load(g, new Uri(userProfileUri));  // NOT WORKING ... ??? SOMEHOW SHOULD WORK

                var query = @"SELECT * WHERE 
                                { ?me a <http://xmlns.com/foaf/0.1/Person> .
                                  OPTIONAL 
                                  {
                                          ?me <http://www.w3.org/2006/vcard/ns#fn> ?Name .
                                  }
                                  OPTIONAL 
                                  {
                                          ?me <http://www.w3.org/2006/vcard/ns#organization-name> ?OrganizationName .
                                  }
                                  OPTIONAL 
                                  {
                                          ?me <http://www.w3.org/2006/vcard/ns#role> ?Role .
                                  }
                                }";


                var returned = ((SparqlResultSet)g.ExecuteQuery(query)).SingleOrDefault();

                if (returned == null)
                {
                    return(null);
                }

                result.Role             = returned.HasValue("Role") ? returned["Role"].ToString() : null;
                result.OrganizationName = returned.HasValue("OrganizationName") ? returned["OrganizationName"].ToString() : null;
                result.Name             = returned.HasValue("Name") ? returned["Name"].ToString() : null;

                result.IsNew   = false;
                result.IsDirty = false;

                return(result);
            }
            finally
            {
                if (File.Exists(tempfile))
                {
                    File.Delete(tempfile);
                }
            }
        }
Example #4
0
        protected override int DoCount(LambdaExpression securityFilterExpression, string filterPredicate, object[] filterArguments, IObjectsDataSet context, Dictionary <string, object> parameters)
        {
            var userUri = GetUserBaseUriFromFilter(filterPredicate);

            if (userUri == null)
            {
                // search all the users registered in application
                var userNames = DataFacade.GOUserDataProvider.GetCollection(null).Select(u => u.UserName);
                int count     = 0;

                foreach (var userName in userNames)
                {
                    try
                    {
                        var userfilter = $"UserProfileUri == \"{userName}\" && {filterPredicate}";
                        count += DoCount(securityFilterExpression, userfilter, filterArguments, context, parameters);
                    }
                    catch (Exception e)
                    { }
                }

                return(count);
            }

            string visitedPlaceDocumentName = "myvisitedplaces.ttl";
            string visitedPlaceDocumentUri  = $"{userUri}/public/{visitedPlaceDocumentName}";
            string tempfile = null;

            var placeUriFilter   = GetPropertyFromFilter(filterPredicate, "PlaceURI");
            var countryUriFilter = GetPropertyFromFilter(filterPredicate, "CountryURI");

            try
            {
                tempfile = DataProviderHelper.DownloadFile(visitedPlaceDocumentUri, ".ttl");

                var g = new Graph();
                g.LoadFromFile(tempfile);
                //UriLoader.Load(g, new Uri(visitedPlaceDocumentUri)); // NOT WORKING ... ??? SOMEHOW SHOULD WORK

                var query = new SparqlParameterizedString();
                query.Namespaces.AddNamespace("go", new Uri("http://generativeobjects.com/apps#"));
                query.Namespaces.AddNamespace("schem", new Uri("http://schema.org"));

                if (placeUriFilter == null && countryUriFilter == null)
                {
                    query.CommandText = @"SELECT count(?visitedplace) AS ?count 
                                        WHERE { 
                                            ?visitedplace a go:VisitedPlace 
                                        } ";
                }
                else if (placeUriFilter != null)
                {
                    query.CommandText = @"SELECT count(?visitedplace) AS ?count 
                                        WHERE { 
                                            ?visitedplace a go:VisitedPlace  ;
                                            <http://dbpedia.org/ontology/Place> @PlaceUri .
                                        } ";

                    query.SetUri("@PlaceUri", new Uri(placeUriFilter));
                }
                else
                {
                    query.CommandText = @"SELECT count(?visitedplace) AS ?count 
                                        WHERE { 
                                            ?visitedplace a go:VisitedPlace  ;
                                            <http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> @CountryURI .
                                        } ";

                    query.SetUri("@CountryURI", new Uri(countryUriFilter));
                }

                var results = (SparqlResultSet)g.ExecuteQuery(query);

                var res   = results.Single();
                var count = Convert.ToInt32((res.Single().Value as BaseLiteralNode).Value);

                return(count);
            }
            finally
            {
                if (File.Exists(tempfile))
                {
                    File.Delete(tempfile);
                }
            }
        }
Example #5
0
        protected override DataObjectCollection <VisitedPlaceDataObject> DoGetCollection(LambdaExpression securityFilterExpression, string filterPredicate, object[] filterArguments, string orderByPredicate, int pageNumber, int pageSize, List <string> includes, IObjectsDataSet context, Dictionary <string, object> parameters)
        {
            var userUri = GetUserBaseUriFromFilter(filterPredicate);

            if (userUri == null)
            {
                // search all the users registered in application
                var userNames = DataFacade.GOUserDataProvider.GetCollection(null).Select(u => u.UserName);
                var toReturn  = new DataObjectCollection <VisitedPlaceDataObject>();
                toReturn.ObjectsDataSet = ApplicationSettings.Container.Resolve <IObjectsDataSet>();

                foreach (var userName in userNames)
                {
                    try
                    {
                        var userfilter       = $"UserProfileUri == \"{userName}\" && {filterPredicate}";
                        var subvisitedplaces = DoGetCollection(securityFilterExpression, userfilter, filterArguments, orderByPredicate, 0, 0, includes, context, parameters);

                        foreach (var subvisitedplace in subvisitedplaces)
                        {
                            toReturn.Add(subvisitedplace);
                        }
                    }
                    catch (Exception e)
                    { }
                }

                return(toReturn);
            }


            string visitedPlaceDocumentName = "myvisitedplaces.ttl";
            string visitedPlaceDocumentUri  = $"{userUri}/public/{visitedPlaceDocumentName}";
            string tempfile = null;

            var placeUriFilter   = GetPropertyFromFilter(filterPredicate, "PlaceURI");
            var countryUriFilter = GetPropertyFromFilter(filterPredicate, "CountryURI");

            try
            {
                tempfile = DataProviderHelper.DownloadFile(visitedPlaceDocumentUri, ".ttl");

                var g = new Graph();
                g.LoadFromFile(tempfile);
                //UriLoader.Load(g, new Uri(visitedPlaceDocumentUri)); // NOT WORKING ... ??? SOMEHOW SHOULD WORK


                var query = new SparqlParameterizedString();

                if (placeUriFilter == null && countryUriFilter == null)
                {
                    query.CommandText = @"SELECT *
                                      WHERE 
                                        { 
                                            ?VisitedPlace a <http://generativeobjects.com/apps#VisitedPlace> ; 
                                            <http://schema.org/startDate> ?Date;
                                            <http://schema.org/description> ?Description .
                                            OPTIONAL {
                                                ?VisitedPlace <http://generativeobjects.com/apps#VisitedPlaceType> ?PlaceOrCountry .
                                            }
                                            OPTIONAL {
                                                ?VisitedPlace <http://dbpedia.org/ontology/Place> ?PlaceURI .
                                            }
                                            OPTIONAL {
                                                ?VisitedPlace <http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> ?CountryURI .
                                           }
                                        } ";
                    ////<http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> ?CountryURI ;
                    if (pageNumber != 0 || pageSize != 0)
                    {
                        query.CommandText += $"LIMIT {pageSize} OFFSET {(pageNumber - 1) * pageSize}";
                    }
                }
                else if (placeUriFilter != null)
                {
                    query.CommandText = @"SELECT *
                                      WHERE 
                                        { 
                                            ?VisitedPlace a <http://generativeobjects.com/apps#VisitedPlace> ; 
                                            <http://dbpedia.org/ontology/Place> @PlaceUri ;
                                            <http://schema.org/startDate> ?Date;
                                            <http://schema.org/description> ?Description .
                                            
                                            OPTIONAL {
                                                ?VisitedPlace <http://generativeobjects.com/apps#VisitedPlaceType> ?PlaceOrCountry .
                                            }
                                        } ";

                    query.SetUri("@PlaceUri", new Uri(placeUriFilter));
                }
                else
                {
                    query.CommandText = @"SELECT *
                                      WHERE 
                                        { 
                                            ?VisitedPlace a <http://generativeobjects.com/apps#VisitedPlace> ; 
                                            <http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> @CountryURI ;
                                            <http://schema.org/startDate> ?Date;
                                            <http://schema.org/description> ?Description .

                                            OPTIONAL {
                                                ?VisitedPlace <http://generativeobjects.com/apps#VisitedPlaceType> ?PlaceOrCountry .
                                            }
                                        } ";

                    query.SetUri("@CountryURI", new Uri(countryUriFilter));
                }

                var results = (SparqlResultSet)g.ExecuteQuery(query);

                var toReturn = new DataObjectCollection <VisitedPlaceDataObject>();
                toReturn.ObjectsDataSet = ApplicationSettings.Container.Resolve <IObjectsDataSet>();

                foreach (var result in results)
                {
                    var visitedPlace = MapSparqlResultToVisitedPlace(result);
                    visitedPlace.UserProfileUri = GetPropertyFromFilter(filterPredicate, "UserProfileUri");
                    toReturn.Add(visitedPlace);
                }

                return(toReturn);
            }
            finally
            {
                if (File.Exists(tempfile))
                {
                    File.Delete(tempfile);
                }
            }
        }
Example #6
0
        protected override VisitedPlaceDataObject DoGet(VisitedPlaceDataObject entity, LambdaExpression securityFilterExpression, List <string> includes, IObjectsDataSet context, Dictionary <string, object> parameters)
        {
            var    userUri = DataProviderHelper.GetWebIdRootURL(entity.UserProfileUri);
            string visitedPlaceDocumentName = "myvisitedplaces.ttl";
            string visitedPlacesDocumentUri = $"{userUri}/public/{visitedPlaceDocumentName}";

            //string visitedPlaceUri = $"{visitedPlacesDocumentUri}#{entity.Id}"; // to be used with UriLoader.Load
            string tempfile = null;

            try
            {
                tempfile = DataProviderHelper.DownloadFile(visitedPlacesDocumentUri, ".ttl");

                var g = new Graph();
                g.LoadFromFile(tempfile);
                //UriLoader.Load(g, new Uri(visitedPlaceDocumentUri)); // NOT WORKING ... ??? SOMEHOW SHOULD WORK

                var query = new SparqlParameterizedString();

                query.CommandText = @"SELECT *
                                      WHERE 
                                        {     
                                            @VisitedPlace   <http://schema.org/startDate> ?Date ;                                          
                                                            <http://schema.org/description> ?Description.

                                            OPTIONAL {
                                                @VisitedPlace <http://generativeobjects.com/apps#VisitedPlaceType> ?PlaceOrCountry .
                                            }
                                            OPTIONAL {
                                                @VisitedPlace <http://dbpedia.org/ontology/Place> ?PlaceURI .
                                            }
                                            OPTIONAL {
                                                @VisitedPlace <http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> ?CountryURI .
                                            }   
                                        }";
                //                                                <http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> ?CountryURI ;

                string visitedPlaceLocalFileUri = $"file://////{tempfile}#{entity.Id}";
                query.SetUri("VisitedPlace", new Uri(visitedPlaceLocalFileUri));

                var results = (SparqlResultSet)g.ExecuteQuery(query);

                var result = results.SingleOrDefault();

                if (result == null)
                {
                    throw new GOServerException("Cannot load the VisitedPlace");
                }

                var visitedPlace = MapSparqlResultToVisitedPlace(result, mapId: false);
                visitedPlace.Id             = entity.Id;
                visitedPlace.UserProfileUri = entity.UserProfileUri;

                var dataset = ApplicationSettings.Container.Resolve <IObjectsDataSet>();
                dataset.AddObject(visitedPlace);

                return(visitedPlace);
            }
            finally
            {
                if (File.Exists(tempfile))
                {
                    File.Delete(tempfile);
                }
            }
        }
Example #7
0
        public static void EnsurePublicTypeRegistration(string userUri, string registrationName, string registrationType, string registrationLocation)
        {
            // going too fast to publicTypeIndex. should follow this : https://github.com/solid/solid/blob/master/proposals/data-discovery.md
            var publicTypeIndexUri = $"{userUri}/settings/publicTypeIndex.ttl";

            var g = new Graph();

            UriLoader.Load(g, new Uri(publicTypeIndexUri));

            var query = new SparqlParameterizedString();

            query.Namespaces.AddNamespace("s", new Uri("http://www.w3.org/ns/solid/terms#"));
            query.Namespaces.AddNamespace("schem", new Uri("http://schema.org"));

            //  ?reg < http://www.w3.org/ns/solid/terms#forClass> <http://schema.org/TextDigitalDocument>.
            //  ?reg < http://www.w3.org/ns/solid/terms#instance> <file:///C:/public/visitedplaces.ttl>.

            query.CommandText =
                @"SELECT ?reg WHERE 
                            { 
                                ?reg s:forClass @type .
                                ?reg s:instance @location .
                            }";

            // file:///C:/public/notes.ttl => the URI contains file:///C: because it is made relative to where the document is, and here we downloaded it to local file ...
            query.SetUri("location", new Uri($"file:///C:/public/{registrationLocation}"));
            query.SetUri("type", new Uri(registrationType));

            var registrationExists = ((SparqlResultSet)g.ExecuteQuery(query)).Any();

            var token = GetSolidToken();

            if (!registrationExists)
            {
                // create the type registration
                string payload     = $"INSERT DATA {{:{registrationName} a <http://www.w3.org/ns/solid/terms#TypeRegistration>; <http://www.w3.org/ns/solid/terms#forClass> <http://schema.org/TextDigitalDocument> ; <http://www.w3.org/ns/solid/terms#instance> </public/{registrationLocation}> . }}";
                var    statusPatch = DataProviderHelper.SendPatch(publicTypeIndexUri, payload, token);

                if (statusPatch != HttpStatusCode.OK)
                {
                    throw new GOServerException("PATCH Failed");
                }
            }

            var documentUri = $"{userUri}/public/{registrationLocation}";

            // verify the document exists
            var status = DataProviderHelper.SendHead(documentUri, token);

            if (status != HttpStatusCode.OK)
            {
                // create the document file otherwise

/*              string payload = @"@prefix : <#>.
 *                                      @prefix schem: <http://schema.org/>.
 *                                      @prefix XML: <http://www.w3.org/2001/XMLSchema#>.
 *                                      @prefix go: <http://generativeobjects.com/apps#>.";
 */
                status = DataProviderHelper.SendPost($"{userUri}/public/", registrationLocation, null, token);

                if (status != HttpStatusCode.OK)
                {
                    throw new GOServerException("POST Failed");
                }
            }
        }