Ejemplo n.º 1
0
 public void Persist(PluginDescription pluginDescription, byte[] pluginPackage) {
   using (var ctx = new DeploymentDataContext()) {
     try {
       using (var transaction = new TransactionScope()) {
         Plugin pluginEntity = InsertOrUpdatePlugin(ctx, pluginDescription);
         if (pluginEntity.PluginPackage == null) {
           // insert
           pluginEntity.PluginPackage = MakePluginPackage(pluginEntity, pluginPackage);
         } else {
           // update
           pluginEntity.PluginPackage.Data = pluginPackage;
         }
         ctx.SubmitChanges();
         transaction.Complete();
       }
     }
     catch (SqlException ex) {
       throw new ArgumentException("Something went wrong while trying to persist plugin", ex);
     }
     catch (InvalidOperationException ex) {
       throw new ArgumentException("Something went wrong while trying to persist plugin", ex);
     }
   }
 }
Ejemplo n.º 2
0
 public void Persist(ProductDescription productDescription) {
   using (var ctx = new DeploymentDataContext()) {
     try {
       using (var transaction = new TransactionScope()) {
         foreach (var plugin in productDescription.Plugins) {
           var pluginEntity = GetExistingPlugin(ctx, plugin.Name, plugin.Version);
           UpdatePlugin(ctx, pluginEntity, plugin);
         }
         InsertOrUpdateProduct(ctx, productDescription);
         ctx.SubmitChanges();
         transaction.Complete();
       }
     }
     catch (SqlException ex) {
       throw new ArgumentException("Something went wrong while trying to persist product", ex);
     }
     catch (InvalidOperationException ex) {
       throw new ArgumentException("Something went wrong while trying to persist product", ex);
     }
   }
 }
Ejemplo n.º 3
0
 private IEnumerable<Plugin> GetDependencies(DeploymentDataContext ctx, Plugin plugin) {
   return from pair in ctx.Dependencies
          from dependency in ctx.Plugins
          where pair.PluginId == plugin.Id
          where pair.DependencyId == dependency.Id
          select dependency;
 }
Ejemplo n.º 4
0
 public byte[] PluginFile(PluginDescription pluginDescription) {
   using (var ctx = new DeploymentDataContext()) {
     return GetExistingPlugin(ctx, pluginDescription.Name, pluginDescription.Version).PluginPackage.Data.ToArray();
   }
 }
Ejemplo n.º 5
0
    private PluginDescription MakePluginDescription(DeploymentDataContext ctx, Plugin plugin) {
      if (!pluginDescriptions.ContainsKey(plugin.Id)) {
        // no cached description -> create new
        var desc = new PluginDescription(plugin.Name, new Version(plugin.Version));
        pluginDescriptions[plugin.Id] = desc; // and add to cache

        // fill remaining properties of plugin description
        desc.Dependencies = new List<PluginDescription>(from dep in GetDependencies(ctx, plugin) select MakePluginDescription(ctx, dep));
        desc.ContactEmail = plugin.ContactEmail ?? string.Empty;
        desc.ContactName = plugin.ContactName ?? string.Empty;
        desc.LicenseText = plugin.License ?? string.Empty;
      }
      return pluginDescriptions[plugin.Id];
    }
Ejemplo n.º 6
0
 private Product GetExistingProduct(DeploymentDataContext ctx, string name, Version version) {
   return (from p in ctx.Products
           where p.Name == name
           where p.Version == version.ToString()
           select p).Single();
 }
Ejemplo n.º 7
0
    private void DeleteOldDependencies(DeploymentDataContext ctx, Plugin pluginEntity) {
      var oldDependencies = (from dep in ctx.Dependencies
                             where dep.PluginId == pluginEntity.Id
                             select dep).ToList();

      ctx.Dependencies.DeleteAllOnSubmit(oldDependencies);
      ctx.SubmitChanges();
    }
