2013-02-18 2 views
0

Мне нужно вызвать метод с параметрами в рамках другого метода. Вот мой код:Вызов метода с параметрами в другом методе

public void createNodesAndRelationships(List<String[]> all, GraphDatabaseService  graphDb) { 

    Node firstNode = null; 
    Node secondNode = null; 
    Relationship relationship; 



    //register the shutdown msg 
    registerShutdownHook(graphDb); 
    Index<Node> nodeIndex; 
    for (int i = 0; i < all.size(); i++) { 
     Transaction tx = graphDb.beginTx(); 
     long id, id2; 
     try { 
      //convert IPs to long numbers format 
      long ip1 = Long.parseLong(all.get(i)[0]); 
      long ip2 = Long.parseLong(all.get(i)[1]); 

      //check if src higher than dest 
      //if yes reorder src < dest 
      //this is used make relationships from lower IP to higher ones 
      if (ip1 > ip2) { 
       long ip3 = ip1; 
       ip1 = ip2; 
       ip2 = ip3; 
      } 
      //LuceneIndexService finder = new LuceneIndexService(graphDb); 
      //firstNode = finder.getSingleNode("IP", all.get(i)[0]); 
      //firstNode = null; 
      nodeIndex = graphDb.index().forNodes("users"); 

      //get node if exists or create it 
      firstNode = getOrCreateNode(graphDb, "IP", ip1); 
      if (firstNode == null) { 
       firstNode = graphDb.createNode(); 
       firstNode.setProperty("IP", ip1); 
       nodeIndex.add(firstNode, "IP", ip1); 
       Node node = graph.addNode("Ip"); 
       node.setProperty("IP",ip1); 
      } 
      //secondNode = finder.getSingleNode("IP", all.get(i)[1]); 
      //secondNode = null; 
      secondNode = getOrCreateNode(graphDb, "IP", ip2); 
      if (secondNode == null) { 
       secondNode = graphDb.createNode(); 
       secondNode.setProperty("IP", ip2); 
       nodeIndex.add(secondNode, "IP", ip2); 
       Node node2 = graph.addNode("Ip"); 
       node2.setProperty("IP",ip2); 
      } 

      //get relationships of one IP (src) 
      Iterable<Relationship> rels = firstNode.getRelationships(RelTypes.COMMUNICATE); 
      Iterator it = rels.iterator(); 

      //set relationship still not found 
      boolean found = false; 
      while (it.hasNext() && found == false) { 
       Relationship rel = (Relationship) it.next(); 

       //get dest node from relationship 
       Node otherNode = rel.getOtherNode(firstNode); 

       //if dest IP == relationship dest 
       //then update relationship weight 
       if (otherNode == secondNode) { 
        int weight = Integer.parseInt(all.get(i)[2]); 
        int relWeight = Integer.parseInt(rel.getProperty("weight").toString()); 
        int finalWeight = weight + relWeight; 
        rel.setProperty("weight", finalWeight); 
        System.out.println("index: " + i + " srcID: " + firstNode.getId() + " src:" + firstNode.getProperty("IP") + " dest: " + secondNode.getProperty("IP") + " weight: " + rel.getProperty("weight")); 
        Node rell = graph.addEdge("IP","IP",null); 
         rell.setProperty("IP",finalWeight); 
        //relationship found 
        found = true; 
       } 

      } 

      //relationship not found 
      if (found == false) { 

       //create new relationship 
       relationship = firstNode.createRelationshipTo(secondNode, RelTypes.COMMUNICATE); 
       relationship.setProperty("weight", all.get(i)[2]); 
       Node rell = graph.addEdge("weight","IP","IP"); 
        rell.setProperty("IP",RelTypes.COMMUNICATE); 
       System.out.println("index: " + i + " srcID: " + firstNode.getId() + " src:" + firstNode.getProperty("IP") + " dest: " + secondNode.getProperty("IP") + " weight: " + relationship.getProperty("weight")); 
      } 



      tx.success(); 
     } finally { 
      tx.finish(); 
      id = firstNode.getId(); 
      Node testnode = graphDb.getNodeById(id); 
      id2 = secondNode.getId(); 
      Node testnode2 = graphDb.getNodeById(id2); 
      System.out.println(testnode.getId() + " " + testnode2.getId()); 
     } 
    } 
} 

public void run() { 

    contentPane = new JPanel(); 
    contentPane.setBackground(Color.DARK_GRAY); 
    contentPane.setBorder(new EmptyBorder(0,0,0,0)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 
    JPanel panelSettings = new JPanel(); 
    panelSettings.setBorder(new EmptyBorder(0, 8, 0, 8)); 
    // panelSettings.setBackground(SystemColor.activeCaption); 
    panelSettings.setLayout(new FlowLayout()); 
    panelSettings.add(b1); 
    contentPane.add(panelSettings, BorderLayout.WEST); 

    viewer.enableAutoLayout(); 
    view = viewer.addDefaultView(false); 

    contentPane.add(view, BorderLayout.CENTER); 

    setSize(800, 600); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 

Вопрос как может вызвать метод createNodesAndRelationships (...) в методе Run()? Мне нужно использовать Node node = graph.addNode («Ip») и node.setProperty («IP», ip1), чтобы нарисовать график. thank you

+1

Если они определены в одном классе, что не так с 'this.createNodesAndRelationships (...)'? –

+0

его давая мне сообщение об ошибке:/ – user1941212

+0

Не могли бы вы добавить сообщение об ошибке/exception/stacktrace? – Medo42

ответ

0

Переместите это registerShutdownHook(graphDb); в то место, где вы создаете свой EmbeddedGraphDatabase.

, а затем просто вызовите метод с вашим массивом и параметрами db в качестве параметров.

Смежные вопросы