Example #1
0
    void ChangeSettings (TModelContext context, TEntityAction action)
    {
      /*
      DATA IN
      - action.ModelAction (Settings model)
      */

      try {
        var modelList = context.Settings
          .ToList ()
        ;

        // only one record
        if (modelList.Count.Equals (1)) {
          var model = modelList [0];
          model.Change (action.ModelAction.SettingsModel);

          context.Settings.Update (model);// change Settings model
          context.SaveChanges (); // done

          action.Result = TValidationResult.Success;
        }

        // wrong record count
        else {
          action.Result = new TValidationResult ($"[{action.Operation.CategoryType.Category} - Change Settings] Wrong record count!");
        }
      }

      catch (Exception exception) {
        Models.Infrastructure.THelper.FormatException ("Change - Settings", exception, action);
      }
    }
Example #2
0
    static void ChangeStatus (TModelContext context, TEntityAction action)
    {
      /*
      DATA IN
      - action.Id (Component id to change)
      - action.ModelAction (Component model) (only Status component)
      */

      var id = action.Id;

      try {
        //Component Id must exist
        if (id.IsEmpty ()) {
          action.Result = new TValidationResult ($"[{action.Operation.CategoryType.Category} - Change - Status] Component Id can NOT be NULL or EMPTY!");
        }

        else {
          // Status 
          var statusList = context.ComponentStatus.AsQueryable ()
            .Where (p => p.Id.Equals (id))
            .ToList ()
          ;

          // Status found
          if (statusList.Count.Equals (1)) {
            var model = statusList [0];
            model.Change (action.ModelAction.ComponentStatusModel);
            context.ComponentStatus.Update (model);// change Status model
          }

          context.SaveChanges (); // save here

          action.Result = TValidationResult.Success;
        }
      }

      catch (Exception exception) {
        Models.Infrastructure.THelper.FormatException ("Change Status", exception, action);
      }
    }
Example #3
0
    static void ModifyContent (TModelContext context, TEntityAction action)
    {
      /*
      DATA IN
      - action.Id (Component id to change)
      - action.ModelAction (Component model) (only Content extension)
      */

      var id = action.Id;

      try {
        //Component Id must exist
        if (id.IsEmpty ()) {
          action.Result = new TValidationResult ($"[{action.Operation.CategoryType.Category} - Modify] Component Id can NOT be NULL or EMPTY!");
        }

        else {
          // search Id
          var descriptors = context.ComponentDescriptor.AsQueryable ()
            .Where (p => p.Id.Equals (id))
            .ToList ()
          ;

          // Descriptor found
          if (descriptors.Count.Equals (1)) {
            var descriptor = descriptors [0];
            var categoryValue = descriptor.Category;

            // extensions

            // search for extensions
            var categoryRelationList = action.CollectionAction.CategoryRelationCollection
              .Where (p => p.Category.Equals (categoryValue))
              .ToList ()
            ;

            // found
            if (categoryRelationList.Count.Equals (1)) {
              var categoryRelation = categoryRelationList [0]; // get extension using TComponentExtension

              var extension = TComponentExtension.Create (categoryRelation.Extension);
              extension.Request ();

              foreach (var extensionName in extension.ExtensionList) {
                switch (extensionName) {
                  case TComponentExtensionNames.Content: {
                      var list = context.ExtensionContent.AsQueryable ()
                        .Where (p => p.Id.Equals (id))
                        .ToList ()
                      ;

                      if (list.Count.Equals (1)) {
                        var model = list [0];
                        model.Change (action.ModelAction.ExtensionContentModel);
                        context.ExtensionContent.Update (model); // change model
                      }
                    }
                    break;
                }
              }
            }

            context.SaveChanges (); // update

            action.Result = TValidationResult.Success;
          }
        }
      }

      catch (Exception exception) {
        Models.Infrastructure.THelper.FormatException ("Modify", exception, action);
      }
    }
