Search code examples
arraysfunctionadditionbeanshell

What's an elegant solution in beanshell for loops and arrays


I'm working with beanshell to parse SWIFT data and need to extract values by referencing these SWIFT tags. Right now, I statically get these values as such:

String getACRU = swiftMessage.getTagData("19A",":ACRU//");
String getANTO = swiftMessage.getTagData("19A",":ANTO//");
String getCHAR = swiftMessage.getTagData("19A",":CHAR//");
String getCOUN = swiftMessage.getTagData("19A",":COUN//");
String getEXEC = swiftMessage.getTagData("19A",":EXEC//");
String getISDI = swiftMessage.getTagData("19A",":ISDI//");
String getLADT = swiftMessage.getTagData("19A",":LADT//");
String getLEVY = swiftMessage.getTagData("19A",":LEVY//");
String getLOCL = swiftMessage.getTagData("19A",":LOCL//");
String getLOCO = swiftMessage.getTagData("19A",":LOCO//");
String getMARG = swiftMessage.getTagData("19A",":MARG//");
String getOTHR = swiftMessage.getTagData("19A",":OTHR//");
String getPOST = swiftMessage.getTagData("19A",":POST//");
String getREGF = swiftMessage.getTagData("19A",":REGF//");
String getSHIP = swiftMessage.getTagData("19A",":SHIP//");
String getSPCN = swiftMessage.getTagData("19A",":SPCN//");
String getSTAM = swiftMessage.getTagData("19A",":STAM//");
String getSTEX = swiftMessage.getTagData("19A",":STEX//");
String getTRAN = swiftMessage.getTagData("19A",":TRAN//");
String getTRAX = swiftMessage.getTagData("19A",":TRAX//");
String getVATA = swiftMessage.getTagData("19A",":VATA//");
String getWITH = swiftMessage.getTagData("19A",":WITH//");
String getCOAX = swiftMessage.getTagData("19A",":COAX//");
String getACCA = swiftMessage.getTagData("19A",":ACCA//");

My question is two-fold: what's the best way to elegantly rewrite this and what is the best way in beanshell to add a method/function that would remove the first three characters, change the comma to a period and once all those values have been parsed out of the message, to add them all up?


Solution

  • It seems that this worked quite well. Store all the values I need in an array:

    String [] tagArray = new String [] { ":ACRU//",":ANTO//",":CHAR//",":COUN//",":EXEC//",":ISDI//",":LADT//",":LEVY//",":LOCL//",":LOCO//",":MARG//",":OTHR//",":POST//",":REGF//",":SHIP//",":SPCN//",":STAM//",":STEX//",":TRAN//",":TRAX//",":VATA//",":WITH//",":COAX//",":ACCA//" };
    

    And create a function to loop and add:

    double sumTags(SwiftMessage inboundSwiftmessage, String inboundTagNumber, String [] inboundTagArray){
      double getTotal;
      for( tagArrayData : inboundTagArray ){
        String getData = stripData(inboundSwiftmessage.getTagData(inboundTagNumber,tagArrayData));
        getTotal = getTotal + Double.parseDouble(getData);
      }
      return getTotal;
    }
    

    And this is the function to remove the first 3 characters and convert, then remove, the comma into a period:

    String stripData(String inboundString){
      if (inboundString==null){
        return "0";
      }
      else
      {
        char strippedString;
        StringBuffer strippedBuffer = new StringBuffer("");
        char [] inboundArray = inboundString.toCharArray();
        for (int counter = 3 ; counter < inboundArray.length; counter++)
        {
          strippedString = inboundArray[counter];
          strippedBuffer.append(strippedString);
        }
        return strippedBuffer.toString().replace(",",".");
      }
    }