コード例 #1
0
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Não foi especificado um item para editar", TempData, ModelState);
                return(RedirectToAction("index"));
            }

            try
            {
                NodeLabel nodeLabel = await db.NodeLabels.FindAsync(id);

                if (nodeLabel == null)
                {
                    MensagemParaUsuarioViewModel.MensagemErro("O item não foi encontrado", TempData, ModelState);
                    return(RedirectToAction("index"));
                }
                return(View(nodeLabel));
            }
            catch (Exception err)
            {
                MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
                return(RedirectToAction("index"));
            }
        }
コード例 #2
0
        public async Task <ActionResult> Edit([Bind(Include = "Id,Nome,HorasEstimadas, IdNodeLabel")] ProjectNodeViewModel projectNodeVm)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var existente = db.ProjectNodes.Any(x => (x.Pai_Id ?? 0) == (projectNodeVm.IdPai ?? 0) && x.Nome == projectNodeVm.Nome);
                    if (existente)
                    {
                        MensagemParaUsuarioViewModel.MensagemErro("Já existe um item com esse mesmo nome debaixo deste nó de projeto. \r\n  Itens de projetos com nomes repetidos podem existir dentro de nós de projeto diferentes, mas não debaixo do mesmo nó.", TempData, ModelState);
                        CarregaNodeLabels();
                        return(View(projectNodeVm));
                    }
                }
                catch (Exception err)
                {
                    MensagemParaUsuarioViewModel.MensagemErro("Não foi possível pesquisar no banco de dados por este item.\r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState);
                    CarregaNodeLabels();
                    return(View(projectNodeVm));
                }

                try
                {
                    ProjectNode pn = db.ProjectNodes.Find(projectNodeVm.Id);
                    NodeLabel   nl = db.NodeLabels.Find(projectNodeVm.IdNodeLabel);

                    int?idpai = pn.Pai != null?pn.Pai.Id:new Nullable <int>();

                    pn.Nome           = projectNodeVm.Nome;
                    pn.HorasEstimadas = projectNodeVm.HorasEstimadas;
                    pn.NodeLabel      = nl;

                    await db.SaveChangesAsync();

                    return(RedirectToAction("Index", new { Id = idpai }));
                }
                catch (DbUpdateConcurrencyException duce)
                {
                    MensagemParaUsuarioViewModel.MensagemErro(" Talvez esse registro tenha sido excluído por outra pessoa. \r\n " + LogServices.ConcatenaExceptions(duce), TempData, ModelState);
                }
                catch (Exception err)
                {
                    MensagemParaUsuarioViewModel.MensagemErro("Esse registro não pôde ser salvo. \r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState);
                }
            }

            CarregaNodeLabels();
            return(View(projectNodeVm));
        }
コード例 #3
0
 /*
  * Following methods are used for setting if a node is up and running, and it
  * will update running nodes resource
  */
 public virtual void ActivateNode(NodeId nodeId, Resource resource)
 {
     try
     {
         writeLock.Lock();
         // save if we have a node before
         IDictionary <string, CommonNodeLabelsManager.Host> before = CloneNodeMap(ImmutableSet
                                                                                  .Of(nodeId));
         CreateHostIfNonExisted(nodeId.GetHost());
         try
         {
             CreateNodeIfNonExisted(nodeId);
         }
         catch (IOException)
         {
             Log.Error("This shouldn't happen, cannot get host in nodeCollection" + " associated to the node being activated"
                       );
             return;
         }
         CommonNodeLabelsManager.Node nm = GetNMInNodeSet(nodeId);
         nm.resource = resource;
         nm.running  = true;
         // Add node in labelsCollection
         ICollection <string> labelsForNode = GetLabelsByNode(nodeId);
         if (labelsForNode != null)
         {
             foreach (string label in labelsForNode)
             {
                 NodeLabel labelInfo = labelCollections[label];
                 if (labelInfo != null)
                 {
                     labelInfo.AddNodeId(nodeId);
                 }
             }
         }
         // get the node after edition
         IDictionary <string, CommonNodeLabelsManager.Host> after = CloneNodeMap(ImmutableSet
                                                                                 .Of(nodeId));
         UpdateResourceMappings(before, after);
     }
     finally
     {
         writeLock.Unlock();
     }
 }