Example #4
0
    void ChangeActive (TModelContext context, TEntityAction action)
    {
      /*
      DATA IN
      - action.Id (Component id to change)
      - action.ModelAction (Component model)
      */

      var id = action.Id;

      try {
        //Component Id must exist
        if (id.IsEmpty ()) {
          action.Result = new TValidationResult ($"[{action.Operation.CategoryType.Category} - Change Active] Component Id can NOT be NULL or EMPTY!");
        }

        else {
          // search Id
          var descriptors = context.ComponentDescriptor.AsQueryable()
            .Where (p => p.Id.Equals (id))
            .ToList ()
          ;

          // Descriptor found
          if (descriptors.Count.Equals (1)) {
            var descriptor = descriptors [0];
            var categoryValue = descriptor.Category;

            // only one component has active status as true
            // reset old
            var statusList = context.ComponentStatus.AsQueryable()
              .Where (p => p.Active.Equals (true))
              .ToList ()
            ;

            if (statusList.Count.Equals (1)) {
              var model = statusList [0];
              model.Active = false; // reset old
              context.ComponentStatus.Update (model);// change Status model
            }

            // status collection
            foreach (var item in action.CollectionAction.ComponentStatusCollection) {
              var list = context.ComponentStatus.AsQueryable()
                .Where (p => p.Active.Equals (true))
                .ToList ()
              ;

              // Status found
              if (list.Count.Equals (1)) {
                var model = list [0];
                model.Active = false; // reset old
                context.ComponentStatus.Update (model);// change Status model

                break;
              }
            }

            // new Status 
            statusList = context.ComponentStatus.AsQueryable()
              .Where (p => p.Id.Equals (id))
              .ToList ()
            ;

            // Status found
            if (statusList.Count.Equals (1)) {
              var model = statusList [0];
              model.Change (action.ModelAction.ComponentStatusModel);
              context.ComponentStatus.Update (model);// change Status model
            }

            // status collection
            foreach (var item in action.CollectionAction.ComponentStatusCollection) {
              var list = context.ComponentStatus.AsQueryable()
                .Where (p => p.Id.Equals (item.Id))
                .ToList ()
              ;

              // Status found
              if (list.Count.Equals (1)) {
                var model = list [0];
                model.Change (item);
                context.ComponentStatus.Update (model);// change Status model

                break;
              }
            }

            context.SaveChanges (); // update

            action.Result = TValidationResult.Success;
          }
        }
      }

      catch (Exception exception) {
        Models.Infrastructure.THelper.FormatException ("Change - Active", exception, action);
      }
    }
