Пример #1
0
        public bool DeleteUserFavorite(string favoriteGUID)
        {
            Guid g;

            if (!Guid.TryParse(favoriteGUID, out g))
            {
                return(false);
            }

            return(ApiOperation <bool>(delegate(User user, Storage storage)
            {
#if RELEASE
                if (user == null)
                {
                    return false;
                }
#endif

                Guid userId = user == null || user.Id == null ? Guid.Empty : user.Id;
                var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFavorites - {0}", userId);
                if (Cache.Contains(cacheKey))
                {
                    Cache.Remove(cacheKey);
                }

                return storage.DeleteTriplet(
                    TripleName.Parse(String.Format("czusr:{0}", user != null ? user.Id : Guid.Empty)),
                    TripleName.Parse("czpred:favorite"),
                    TripleName.Parse(String.Format("cztimeline:{0}", favoriteGUID)));
            }));
        }
Пример #2
0
        public bool PutUserFeatured(string featuredGUID)
        {
            Guid g;

            if (!Guid.TryParse(featuredGUID, out g))
            {
                return(false);
            }

            return(ApiOperation <bool>(delegate(User user, Storage storage)
            {
                if (user == null)
                {
                    return false;
                }


                var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFeatured - {0}", user.Id);
                if (Cache.Contains(cacheKey))
                {
                    Cache.Remove(cacheKey);
                }

                return storage.PutTriplet(
                    TripleName.Parse(String.Format("czusr:{0}", user.Id)),
                    TripleName.Parse("czpred:featured"),
                    TripleName.Parse(String.Format("cztimeline:{0}", featuredGUID)));
            }));
        }
Пример #3
0
        public void GetSubjectOwnerForUserTest()
        {
            var user = Storage.Users.First();

            Assert.AreEqual(
                user.Id.ToString(),
                Storage.GetSubjectOwner(TripleName.Parse(String.Format("czusr:{0}", user.Id))));
        }
Пример #4
0
        public Collection <TimelineShortcut> GetUserFeatured(string guid)
        {
            return(ApiOperation <Collection <TimelineShortcut> >(delegate(User user, Storage storage)
            {
                Guid userGuid;

                // If GUID is not given then get supervisor's GUID. Otherwise parse the given GUID.
                if (guid.Equals("default"))
                {
                    string aps = ConfigurationManager.AppSettings["FeaturedTimelinesSupervisorGuid"];
                    userGuid = String.IsNullOrEmpty(aps) ? Guid.Empty : Guid.Parse(aps);
                }
                else if (!Guid.TryParse(guid, out userGuid))
                {
                    return null;
                }

                var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFeatured - {0}", userGuid);
                if (Cache.Contains(cacheKey))
                {
                    return (Collection <TimelineShortcut>)Cache.Get(cacheKey);
                }

                var triple = storage.GetTriplet(String.Format("czusr:{0}", userGuid), "czpred:featured").FirstOrDefault();
                if (triple == null)
                {
                    return null;
                }

                var elements = new Collection <TimelineShortcut>();
                foreach (var t in triple.Objects)
                {
                    var objName = TripleName.Parse(t.Object);
                    if (objName.Prefix == "cztimeline")
                    {
                        var g = new Guid(objName.Name);
                        var timeline = storage.Timelines.Where(x => x.Id == g)
                                       .Include("Collection")
                                       .Include("Collection.User")
                                       .Include("Collection.SuperCollection")
                                       .Include("Exhibits")
                                       .Include("Exhibits.ContentItems")
                                       .FirstOrDefault();

                        if (timeline != null)
                        {
                            elements.Add(storage.GetTimelineShortcut(timeline));
                        }
                    }
                }

                Cache.Add(cacheKey, elements);

                return elements;
            }));
        }