コード例 #4
0
 public virtual IList <NodeLabel> PullRMNodeLabelsInfo()
 {
     try
     {
         readLock.Lock();
         IList <NodeLabel> infos = new AList <NodeLabel>();
         foreach (KeyValuePair <string, NodeLabel> entry in labelCollections)
         {
             NodeLabel label = entry.Value;
             infos.AddItem(label.GetCopy());
         }
         infos.Sort();
         return(infos);
     }
     finally
     {
         readLock.Unlock();
     }
 }
コード例 #5
0
        public async Task <ActionResult> Edit([Bind(Include = "Id,Nome")] NodeLabel nodeLabel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    db.Entry(nodeLabel).State = EntityState.Modified;
                    await db.SaveChangesAsync();

                    return(RedirectToAction("Index"));
                }
                catch (DbUpdateConcurrencyException duce)
                {
                    MensagemParaUsuarioViewModel.MensagemErro(" Talvez esse registro tenha sido excluído por outra pessoa. " + duce.Message, TempData, ModelState);
                }
                catch (Exception err)
                {
                    MensagemParaUsuarioViewModel.MensagemErro("Esse registro não pôde ser salvo. " + err.Message, TempData, ModelState);
                }
            }
            return(View(nodeLabel));
        }
コード例 #6
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            NodeLabel nodeLabel = new NodeLabel {
                Id = id
            };

            var count = (from p in db.ProjectNodes
                         where p.NodeLabel.Id == nodeLabel.Id
                         select p).Count();

            if (count > 0)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Esse rótulo não pode ser excluído porque está associado a projetos.", TempData, ModelState);
                return(View(nodeLabel));
            }

            try
            {
                db.Entry(nodeLabel).State = EntityState.Deleted;

                await db.SaveChangesAsync();

                MensagemParaUsuarioViewModel.MensagemSucesso("Registro Excluido.", TempData);
                return(RedirectToAction("Index"));
            }
            catch (DbUpdateConcurrencyException duce)
            {
                MensagemParaUsuarioViewModel.MensagemErro(" Talvez esse registro tenha sido excluído por outra pessoa. " + duce.Message, TempData, ModelState);
            }
            catch (Exception err)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Esse registro não pôde ser excluído. " + err.Message, TempData, ModelState);
            }

            return(View(nodeLabel));
        }