Example #5
0
    static void ChangeFull (TModelContext context, TEntityAction action)
    {
      /*
      DATA IN
      - action.Id (Component id to change)
      - action.ModelAction (Component model)
      */

      //validate Name
      if (ValidateString (action)) {
        var id = action.Id;

        try {
          //Component Id must exist
          if (id.IsEmpty ()) {
            action.Result = new TValidationResult ($"[{action.Operation.CategoryType.Category} - Change Full] Component Id can NOT be NULL or EMPTY!");
          }

          else {
            // search Id
            var descriptors = context.ComponentDescriptor.AsQueryable().AsQueryable()
              .Where (p => p.Id.Equals (id))
              .ToList ()
            ;

            // Descriptor found
            if (descriptors.Count.Equals (1)) {
              var descriptor = descriptors [0];
              var categoryValue = descriptor.Category;

              // Info
              var infoList = context.ComponentInfo.AsQueryable ()
                .Where (p => p.Id.Equals (id))
                .ToList ()
              ;

              // Info found
              if (infoList.Count.Equals (1)) {
                var model = infoList [0];
                model.Change (action.ModelAction.ComponentInfoModel);
                context.ComponentInfo.Update (model);// change Info model
              }

              // Status 
              var compStatus = ComponentStatus.CreateDefault;

              var statusList = context.ComponentStatus.AsQueryable ()
                .Where (p => p.Id.Equals (id))
                .ToList ()
              ;

              // Status found
              if (statusList.Count.Equals (1)) {
                var model = statusList [0];
                model.Change (action.ModelAction.ComponentStatusModel);
                context.ComponentStatus.Update (model);// change Status model

                compStatus.CopyFrom (model);
              }

              // status collection
              foreach (var item in action.CollectionAction.ComponentStatusCollection) {
                var list = context.ComponentStatus.AsQueryable ()
                  .Where (p => p.Id.Equals (item.Id))
                  .ToList ()
                ;

                // Status found
                if (list.Count.Equals (1)) {
                  var model = list [0];
                  model.Change (item);
                  context.ComponentStatus.Update (model);// change Status model
                }
              }

              context.SaveChanges (); // save here

              // Component Relation Collection

              //remove old first (Parent)
              var relationList = context.ComponentRelation.AsQueryable ()
                .Where (p => p.ParentId.Equals (id))
                .ToList ()
              ;

              foreach (var relation in relationList) {
                // change old child status busy to false
                var childList = context.ComponentStatus.AsQueryable ()
                  .Where (p => p.Id.Equals (relation.ChildId))
                  .ToList ()
                ;

                // found
                if (childList.Count.Equals (1)) {
                  var child = childList [0];
                  child.Busy = false;

                  context.ComponentStatus.Update (child); // update
                }

                context.ComponentRelation.Remove (relation); // remove old
              }

              // insert new
              foreach (var item in action.CollectionAction.ComponentRelationCollection) {
                // change child status busy to true
                var childList = context.ComponentStatus.AsQueryable ()
                  .Where (p => p.Id.Equals (item.ChildId))
                  .ToList ()
                ;

                // found
                if (childList.Count.Equals (1)) {
                  var child = childList [0];
                  child.Busy = true;

                  context.ComponentStatus.Update (child); // update
                }

                item.ParentId = id;
                context.ComponentRelation.Add (item); // insert new
              }

              // extensions

              // search for extensions
              var categoryRelationList = action.CollectionAction.CategoryRelationCollection
                .Where (p => p.Category.Equals (categoryValue))
                .ToList ()
              ;

              // found
              if (categoryRelationList.Count.Equals (1)) {
                var categoryRelation = categoryRelationList [0]; // get extension using TComponentExtension

                var extension = TComponentExtension.Create (categoryRelation.Extension);
                extension.Request ();

                foreach (var extensionName in extension.ExtensionList) {
                  switch (extensionName) {
                    //case TComponentExtensionNames.Document: {
                    //    var list = context.ExtensionDocument
                    //      .Where (p => p.Id.Equals (id))
                    //      .ToList ()
                    //    ;

                    //    if (list.Count.Equals (1)) {
                    //      var model = list [0];
                    //      model.Change (action.ModelAction.ExtensionDocumentModel);
                    //      context.ExtensionDocument.Update (model); // change model
                    //    }
                    //  }
                    //  break;

                    case TComponentExtensionNames.Geometry: {
                        var list = context.ExtensionGeometry.AsQueryable ()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          var model = list [0];
                          model.Change (action.ModelAction.ExtensionGeometryModel);
                          context.ExtensionGeometry.Update (model);  // change model
                        }
                      }
                      break;

                    case TComponentExtensionNames.Image: {
                        var list = context.ExtensionImage.AsQueryable ()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          var model = list [0];
                          model.Change (action.ModelAction.ExtensionImageModel);
                          context.ExtensionImage.Update (model);  // change model
                        }
                      }
                      break;

                    case TComponentExtensionNames.Layout: {
                        var list = context.ExtensionLayout.AsQueryable ()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          var model = list [0];
                          model.Change (action.ModelAction.ExtensionLayoutModel);
                          context.ExtensionLayout.Update (model); // change model
                        }
                      }
                      break;

                    case TComponentExtensionNames.Node: {
                        // Node reverse
                        if (compStatus.NodeReverse) {
                          // remove old first (use ChildId)
                          var nodeList = context.ExtensionNode.AsQueryable ()
                            .Where (p => p.ChildId.Equals (id))
                            .ToList ()
                          ;

                          // found
                          if (nodeList.Count.Equals (1)) {
                            var node = nodeList [0];

                            // remove
                            context.ExtensionNode.Remove (node);
                            context.SaveChanges (); // update

                            var nodeListParent = context.ExtensionNode.AsQueryable()
                              .Where (p => p.ParentId.Equals (node.ParentId))
                              .ToList ()
                            ;

                            // just me
                            if (nodeListParent.Count.Equals (1)) {
                              // status
                              var list = context.ComponentStatus.AsQueryable()
                                .Where (p => p.Id.Equals (node.ParentId))
                                .ToList ()
                              ;

                              // found (just one)
                              if (list.Count.Equals (1)) {
                                var model = list [0];
                                model.Busy = false;
                                context.ComponentStatus.Update (model);
                              }
                            }
                          }

                          // next insert new
                          foreach (var node in action.CollectionAction.ExtensionNodeCollection) {
                            // validate same 
                            if (node.ChildId.Equals (id)) {
                              context.ExtensionNode.Add (node);
                              break; // just one
                            }
                          }

                          context.SaveChanges (); // update

                          // update status
                          nodeList = context.ExtensionNode.AsQueryable()
                            .Where (p => p.ChildId.Equals (id))
                            .ToList ()
                          ;

                          // found (just one)
                          if (nodeList.Count.Equals (1)) {
                            var node = nodeList [0];

                            var list = context.ComponentStatus.AsQueryable()
                              .Where (p => p.Id.Equals (node.ParentId))
                              .ToList ()
                            ;

                            // found (just one)
                            if (list.Count.Equals (1)) {
                              var model = list [0];
                              model.Busy = true;
                              
                              context.ComponentStatus.Update (model);
                            }
                          }
                        }

                        else {
                          // remove old first (use ParentId)
                          var nodeList = context.ExtensionNode.AsQueryable()
                            .Where (p => p.ParentId.Equals (id))
                            .ToList ()
                          ;

                          foreach (var node in nodeList) {
                            // status
                            var list = context.ComponentStatus.AsQueryable()
                              .Where (p => p.Id.Equals (node.ChildId))
                              .ToList ()
                            ;

                            // found
                            if (list.Count.Equals (1)) {
                              var model = list [0];
                              model.Busy = false;
                              context.ComponentStatus.Update (model);
                            }

                            // remove Node
                            context.ExtensionNode.Remove (node);
                          }

                          // next insert new
                          foreach (var node in action.CollectionAction.ExtensionNodeCollection) {
                            // validate same parent
                            if (node.ParentId.Equals (id)) {
                              context.ExtensionNode.Add (node);
                            }
                          }

                          context.SaveChanges (); // update

                          // update status
                          nodeList = context.ExtensionNode.AsQueryable()
                            .Where (p => p.ParentId.Equals (id))
                            .ToList ()
                          ;

                          foreach (var node in nodeList) {
                            var list = context.ComponentStatus.AsQueryable()
                              .Where (p => p.Id.Equals (node.ChildId))
                              .ToList ()
                            ;

                            // found
                            if (list.Count.Equals (1)) {
                              var model = list [0];
                              model.Busy = true;
                              context.ComponentStatus.Update (model);
                            }
                          }
                        }
                      }
                      break;

                    case TComponentExtensionNames.Text: {
                        var list = context.ExtensionText.AsQueryable()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          var model = list [0];
                          model.Change (action.ModelAction.ExtensionTextModel);
                          context.ExtensionText.Update (model); // change model
                        }
                      }
                      break;

                    case TComponentExtensionNames.Content: {
                        var list = context.ExtensionContent.AsQueryable()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          var model = list [0];
                          model.Change (action.ModelAction.ExtensionContentModel);
                          context.ExtensionContent.Update (model); // change model
                        }
                      }
                      break;
                  }
                }
              }

              context.SaveChanges (); // update

              action.Result = TValidationResult.Success;
            }
          }
        }

        catch (Exception exception) {
          Models.Infrastructure.THelper.FormatException ("Change - Full", exception, action);
        }
      }
    }
