2013-10-04 3 views
0

У меня есть следующие разделы кода:уменьшить дублирование кода цикла над документом XML

Первый метод:

public ArrayList<String> getTestFilesForOrderNumber(Integer testStepOrderNumber, Integer testOrderNumber, 
     String version) 
    { 
    NodeList list = documentTest.getElementsByTagName(XmlElements.TESTSTEPS); 
    ArrayList<String> files = new ArrayList<>(); 
    for (int i = 0; i < list.getLength(); i++) 
    { 
     Element e = (Element) list.item(i); 
     if (e.getAttribute(XmlAttributes.VERSION).equalsIgnoreCase(version)) 
     { 
     list = e.getElementsByTagName(XmlElements.TESTSTEP); 
     for (int l = 0; l < list.getLength(); l++) 
     { 
      e = (Element) list.item(l); 
      if (e.getAttribute(XmlAttributes.ORDER_NUMBER).equals(testStepOrderNumber.toString())) 
      { 
      NodeList testsList = e.getElementsByTagName(XmlElements.TEST); 
      for (int j = 0; j < testsList.getLength(); j++) 
      { 
       Element e2 = (Element) testsList.item(j); 
       if (e2.getAttribute(XmlAttributes.ORDER_NUMBER).equals(testOrderNumber.toString())) 
       { 
       NodeList fileList = e2.getElementsByTagName(XmlElements.FILE); 
       for (int k = 0; k < fileList.getLength(); k++) 
       { 
        Element e3 = (Element) fileList.item(k); 
        if (e3.getParentNode().getNodeName().equals(XmlElements.FILES)) 
        { 
        files.add(e3.getFirstChild().getNodeValue()); 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 

    return files; 
    } 

Второй метод:

public String getTestDescription(String langCode, Integer testStepOrderNumber, Integer testOrderNumber, String version) 
    { 
    NodeList list = documentTest.getElementsByTagName(XmlElements.TESTSTEPS); 
    for (int i = 0; i < list.getLength(); i++) 
    { 
     Element e = (Element) list.item(i); 
     if (e.getAttribute(XmlAttributes.VERSION).equalsIgnoreCase(version)) 
     { 
     list = e.getElementsByTagName(XmlElements.TESTSTEP); 
     for (int l = 0; l < list.getLength(); l++) 
     { 
      e = (Element) list.item(l); 
      if (e.getAttribute(XmlAttributes.ORDER_NUMBER).equals(testStepOrderNumber.toString())) 
      { 
      NodeList testsList = e.getElementsByTagName(XmlElements.TEST); 
      for (int j = 0; j < testsList.getLength(); j++) 
      { 
       Element e2 = (Element) testsList.item(j); 
       if (e2.getAttribute(XmlAttributes.ORDER_NUMBER).equals(testOrderNumber.toString())) 
       { 
       NodeList testList = e2.getElementsByTagName(langCode.toUpperCase()); 
       for (int k = 0; k < testList.getLength(); k++) 
       { 
        Element e3 = (Element) testList.item(k); 
        if (e3.getParentNode().getNodeName().equals(XmlElements.DESCRIPTION)) 
        { 
        return testList.item(k).getFirstChild().getNodeValue(); 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 

    return "ERROR_NO_TEST_DESC"; 
    } 

Теперь, как вы можете видеть, первый for-loops точно такие же, но параметры возвращаемого метода и параметры метода отсутствуют. Теперь я не знаю, как уменьшить этот дублированный код.

Заранее спасибо.

ответ

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