Ejemplo n.º 8
0
 private ProductDescription MakeProductDescription(DeploymentDataContext ctx, Product p, IEnumerable<Plugin> plugins) {
   var desc = new ProductDescription(p.Name, new Version(p.Version), from plugin in plugins
                                                                     select MakePluginDescription(ctx, plugin));
   return desc;
 }
Ejemplo n.º 9
0
    private void UpdatePlugin(DeploymentDataContext ctx, Plugin pluginEntity, PluginDescription pluginDescription) {
      // update plugin data
      pluginEntity.License = pluginDescription.LicenseText;
      pluginEntity.ContactName = pluginDescription.ContactName;
      pluginEntity.ContactEmail = pluginDescription.ContactEmail;

      // delete cached entry
      if (pluginDescriptions.ContainsKey(pluginEntity.Id)) pluginDescriptions.Remove(pluginEntity.Id);

      DeleteOldDependencies(ctx, pluginEntity);

      foreach (var dependency in pluginDescription.Dependencies) {
        var dependencyEntity = GetExistingPlugin(ctx, dependency.Name, dependency.Version);
        Dependency d = new Dependency();
        d.PluginId = pluginEntity.Id;
        d.DependencyId = dependencyEntity.Id;
        ctx.Dependencies.InsertOnSubmit(d);
      }
    }
Ejemplo n.º 10
0
    private Plugin InsertOrUpdatePlugin(DeploymentDataContext ctx, PluginDescription pluginDescription) {
      var pluginEntity = (from p in ctx.Plugins
                          where p.Name == pluginDescription.Name
                          where p.Version == pluginDescription.Version.ToString()
                          select p).FirstOrDefault() ?? MakePluginFromDescription(pluginDescription);

      if (pluginEntity.Id <= 0) {
        ctx.Plugins.InsertOnSubmit(pluginEntity);
        ctx.SubmitChanges();
      }

      UpdatePlugin(ctx, pluginEntity, pluginDescription);
      return pluginEntity;
    }
Ejemplo n.º 11
0
 private void DeleteProductPlugins(DeploymentDataContext ctx, Product productEntity) {
   var oldPlugins = (from p in ctx.ProductPlugins
                     where p.ProductId == productEntity.Id
                     select p).ToList();
   ctx.ProductPlugins.DeleteAllOnSubmit(oldPlugins);
   ctx.SubmitChanges();
 }
Ejemplo n.º 12
0
    private void InsertOrUpdateProduct(DeploymentDataContext ctx, ProductDescription product) {
      var productEntity = (from p in ctx.Products
                           where p.Name == product.Name
                           where p.Version == product.Version.ToString()
                           select p).FirstOrDefault() ?? MakeProductFromDescription(product);

      if (productEntity.Id <= 0) {
        ctx.Products.InsertOnSubmit(productEntity);
        ctx.SubmitChanges();
      }

      DeleteProductPlugins(ctx, productEntity);

      foreach (var plugin in product.Plugins) {
        var existingPlugin = GetExistingPlugin(ctx, plugin.Name, plugin.Version);
        ProductPlugin prodPlugin = new ProductPlugin();
        prodPlugin.PluginId = existingPlugin.Id;
        prodPlugin.ProductId = productEntity.Id;
        ctx.ProductPlugins.InsertOnSubmit(prodPlugin);
      }
    }
Ejemplo n.º 13
0
    public void Delete(ProductDescription productDescription) {
      using (var ctx = new DeploymentDataContext()) {
        try {
          using (var transaction = new TransactionScope()) {
            var productEntity = GetExistingProduct(ctx, productDescription.Name, productDescription.Version);

            DeleteProductPlugins(ctx, productEntity);
            ctx.Products.DeleteOnSubmit(productEntity);

            ctx.SubmitChanges();
            transaction.Complete();
          }
        }
        catch (SqlException ex) {
          throw new ArgumentException("Something went wrong while trying to delete product", ex);
        }
        catch (InvalidOperationException ex) {
          throw new ArgumentException("Something went wrong while trying to delete product", ex);
        }
      }
    }