Example #6
0
    void Insert (TModelContext context, TEntityAction action)
    {
      /*
       DATA IN:
       - action.Operation.CategoryType.Category
       - action.CollectionAction.CategoryRelationCollection
       - action.ModelAction 
       - action.CollectionAction.ExtensionNodeCollection
       */

      try {
        // Validate Name
        if (ValidateString (action)) {
          //Id
          var id = Guid.NewGuid ();
          var categoryValue = TCategoryType.ToValue (action.Operation.CategoryType.Category);

          // Descriptor
          action.ModelAction.ComponentDescriptorModel.Id = id;
          action.ModelAction.ComponentDescriptorModel.Category = categoryValue;

          var compDescriptor = ComponentDescriptor.CreateDefault;
          compDescriptor.CopyFrom (action.ModelAction.ComponentDescriptorModel);

          context.ComponentDescriptor.Add (compDescriptor);

          // Info
          action.ModelAction.ComponentInfoModel.Id = id;

          var compInfo = ComponentInfo.CreateDefault;
          compInfo.CopyFrom (action.ModelAction.ComponentInfoModel);

          context.ComponentInfo.Add (compInfo);

          // Status
          action.ModelAction.ComponentStatusModel.Id = id;

          var compStatus = ComponentStatus.CreateDefault;
          compStatus.CopyFrom (action.ModelAction.ComponentStatusModel);

          context.ComponentStatus.Add (compStatus);

          // status collection
          foreach (var item in action.CollectionAction.ComponentStatusCollection) {
            var list = context.ComponentStatus.AsQueryable()
              .Where (p => p.Id.Equals (item.Id))
              .ToList ()
            ;

            // already exist (update)
            if (list.Count.Equals (1)) {
              var model = list [0];
              model.Change (item);

              context.ComponentStatus.Update (model);
            }

            // new (add)
            else {
              context.ComponentStatus.Add (item);
            }
          }

          // Component Relation Collection
          foreach (var item in action.CollectionAction.ComponentRelationCollection) {
            // change child status busy to true
            var childList = context.ComponentStatus.AsQueryable()
              .Where (p => p.Id.Equals (item.ChildId))
              .ToList ()
            ;

            // found
            if (childList.Count.Equals (1)) {
              var child = childList [0];
              child.Busy = true;

              context.ComponentStatus.Update (child); // update
            }

            item.ParentId = id;
            context.ComponentRelation.Add (item); // insert new
          }

          // extensions

          // Extension (CategoryRelationCollection)
          var categoryRelationList = action.CollectionAction.CategoryRelationCollection
            .Where (p => p.Category.Equals (categoryValue))
            .ToList ()
          ;

          // found
          if (categoryRelationList.Count.Equals (1)) {
            var categoryRelation = categoryRelationList [0]; // get extension using TComponentExtension

            var extension = TComponentExtension.Create (categoryRelation.Extension);
            extension.Request ();

            foreach (var extensionName in extension.ExtensionList) {
              switch (extensionName) {
                case TComponentExtensionNames.Document: {
                    //action.ModelAction.ExtensionDocumentModel.Id = id;

                    //var extDocument = ExtensionDocument.CreateDefault;
                    //extDocument.CopyFrom (action.ModelAction.ExtensionDocumentModel);

                    //context.ExtensionDocument.Add (extDocument);
                  }
                  break;

                case TComponentExtensionNames.Geometry: {
                    action.ModelAction.ExtensionGeometryModel.Id = id;

                    var extGeometry = ExtensionGeometry.CreateDefault;
                    extGeometry.CopyFrom (action.ModelAction.ExtensionGeometryModel);

                    context.ExtensionGeometry.Add (extGeometry);
                  }
                  break;

                case TComponentExtensionNames.Image: {
                    action.ModelAction.ExtensionImageModel.Id = id;

                    var extImage = ExtensionImage.CreateDefault;
                    extImage.CopyFrom (action.ModelAction.ExtensionImageModel);

                    context.ExtensionImage.Add (extImage);
                  }
                  break;

                case TComponentExtensionNames.Layout: {
                    action.ModelAction.ExtensionLayoutModel.Id = id;

                    var extLayout = ExtensionLayout.CreateDefault;
                    extLayout.CopyFrom (action.ModelAction.ExtensionLayoutModel);

                    context.ExtensionLayout.Add (extLayout);
                  }
                  break;

                case TComponentExtensionNames.Node: {
                    // Node reverse
                    if (compStatus.NodeReverse) {
                      // use Node from ModelAction (only)
                      if (compStatus.UseNodeModel) {
                        action.ModelAction.ExtensionNodeModel.ChildId = id; // update
                        context.ExtensionNode.Add (action.ModelAction.ExtensionNodeModel);

                        // update status
                        var parentId = action.ModelAction.ExtensionNodeModel.ParentId;

                        var statusList = context.ComponentStatus.AsQueryable()
                          .Where (p => p.Id.Equals (parentId))
                          .ToList ()
                        ;

                        // found
                        if (statusList.Count.Equals (1)) {
                          var model = statusList [0];
                          model.Busy = true;

                          context.ComponentStatus.Update (model);
                        }

                        context.SaveChanges (); // update all
                      }
                    }

                    else {
                      // use Node from ModelAction 
                      if (compStatus.UseNodeModel) {
                        action.ModelAction.ExtensionNodeModel.ParentId = id; // update
                        context.ExtensionNode.Add (action.ModelAction.ExtensionNodeModel);
                      }

                      // Use Node Collection
                      if (compStatus.UseNodeCollection) {
                        foreach (var nodeModel in action.CollectionAction.ExtensionNodeCollection) {
                          nodeModel.ParentId = id; // for sure
                          context.ExtensionNode.Add (nodeModel);
                        }
                      }

                      context.SaveChanges (); // update all

                      // update status
                      var nodeList = context.ExtensionNode.AsQueryable()
                        .Where (p => p.ParentId.Equals (id))
                        .ToList ()
                      ;

                      foreach (var node in nodeList) {
                        var statusList = context.ComponentStatus.AsQueryable()
                          .Where (p => p.Id.Equals (node.ChildId))
                          .ToList ()
                        ;

                        // found
                        if (statusList.Count.Equals (1)) {
                          var model = statusList [0];
                          model.Busy = true;

                          context.ComponentStatus.Update (model);
                        }
                      }

                      context.SaveChanges (); // update all
                    }
                  }
                  break;

                case TComponentExtensionNames.Text: {
                    action.ModelAction.ExtensionTextModel.Id = id;

                    var extText = ExtensionText.CreateDefault;
                    extText.CopyFrom (action.ModelAction.ExtensionTextModel);

                    context.ExtensionText.Add (extText);
                  }
                  break;

                case TComponentExtensionNames.Content: {
                    action.ModelAction.ExtensionContentModel.Id = id;

                    var extContent = ExtensionContent.CreateDefault;
                    extContent.CopyFrom (action.ModelAction.ExtensionContentModel);

                    context.ExtensionContent.Add (extContent);
                  }
                  break;
              }
            }
          }

          context.SaveChanges ();

          action.Result = TValidationResult.Success;
        }
      }

      catch (Exception exception) {
        Server.Models.Infrastructure.THelper.FormatException ("Insert", exception, action);
      }
    }