Пример #5
0
        public Collection <TimelineShortcut> GetUserFavorites()
        {
            return(ApiOperation <Collection <TimelineShortcut> >(delegate(User user, Storage storage)
            {
#if RELEASE
                if (user == null)
                {
                    return null;
                }
#endif

                Guid userId = user == null || user.Id == null ? Guid.Empty : user.Id;
                var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFavorites - {0}", userId);
                if (Cache.Contains(cacheKey))
                {
                    return (Collection <TimelineShortcut>)Cache.Get(cacheKey);
                }

                var triple = storage.GetTriplet(String.Format("czusr:{0}", user != null ? user.Id : Guid.Empty), "czpred:favorite").FirstOrDefault();
                if (triple == null)
                {
                    return null;
                }

                var elements = new Collection <TimelineShortcut>();
                foreach (var t in triple.Objects)
                {
                    var objName = TripleName.Parse(t.Object);
                    if (objName.Prefix == "cztimeline")
                    {
                        var g = new Guid(objName.Name);
                        var timeline = storage.Timelines.Where(x => x.Id == g)
                                       .Include("Collection")
                                       .Include("Collection.User")
                                       .Include("Collection.SuperCollection")
                                       .Include("Exhibits")
                                       .Include("Exhibits.ContentItems")
                                       .FirstOrDefault();

                        if (timeline != null)
                        {
                            elements.Add(storage.GetTimelineShortcut(timeline));
                        }
                    }
                }

                Cache.Add(cacheKey, elements);

                return elements;
            }));
        }
Пример #6
0
        public void GetSubjectOwnerForTourTest()
        {
            var tour = Storage.Tours.First();

            Storage.Entry(tour).Reference(t => t.Collection).Load();
            var collection = tour.Collection;

            Storage.Entry(collection).Reference(c => c.User).Load();
            var user = collection.User;

            Assert.AreEqual(
                user.Id.ToString(),
                Storage.GetSubjectOwner(TripleName.Parse(String.Format("cztour:{0}", tour.Id))));
        }
Пример #7
0
        public void GetSubjectOwnerForExhibitTest()
        {
            var exhibit = Storage.Exhibits.First();

            Storage.Entry(exhibit).Reference(e => e.Collection).Load();
            var collection = exhibit.Collection;

            Storage.Entry(collection).Reference(c => c.User).Load();
            var user = collection.User;

            Assert.AreEqual(
                user.Id.ToString(),
                Storage.GetSubjectOwner(TripleName.Parse(String.Format("czexhibit:{0}", exhibit.Id))));
        }
Пример #8
0
        public void GetSubjectOwnerForArtifactTest()
        {
            var artifact = Storage.ContentItems.First();

            Storage.Entry(artifact).Reference(a => a.Collection).Load();
            var collection = artifact.Collection;

            Storage.Entry(collection).Reference(c => c.User).Load();
            var user = collection.User;

            Assert.AreEqual(
                user.Id.ToString(),
                Storage.GetSubjectOwner(TripleName.Parse(String.Format("czartifact:{0}", artifact.Id))));
        }
Пример #9
0
        public void PutTriplet(SingleTriple triple)
        {
            try
            {
                var subjectName = TripleName.Parse(triple.Subject);
                var predicateName = TripleName.Parse(triple.Predicate);
                var objectName = TripleName.Parse(triple.Object);
#if RELEASE
                ApiOperation(delegate(User user, Storage storage)
                {
                    if (user == null)
                    {
                        SetStatusCode(HttpStatusCode.Unauthorized, "Anonymous users cannot modify triple");
                    }
                    else
                    {
                        objectName = storage.EnsurePrefix(objectName);
                        if (objectName.Prefix == "_")
                        {
                            var tripleOwner = storage.GetSubjectOwner(objectName);
                            if (tripleOwner != null && tripleOwner != user.Id.ToString())
                                SetStatusCode(HttpStatusCode.BadRequest, "Object bNode belongs to another user");
                        }

                        if (storage.GetSubjectOwner(subjectName) == user.Id.ToString())
                        {
#else
                            using(var storage = new Storage()) 
#endif
                            {

                                SetStatusCode(storage.PutTriplet(subjectName, predicateName, objectName) ? HttpStatusCode.OK : HttpStatusCode.NotModified, "");
                            }
#if RELEASE
                        }
                        else
                        {
                            SetStatusCode(HttpStatusCode.Unauthorized, "Only subject owners can modify triple");
                        }
                    }
                });
#endif
            }
            catch (ArgumentException exc)
            {
                SetStatusCode(HttpStatusCode.BadRequest, exc.Message);
            }            
        }