コード例 #7
0
        public async Task <JsonResult> Salvar([Bind(Include = "Id, Nome, Descricao, HorasEstimadas, IdPai, IdNodeLabel, NomeNodeLabel")] ProjectNodeViewModel projectNodeVm)
        {
            MensagemParaUsuarioViewModel result = new MensagemParaUsuarioViewModel();

            if (ModelState.IsValid)
            {
                try
                {
                    var existente = db.ProjectNodes.Any(x => (x.Pai_Id ?? 0) == projectNodeVm.IdPai && x.Nome == projectNodeVm.Nome && x.Id != projectNodeVm.Id);
                    if (existente)
                    {
                        result.Titulo   = "Nome Duplicado.";
                        result.Mensagem = "Já existe um item com esse mesmo nome debaixo deste nó de projeto. \r\n  Itens de projetos com nomes repetidos podem existir dentro de nós de projeto diferentes, mas não debaixo do mesmo nó.";
                        result.Sucesso  = false;

                        return(Json(result));
                    }
                }
                catch (Exception err)
                {
                    result.Titulo   = "Erro.";
                    result.Mensagem = "Não foi possível pesquisar no banco de dados por este item.\r\n " + LogServices.ConcatenaExceptions(err);;
                    result.Sucesso  = false;

                    return(Json(result));
                }

                ProjectNode pn = new ProjectNode();

                if (projectNodeVm.Id > 0)
                {
                    pn = db.ProjectNodes.Find(projectNodeVm.Id) ?? new ProjectNode();
                }
                else
                {
                    //só procura o pai para novos
                    if ((projectNodeVm.IdPai ?? 0) > 0)
                    {
                        ProjectNode pai = db.ProjectNodes.Where(x => x.Id == projectNodeVm.IdPai).FirstOrDefault();
                        if (pai != null)
                        {
                            pn.Pai = pai;
                        }
                    }

                    db.ProjectNodes.Add(pn);
                }

                pn.HorasEstimadas = projectNodeVm.HorasEstimadas;
                pn.Nome           = projectNodeVm.Nome;
                pn.Descricao      = projectNodeVm.Descricao;

                if ((projectNodeVm.IdNodeLabel ?? 0) > 0)
                {
                    NodeLabel nl = db.NodeLabels.Find(projectNodeVm.IdNodeLabel);
                    if (nl != null)
                    {
                        pn.NodeLabel = nl;

                        projectNodeVm.NomeNodeLabel = nl.Nome;
                    }
                }

                try
                {
                    await db.SaveChangesAsync();

                    result.Titulo   = "Salvar nó de projeto.";
                    result.Mensagem = "Salvo com sucesso!";

                    //atualiza o projectNodeVm para os dados voltarem para o node da treeview
                    projectNodeVm.Id    = pn.Id;
                    projectNodeVm.IdPai = pn.Pai != null ? pn.Pai.Id : new Nullable <int>();

                    result.Objeto  = projectNodeVm;
                    result.Sucesso = true;
                }
                catch (DbUpdateConcurrencyException duce)
                {
                    result.Titulo   = "Erro de concorrência ao salvar.";
                    result.Mensagem = "Talvez esse registro tenha sido excluído por outra pessoa. \r\n " + LogServices.ConcatenaExceptions(duce);
                    result.Sucesso  = false;
                }
                catch (Exception err)
                {
                    result.Titulo   = "Erro ao salvar.";
                    result.Mensagem = "Esse registro não pôde ser salvo.\r\n " + LogServices.ConcatenaExceptions(err);;
                    result.Sucesso  = false;
                }
            }
            else
            {
                result.Titulo   = "Estado inválido";
                result.Mensagem = "Favor corrigir erros de preenchimento do formulário";
                result.Sucesso  = false;
            }

            return(Json(result));
        }
