/// <summary> /// Processes the <paramref name="parameters"/> and turn them into <paramref name="query"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="parameters">The parameters which to process.</param> /// <param name="query">The <see cref="Query"/> in which to set the parameters.</param> protected override void DoProcess(IMansionContext context, IPropertyBag parameters, Query query) { // check for search string where; if (parameters.TryGetAndRemove(context, "sqlWhere", out where) && !string.IsNullOrEmpty(where)) query.Add(new SqlWhereSpecification(where)); }
/// <summary> /// Copies an existing node in this repository to a new node. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="pointer">The pointer to the node which will be copied.</param> /// <param name="targetParentPointer">The pointer to the parent to which the copied node is added.</param> /// <returns>Returns the copied node.</returns> protected override Node DoCopyNode(IMansionContext context, NodePointer pointer, NodePointer targetParentPointer) { // create a query to retrieve the new node var selectQuery = new Query(); // build the query using (var connection = CreateConnection()) using (var transaction = connection.BeginTransaction()) { // retrieve the nodes // TODO: retrieve the nodes within the same transaction var nodeToCopy = RetrieveSingleNode(context, new Query().Add(new IsPropertyEqualSpecification("id", pointer.Id))); if (nodeToCopy == null) throw new ArgumentNullException(string.Format("Could not find node with pointer '{0}'", pointer)); var targetParentNode = RetrieveSingleNode(context, new Query().Add(new IsPropertyEqualSpecification("id", targetParentPointer.Id))); if (targetParentNode == null) throw new ArgumentNullException(string.Format("Could not find node with pointer '{0}'", targetParentPointer)); // create the copy query using (var command = context.Nucleus.CreateInstance<CopyNodeCommand>()) { // init the command command.Prepare(context, connection, transaction, nodeToCopy, targetParentNode); // execute the command try { // execute the query var copiedNodeId = command.Execute(); selectQuery.Add(new IsPropertyEqualSpecification("id", copiedNodeId)); // woohoo it worked! transaction.Commit(); } catch (Exception) { // something terrible happened, revert everything transaction.Rollback(); throw; } } } // return the created node return RetrieveSingleNode(context, selectQuery); }