Пример #10
0
        public void GetSubjectOwnerForBNodeTest()
        {
            var timeline = Storage.Timelines.First();

            Storage.Entry(timeline).Reference(t => t.Collection).Load();
            var collection = timeline.Collection;

            Storage.Entry(collection).Reference(c => c.User).Load();
            var user = collection.User;

            var bNodeId   = Guid.NewGuid();
            var bNodeName = TripleName.Parse(String.Format("_:{0}", bNodeId));

            Storage.PutTriplet(
                TripleName.Parse(String.Format("cztimeline:{0}", timeline.Id)),
                TripleName.Parse("czpred:connect"),
                bNodeName);
            Assert.AreEqual(
                user.Id.ToString(),
                Storage.GetSubjectOwner(bNodeName));
        }
Пример #11
0
        public void TripletShouldBeCreatedIfDataPositive()
        {
            var          timelineId   = new Guid("2b6cd8e0-5833-ceaf-117e-cf74db7fed1f");
            const string userId       = "ff5214e1-1bf4-4af5-8835-96cff2ce2cfd";
            string       subjectStr   = String.Format("czusr:{0}", userId);
            string       objectStr    = String.Format("cztimeline:{0}", timelineId);
            const string predicateStr = "czpred:favorite";

            bool result = Storage.PutTriplet(TripleName.Parse(subjectStr), TripleName.Parse(predicateStr), TripleName.Parse(objectStr));

            Assert.IsTrue(result, "Triplet has not created");

            List <Triple> triples = Storage.GetTriplet(subjectStr, predicateStr);

            bool tr = false;

            foreach (Triple triple in triples)
            {
                tr = triple.Objects.Any(t => t.Object == objectStr);
            }
            Assert.IsTrue(tr);
        }
Пример #12
0
        public void TripletShouldBeAddedTwoObject()
        {
            var          timelineId       = Guid.NewGuid();
            var          secondTimelineId = Guid.NewGuid();
            const string userId           = "ff5214e1-1bf4-4af5-8835-96cff2ce2cfd";
            string       subjectStr       = String.Format("czusr:{0}", userId);
            string       objectStr        = String.Format("cztimeline:{0}", timelineId);
            string       objectStr2       = String.Format("cztimeline:{0}", secondTimelineId);
            const string predicateStr     = "czpred:favorite";

            bool result = Storage.PutTriplet(TripleName.Parse(subjectStr), TripleName.Parse(predicateStr), TripleName.Parse(objectStr));

            Assert.IsTrue(result, "Triplet has not created");

            List <Triple> triples = Storage.GetTriplet(subjectStr, predicateStr);

            bool tr = false;

            foreach (Triple triple in triples)
            {
                tr = triple.Objects.Any(t => t.Object == objectStr);
            }
            Assert.IsTrue(tr);

            bool result2 = Storage.PutTriplet(TripleName.Parse(subjectStr), TripleName.Parse(predicateStr), TripleName.Parse(objectStr2));

            Assert.IsTrue(result2, "Triplet has not created");

            List <Triple> triples2 = Storage.GetTriplet(subjectStr, predicateStr);

            bool tr2 = false;

            foreach (Triple triple in triples2)
            {
                tr2 = triple.Objects.Any(t => t.Object == objectStr);
            }
            Assert.IsTrue(tr2);
        }
Пример #13
0
        public void DeleteTriplet(SingleTriple triple)
        {
            try
            {
                var subjectName = TripleName.Parse(triple.Subject);
                var predicateName = TripleName.Parse(triple.Predicate);
                var objectName = TripleName.Parse(triple.Object); 
#if RELEASE // Authenticate only in RELEASE mode 
                ApiOperation(delegate(User user, Storage storage)
                {
                    if (user == null)
                    {
                        SetStatusCode(HttpStatusCode.Unauthorized, "Anonymous users cannot delete triple");
                    } 
                    else 
                    {
                        if(storage.GetSubjectOwner(TripleName.Parse(triple.Subject)) == user.Id.ToString())
                        {
#else
                            using(var storage = new Storage()) 
#endif
                                SetStatusCode(storage.DeleteTriplet(subjectName, predicateName, objectName) ? HttpStatusCode.OK : HttpStatusCode.NotModified, "");
#if RELEASE
                        }
                        else
                        {
                            SetStatusCode(HttpStatusCode.Unauthorized, "Only subject owners can delete triple");
                        }
                    }
                });
#endif
            }
            catch (ArgumentException exc)
            {
                SetStatusCode(HttpStatusCode.BadRequest, exc.Message);
            }
        }