コード例 #8
0
        private void UpdateResourceMappings(IDictionary <string, CommonNodeLabelsManager.Host
                                                         > before, IDictionary <string, CommonNodeLabelsManager.Host> after)
        {
            // Get NMs in before only
            ICollection <NodeId> allNMs = new HashSet <NodeId>();

            foreach (KeyValuePair <string, CommonNodeLabelsManager.Host> entry in before)
            {
                Sharpen.Collections.AddAll(allNMs, entry.Value.nms.Keys);
            }
            foreach (KeyValuePair <string, CommonNodeLabelsManager.Host> entry_1 in after)
            {
                Sharpen.Collections.AddAll(allNMs, entry_1.Value.nms.Keys);
            }
            // Map used to notify RM
            IDictionary <NodeId, ICollection <string> > newNodeToLabelsMap = new Dictionary <NodeId
                                                                                             , ICollection <string> >();

            // traverse all nms
            foreach (NodeId nodeId in allNMs)
            {
                CommonNodeLabelsManager.Node oldNM;
                if ((oldNM = GetNMInNodeSet(nodeId, before, true)) != null)
                {
                    ICollection <string> oldLabels = GetLabelsByNode(nodeId, before);
                    // no label in the past
                    if (oldLabels.IsEmpty())
                    {
                        // update labels
                        NodeLabel label = labelCollections[NoLabel];
                        label.RemoveNode(oldNM.resource);
                        // update queues, all queue can access this node
                        foreach (RMNodeLabelsManager.Queue q in queueCollections.Values)
                        {
                            Resources.SubtractFrom(q.resource, oldNM.resource);
                        }
                    }
                    else
                    {
                        // update labels
                        foreach (string labelName in oldLabels)
                        {
                            NodeLabel label = labelCollections[labelName];
                            if (null == label)
                            {
                                continue;
                            }
                            label.RemoveNode(oldNM.resource);
                        }
                        // update queues, only queue can access this node will be subtract
                        foreach (RMNodeLabelsManager.Queue q in queueCollections.Values)
                        {
                            if (IsNodeUsableByQueue(oldLabels, q))
                            {
                                Resources.SubtractFrom(q.resource, oldNM.resource);
                            }
                        }
                    }
                }
                CommonNodeLabelsManager.Node newNM;
                if ((newNM = GetNMInNodeSet(nodeId, after, true)) != null)
                {
                    ICollection <string> newLabels = GetLabelsByNode(nodeId, after);
                    newNodeToLabelsMap[nodeId] = ImmutableSet.CopyOf(newLabels);
                    // no label in the past
                    if (newLabels.IsEmpty())
                    {
                        // update labels
                        NodeLabel label = labelCollections[NoLabel];
                        label.AddNode(newNM.resource);
                        // update queues, all queue can access this node
                        foreach (RMNodeLabelsManager.Queue q in queueCollections.Values)
                        {
                            Resources.AddTo(q.resource, newNM.resource);
                        }
                    }
                    else
                    {
                        // update labels
                        foreach (string labelName in newLabels)
                        {
                            NodeLabel label = labelCollections[labelName];
                            label.AddNode(newNM.resource);
                        }
                        // update queues, only queue can access this node will be subtract
                        foreach (RMNodeLabelsManager.Queue q in queueCollections.Values)
                        {
                            if (IsNodeUsableByQueue(newLabels, q))
                            {
                                Resources.AddTo(q.resource, newNM.resource);
                            }
                        }
                    }
                }
            }
            // Notify RM
            if (rmContext != null && rmContext.GetDispatcher() != null)
            {
                rmContext.GetDispatcher().GetEventHandler().Handle(new NodeLabelsUpdateSchedulerEvent
                                                                       (newNodeToLabelsMap));
            }
        }
コード例 #9
0
 internal Edge(EdgeLabel label, NodeLabel target)
 {
     Label       = label;
     TargetLabel = target;
 }
コード例 #10
0
 internal Node(NodeLabel label, IEnumerable <Edge> edges = null)
 {
     Label = label;
     Edges = (edges ?? new List <Edge>()).ToList();
 }
