示例#1
0
        public object Post(DataPackageAddItemsToDefaultRequestTep request)
        {
            //Get all requests from database
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/default/items POST"));
                DataPackage tmp = DataPackage.GetTemporaryForCurrentUser(context);
                foreach (WebDataPackageItem item in request)
                {
                    RemoteResource tmp2 = new RemoteResource(context);
                    tmp2 = item.ToEntity(context, tmp2);
                    tmp.AddResourceItem(tmp2);
                }
                result = new WebDataPackageTep(tmp);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#2
0
        public object Delete(DataPackageRemoveItemFromDefaultRequestTep request)
        {
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/default/item DELETE"));
                DataPackage def = DataPackage.GetTemporaryForCurrentUser(context);

                foreach (RemoteResource res in def.Resources)
                {
                    var reqDPUri   = new UriBuilder(HttpUtility.UrlDecode(request.Url)).Uri.AbsoluteUri;
                    var localDPUri = new UriBuilder(HttpUtility.UrlDecode(res.Location)).Uri.AbsoluteUri;

                    reqDPUri   = reqDPUri.SetQueryParam("format", "atom");
                    localDPUri = localDPUri.SetQueryParam("format", "atom");

                    if (reqDPUri.Equals(localDPUri))
                    {
                        res.Delete();
                        break;
                    }
                }

                result = new WebDataPackageTep(def);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#3
0
        public object Delete(DataPackageClearDefaultRequestTep request)
        {
            //Get all requests from database
            var context = TepWebContext.GetWebContext(PagePrivileges.AdminOnly);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/default/{{userId}} DELETE userId='{0}", request.userId));
                User        user = User.FromUsername(context, request.userId);
                DataPackage def  = DataPackage.GetTemporaryForUser(context, user);

                foreach (RemoteResource res in def.Resources)
                {
                    res.Delete();
                }

                result = new WebDataPackageTep(def);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#4
0
        public object Delete(DataPackageClearCurrentDefaultRequestTep request)
        {
            //Get all requests from database
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/default DELETE"));
                DataPackage def = DataPackage.GetTemporaryForCurrentUser(context);

                foreach (RemoteResource res in def.Resources)
                {
                    res.Delete();
                }

                result = new WebDataPackageTep(def);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#5
0
        /// <summary>
        /// Put the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Put(DataPackageUpdateRequestTep request)
        {
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package PUT Id='{0}'", request.Id == 0 ? request.Identifier : request.Id.ToString()));
                DataPackage tmp;
                if (request.Id != 0)
                {
                    tmp = DataPackage.FromId(context, request.Id);
                }
                else if (!string.IsNullOrEmpty(request.Identifier))
                {
                    tmp = DataPackage.FromIdentifier(context, request.Identifier);
                }
                else
                {
                    throw new Exception("Undefined data package, set at least Id or Identifier");
                }

                if (request.Access != null)
                {
                    switch (request.Access)
                    {
                    case "public":
                        tmp.GrantPermissionsToAll();
                        Activity activity = new Activity(context, tmp, EntityOperationType.Share);
                        activity.Store();
                        break;

                    case "private":
                        tmp.RevokePermissionsFromAll(true, false);
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    tmp = (DataPackage)request.ToEntity(context, tmp);
                    tmp.Store();
                }

                result = new WebDataPackageTep(tmp);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#6
0
        /// <summary>
        /// Post the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Post(DataPackageCreateRequestTep request)
        {
            //Get all requests from database
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();

                var identifier = !string.IsNullOrEmpty(request.Identifier) ? TepUtility.ValidateIdentifier(request.Identifier) : TepUtility.ValidateIdentifier(request.Name);

                DataPackage tmp = new DataPackage(context);
                tmp = (DataPackage)request.ToEntity(context, tmp);

                if (request.Overwrite && tmp.OwnerId == context.UserId)
                {
                    tmp = DataPackage.FromIdentifier(context, identifier);
                    foreach (var res in tmp.Resources)
                    {
                        res.Delete();
                    }
                }
                else
                {
                    tmp            = (DataPackage)request.ToEntity(context, tmp);
                    tmp.Identifier = identifier;
                    try {
                        tmp.Store();
                    } catch (DuplicateEntityIdentifierException e) {
                        tmp = DataPackage.FromIdentifier(context, identifier);
                        if (tmp.OwnerId == context.UserId)
                        {
                            throw new DuplicateNameException(e.Message);
                        }
                        else
                        {
                            throw e;
                        }
                    }
                }

                result = new WebDataPackageTep(tmp);
                context.LogInfo(this, string.Format("/data/package POST Id='{0}'", tmp.Id));
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#7
0
        /// <summary>
        /// Put the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Put(DataPackageUpdateDefaultRequestTep request)
        {
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/default PUT"));
                DataPackage def = DataPackage.GetTemporaryForCurrentUser(context);
                //we want to do the copy of a datapackage into the default one
                if (def.Identifier != request.Identifier)
                {
                    foreach (RemoteResource res in def.Resources)
                    {
                        res.Delete();
                    }
                    def.LoadItems();
                    var tmp = DataPackage.FromIdentifier(context, request.Identifier);
                    foreach (RemoteResource res in tmp.Resources)
                    {
                        RemoteResource tmpres = new RemoteResource(context);
                        tmpres.Location = res.Location;
                        def.AddResourceItem(tmpres);
                    }
                    ActivityTep activity = new ActivityTep(context, tmp, EntityOperationType.View);
                    activity.SetParam("items", tmp.Resources.Count + "");
                    activity.Store();
                }
                else
                {
                    def = (DataPackage)request.ToEntity(context, def);
                }

                result = new WebDataPackageTep(def);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#8
0
        /// <summary>
        /// Put the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Put(DataPackageExportRequestTep request)
        {
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/export PUT Id='{0}'", request.Id == 0 ? request.Identifier : request.Id.ToString()));
                DataPackage tmp;
                if (request.Id != 0)
                {
                    tmp = DataPackage.FromId(context, request.Id);
                }
                else if (!string.IsNullOrEmpty(request.Identifier))
                {
                    tmp = DataPackage.FromIdentifier(context, request.Identifier);
                }
                else
                {
                    throw new Exception("Undefined data package, set at least Id or Identifier");
                }

                var serie = new Collection(context);
                serie.Identifier = tmp.Identifier;
                serie.Name       = tmp.Name;
                var entityType  = EntityType.GetEntityType(typeof(DataPackage));
                var description = new UriBuilder(context.BaseUrl + "/" + entityType.Keyword + "/" + tmp.Identifier + "/description");
                description.Query             = "key=" + tmp.AccessKey;
                serie.CatalogueDescriptionUrl = description.Uri.AbsoluteUri;
                var user = UserTep.FromId(context, context.UserId);
                serie.Domain = user.Domain;
                serie.Store();
                result = new WebDataPackageTep(tmp);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#9
0
        /// <summary>
        /// Get the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Get(GetDataPackageTep request)
        {
            //Get all requests from database
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/{{Identifier}} GET Id='{0}", request.Identifier));

                DataPackage tmp = DataPackage.FromIdentifier(context, request.Identifier);
                result = new WebDataPackageTep(tmp);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#10
0
        /// <summary>
        /// Delete the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Delete(RemoveItemFromDataPackage request)
        {
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/{{DpId}}/item/{{Id}} POST DpId='{0}', Id='{1}'", request.DpId, request.Id));
                RemoteResource tmp = RemoteResource.FromId(context, request.Id);
                tmp.Delete();
                DataPackage dp = DataPackage.FromId(context, request.DpId);
                result = new WebDataPackageTep(dp);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#11
0
        /// <summary>
        /// Post the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Post(AddItemToDataPackage request)
        {
            //Get all requests from database
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/{{DpId}}/item POST DpId='{0}', Location='{1}'", request.DpId, request.Location));
                DataPackage    tmp  = DataPackage.FromId(context, request.DpId);
                RemoteResource tmp2 = new RemoteResource(context);
                tmp2 = request.ToEntity(context, tmp2);
                tmp.AddResourceItem(tmp2);
                tmp.LoadItems();
                result = new WebDataPackageTep(tmp);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }
示例#12
0
        public object Post(DataPackageSaveDefaultRequestTep request)
        {
            //Get all requests from database
            var context = TepWebContext.GetWebContext(PagePrivileges.UserView);
            WebDataPackageTep result;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/package/default POST"));

                DataPackage def = DataPackage.GetTemporaryForCurrentUser(context);
                DataPackage tmp = new DataPackage(context);

                context.StartTransaction();

                if (string.IsNullOrEmpty(request.Identifier) && string.IsNullOrEmpty(request.Name))
                {
                    throw new Exception("No identifier set");
                }
                //var identifier = !string.IsNullOrEmpty(request.Identifier) ? TepUtility.ValidateIdentifier(request.Identifier) : TepUtility.ValidateIdentifier(request.Name);

                if (request.Overwrite && tmp.OwnerId == context.UserId)
                {
                    tmp = DataPackage.FromNameAndOwner(context, request.Name, context.UserId);
                    foreach (var res in tmp.Resources)
                    {
                        res.Delete();
                    }
                    tmp.Items = new EntityList <RemoteResource>(context);
                }
                else
                {
                    tmp = (DataPackage)request.ToEntity(context, tmp);
                    //tmp.Identifier = identifier;
                    try{
                        tmp.Store();
                    }catch (DuplicateEntityIdentifierException e) {
                        //tmp = DataPackage.FromIdentifier(context, identifier);
                        //if(tmp.OwnerId == context.UserId){
                        throw new DuplicateNameException(e.Message);
                        //} else {
                        //    throw e;
                        //}
                    }catch (Exception e) {
                        if (e.Message.StartsWith("Duplicate entry"))
                        {
                            throw new DuplicateNameException(e.Message);
                        }
                        throw e;
                    }
                }

                foreach (RemoteResource res in def.Resources)
                {
                    RemoteResource tmpres = new RemoteResource(context);
                    tmpres.Location = res.Location;
                    tmp.AddResourceItem(tmpres);
                }
                context.Commit();

                result = new WebDataPackageTep(tmp);
                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(result);
        }