Пример #14
0
 public void TripletNameShouldNotBeParsedIfTimelineIdIsNotGuid()
 {
     TripleName.Parse("cztimeline:not-guid");
 }
Пример #15
0
 public void TripletNameShouldNotBeParsedIfUserIdIsNotGuid()
 {
     TripleName.Parse("czusr:not-guid");
 }
Пример #16
0
        public IEnumerable <Tile> GetUserFavorites(string currentSuperCollection = "", string currentCollection = "")
        {
            currentCollection      = currentCollection == null ? "" : currentCollection.ToLower();
            currentSuperCollection = currentSuperCollection == null ? "" : currentSuperCollection.ToLower();
            string defaultSuperCollection = (ConfigurationManager.AppSettings["DefaultSuperCollection"]).ToLower();

            List <Tile> tiles = new List <Tile>();

            return(ApiOperation(delegate(User user, Storage storage)
            {
                // TODO: Ensure following line is commented out prior to check-in. Overrides user so can test other people's favorites.
                // user = storage.Users.Where(u => u.DisplayName == "putnamehere").FirstOrDefault();

#if RELEASE
                if (user == null)
                {
                    return tiles;
                }
#endif

                Guid userId = (user == null || user.Id == null) ? Guid.Empty : user.Id;
                var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFavorites - {0}", userId);
                if (Cache.Contains(cacheKey))
                {
                    return (List <Tile>)Cache.Get(cacheKey);
                }

                var triple = storage.GetTriplet(String.Format("czusr:{0}", user != null ? user.Id : Guid.Empty), "czpred:favorite").FirstOrDefault();
                if (triple == null)
                {
                    return tiles;
                }

                foreach (var t in triple.Objects)
                {
                    var objName = TripleName.Parse(t.Object);
                    if (objName.Prefix == "cztimeline")
                    {
                        Timeline timeline = storage.Timelines
                                            .Where(item => item.Id == new Guid(objName.Name))
                                            .Include("Collection.User")
                                            .Include("Collection.SuperCollection")
                                            .FirstOrDefault();

                        if (timeline != null)
                        {
                            List <Guid> ancestorTimelines = TimelineExtensions.Ancestors(timeline);

                            ancestorTimelines.Reverse();

                            tiles.Add(new Tile
                            {
                                CollectionName = timeline.Collection.Title,
                                CuratorName = timeline.Collection.User.DisplayName,
                                Link = GetURLPath(timeline.Collection, defaultSuperCollection) + "#"
                                       + "/t" + string.Join("/t", ancestorTimelines.ToArray()),
                                Type = "t",
                                Title = timeline.Title,
                                CustomBackground = GetTileBackgroundImage(timeline.Collection.Theme),
                                IsCosmosCollection = (timeline.Collection.SuperCollection.Title.ToLower() == "chronozoom" && timeline.Collection.Path == "cosmos"),
                                IsCurrentCollection =
                                    (
                                        (
                                            timeline.Collection.SuperCollection.Title == currentSuperCollection ||
                                            ((currentSuperCollection == "") && (timeline.Collection.SuperCollection.Title == defaultSuperCollection))
                                        )
                                        &&
                                        (
                                            timeline.Collection.Path == currentCollection ||
                                            ((currentCollection == "") && timeline.Collection.Default)
                                        )
                                    )
                            });
                        }
                    }
                }

                tiles = tiles.OrderBy(t => t.CollectionName).ThenBy(t => t.Title).ToList();

                Cache.Add(cacheKey, tiles);

                return tiles;
            }));
        }