Example #7
0
    void Remove (TModelContext context, TEntityAction action)
    {
      /*
      DATA IN
      - action.Id (Component Id to remove)
      */

      var id = action.Id;

      try {
        //Id must exist
        if (id.IsEmpty ()) {
          action.Result = new TValidationResult ($"[{action.Operation.CategoryType.Category} - Remove] Component Id can NOT be NULL or EMPTY!");
        }

        else {
          // search Id
          var descriptors = context.ComponentDescriptor.AsQueryable()
            .Where (p => p.Id.Equals (id))
            .ToList ()
          ;

          // Descriptor found
          if (descriptors.Count.Equals (1)) {
            var descriptor = descriptors [0];
            var categoryValue = descriptor.Category;

            // remove from Info model
            var infoList = context.ComponentInfo.AsQueryable()
              .Where (p => p.Id.Equals (id))
              .ToList ()
            ;

            // Info found
            if (infoList.Count.Equals (1)) {
              var info = infoList [0];
              context.ComponentInfo.Remove (info);// remove from Info model

              // remove from Status model
              var statusList = context.ComponentStatus.AsQueryable()
                .Where (p => p.Id.Equals (id))
                .ToList ()
              ;

              var compStatus = ComponentStatus.CreateDefault;

              // Status found
              if (statusList.Count.Equals (1)) {
                var statusModel = statusList [0];
                context.ComponentStatus.Remove (statusModel);  // remove from Status model

                compStatus.CopyFrom (statusModel);
              }

              // status collection
              foreach (var item in action.CollectionAction.ComponentStatusCollection) {
                var list = context.ComponentStatus.AsQueryable()
                  .Where (p => p.Id.Equals (item.Id))
                  .ToList ()
                ;

                // Status found
                if (list.Count.Equals (1)) {
                  var statusModel = list [0];
                  context.ComponentStatus.Remove (statusModel);  // remove from Status model
                }
              }

              // extensions

              // remove extensions
              var categoryRelationList = action.CollectionAction.CategoryRelationCollection
                .Where (p => p.Category.Equals (categoryValue))
                .ToList ()
              ;

              // found
              if (categoryRelationList.Count.Equals (1)) {
                var categoryRelation = categoryRelationList [0]; // get extension using TComponentExtension

                var extension = TComponentExtension.Create (categoryRelation.Extension);
                extension.Request ();

                foreach (var extensionName in extension.ExtensionList) {
                  switch (extensionName) {
                    case TComponentExtensionNames.Document: {
                        //var list = context.ExtensionDocument
                        //  .Where (p => p.Id.Equals (id))
                        //  .ToList ()
                        //;

                        //if (list.Count.Equals (1)) {
                        //  context.ExtensionDocument.Remove (list [0]);
                        //}
                      }
                      break;

                    case TComponentExtensionNames.Geometry: {
                        var list = context.ExtensionGeometry.AsQueryable()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          context.ExtensionGeometry.Remove (list [0]);
                        }
                      }
                      break;

                    case TComponentExtensionNames.Image: {
                        var list = context.ExtensionImage.AsQueryable()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          context.ExtensionImage.Remove (list [0]);
                        }
                      }
                      break;

                    case TComponentExtensionNames.Layout: {
                        var list = context.ExtensionLayout.AsQueryable()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          context.ExtensionLayout.Remove (list [0]);
                        }
                      }
                      break;

                    case TComponentExtensionNames.Node: {
                        // Node reverse
                        if (compStatus.NodeReverse) {
                          // request for ChildId
                          var nodeList = context.ExtensionNode.AsQueryable()
                            .Where (p => p.ChildId.Equals (id))
                            .ToList ()
                          ;

                          // just one
                          if (nodeList.Count.Equals (1)) {
                            var node = nodeList [0];

                            // status
                            var list = context.ComponentStatus.AsQueryable()
                              .Where (p => p.Id.Equals (node.ParentId))
                              .ToList ()
                            ;

                            // found (just me)
                            if (list.Count.Equals (1)) {
                              var model = list [0];
                              model.Busy = false;
                              context.ComponentStatus.Update (model);
                            }

                            // remove
                            context.ExtensionNode.Remove (node);
                          }
                        }

                        else {
                          // request for ParentId
                          var nodeList = context.ExtensionNode.AsQueryable()
                            .Where (p => p.ParentId.Equals (id))
                            .ToList ()
                          ;

                          foreach (var node in nodeList) {
                            // status
                            var list = context.ComponentStatus.AsQueryable()
                              .Where (p => p.Id.Equals (node.ChildId))
                              .ToList ()
                            ;

                            // found
                            if (list.Count.Equals (1)) {
                              var model = list [0];
                              model.Busy = false;
                              context.ComponentStatus.Update (model);
                            }

                            // remove
                            context.ExtensionNode.Remove (node);
                          }
                        }
                      }
                      break;

                    case TComponentExtensionNames.Text: {
                        var list = context.ExtensionText.AsQueryable()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          context.ExtensionText.Remove (list [0]);
                        }
                      }
                      break;

                    case TComponentExtensionNames.Content: {
                        var list = context.ExtensionContent.AsQueryable()
                          .Where (p => p.Id.Equals (id))
                          .ToList ()
                        ;

                        if (list.Count.Equals (1)) {
                          context.ExtensionContent.Remove (list [0]);
                        }
                      }
                      break;
                  }
                }
              }

              // remove from Descriptor model
              context.ComponentDescriptor.Remove (descriptor);

              context.SaveChanges (); // update

              action.Result = TValidationResult.Success;
            }
          }
        }
      }

      catch (Exception exception) {
        Server.Models.Infrastructure.THelper.FormatException ("Remove", exception, action);
      }
    }