コード例 #11
0
        public void UndoLast()
        {
            if (undoactions.Count >= 1)
            {
                MindNodeAction action = undoactions.Last();
                undoactions.Remove(action);
                switch (action.name)
                {
                case "CreateNode":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNode createdNode = action.involvedNodes.Pop();
                        redoactions.Add(new MindNodeAction(1, "DeleteNode", createdNode));
                        createdNode.DeleteNode();
                    }
                    break;

                case "DeleteNode":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNode deletednode = action.involvedNodes.Pop();
                        redoactions.Add(new MindNodeAction(0, "CreateNode", deletednode));
                        if (deletednode.parent != null)
                        {
                            deletednode.parent.AddChildNoStyle(deletednode, false);
                        }
                        // Refresh Pivot Representation after reinstating node
                        deletednode.UpdatePivots();
                    }
                    break;

                case "MoveNodes":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNodeAction newaction = new MindNodeAction(2, "MoveNodes");
                        foreach (MindNode movedNode in action.involvedNodes)
                        {
                            newaction.involvedNodes.Push(movedNode);
                            newaction.startpoint.Push(new CalcPoint(movedNode.xpos, movedNode.ypos));

                            if (action.startpoint.Count > 0)
                            {
                                CalcPoint oldPos = action.startpoint.Pop();

                                movedNode.SetPosition(oldPos.X, oldPos.Y, false);
                            }
                            // Refresh Pivot Representation after moving node
                            movedNode.UpdatePivots();
                        }
                        redoactions.Add(newaction);
                    }
                    break;

                case "ConnectNodes":
                    if (action.involvedNodes.Count >= 2)
                    {
                        MindNodeAction newAction = new MindNodeAction(3, "DeleteConnections");
                        for (int i = 0; i < action.involvedNodes.Count / 2; i++)
                        {
                            MindNode rightnode = action.involvedNodes.Pop();
                            MindNode leftnode  = action.involvedNodes.Pop();

                            newAction.involvedNodes.Push(leftnode);
                            newAction.involvedNodes.Push(rightnode);

                            leftnode.DeleteConnection(rightnode);
                        }
                        redoactions.Add(newAction);
                    }
                    break;

                case "DeleteConnections":
                    if (action.involvedNodes.Count >= 2)
                    {
                        MindNodeAction newAction = new MindNodeAction(3, "ConnectNodes");
                        for (int i = 0; i < action.involvedNodes.Count / 2; i++)
                        {
                            MindNode rightnode = action.involvedNodes.Pop();
                            MindNode leftnode  = action.involvedNodes.Pop();

                            MindNode rightExistingNode = GlobalNodeHandler.masterNode.GetExistingNode(rightnode.id);
                            MindNode leftExistingNode  = GlobalNodeHandler.masterNode.GetExistingNode(rightnode.id);

                            newAction.involvedNodes.Push(leftnode);
                            newAction.involvedNodes.Push(rightnode);

                            //leftnode.AddConnection(rightnode);

                            // Refresh Pivot Representation after reinstating connection
                            //leftnode.UpdatePivots();
                        }

                        redoactions.Add(newAction);
                    }
                    break;

                case "ChangeText":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNodeAction newaction = new MindNodeAction(4, "ChangeText");

                        MindNode changedNode = action.involvedNodes.Pop();
                        newaction.text = changedNode.text;
                        newaction.involvedNodes.Push(changedNode);

                        changedNode.SetText(action.text);

                        redoactions.Add(newaction);
                    }
                    else if (action.involvedLabel != null)
                    {
                        MindNodeAction newaction = new MindNodeAction(4, "ChangeText");

                        NodeLabel changedLabel = action.involvedLabel;
                        newaction.text          = changedLabel.GetText();
                        newaction.involvedLabel = changedLabel;

                        changedLabel.SetText(action.text);

                        redoactions.Add(newaction);
                    }
                    break;

                case "Transform":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNodeAction newaction = new MindNodeAction(5, "Transform");

                        MindNode changedNode = action.involvedNodes.Pop();
                        newaction.sourceSize.X = changedNode.width;
                        newaction.sourceSize.Y = changedNode.height;
                        newaction.startpoint.Push(new CalcPoint(changedNode.xpos, changedNode.ypos));
                        newaction.involvedNodes.Push(changedNode);

                        if (action.sourceSize.X != -1)
                        {
                            changedNode.width = action.sourceSize.X;
                            changedNode.SetScaled(false);
                        }
                        if (action.sourceSize.Y != -1)
                        {
                            changedNode.height = action.sourceSize.Y;
                            changedNode.SetScaled(false);
                        }

                        CalcPoint oldPos = action.startpoint.Pop();
                        if (oldPos != null)
                        {
                            changedNode.SetPosition(oldPos.X, oldPos.Y, false);
                        }

                        // Refresh Pivot Representation after resetting transformation
                        changedNode.UpdatePivots();
                        changedNode.updateRepresentation();

                        redoactions.Add(newaction);
                    }
                    break;
                }
            }
        }