/**
  * Gets the group params.
  *
  * <p>We need to specifically make sure that each group parameter has an Id because of an
  * underlying bug somewhere else.
  *
  * @param inputs the inputs
  * @return the group params
  */
 private GroupParameter[] getGroupParams(Object[][] inputs) {
   for (Object[] list : inputs) {
     if (list instanceof GroupParameter[]) {
       List<GroupParameter> arr = new ArrayList<GroupParameter>();
       for (int i = 0; i < list.length; i++) {
         GroupParameter groupParam = (GroupParameter) list[i];
         if (groupParam.getId() != null) arr.add(groupParam);
       }
       return arr.toArray(new GroupParameter[] {});
     }
   }
   return null;
 }
 public List<TableElement> getParameters(JobFilter jobFilter, Object[]... inputs) {
   List<TableElement> tableElements = new ArrayList<TableElement>();
   UnittypeParameter[] params = getUnittypeParams(inputs);
   UnitParameter[] uParams = getUnitParams(inputs);
   UnitParameter[] uSessionParams = getUnitSessionParams(inputs);
   ProfileParameter[] pParams = getProfileParams(inputs);
   GroupParameter[] gParams = getGroupParams(inputs);
   JobParameter[] jParams = getJobParams(inputs);
   for (int i = 0; i < params.length; i++) {
     if (parameterShouldNotBeListed(jobFilter, params, i)) continue;
     String param = params[i].getName();
     String[] names = param.split("\\.");
     String id = "";
     Integer tab = WebConstants.PARAMETERS_START_INDENTATION;
     for (int j = 0; j < names.length; j++) {
       UnittypeParameter utp = (j == (names.length - 1) ? params[i] : null);
       String name = names[j];
       if (id.length() > 0) id += ".";
       id += name;
       if (tableElements.size() > 0) {
         List<TableElement> copy = new ArrayList<TableElement>();
         copy.addAll(tableElements);
         boolean isThere = false;
         for (TableElement element : copy) {
           if (element.getName().equals(id)) {
             isThere = true;
             break;
           }
         }
         if (!isThere) tableElements.add(new TableElement(id, tab, utp));
       } else tableElements.add(new TableElement(id, tab, utp));
       tab += WebConstants.PARAMETERS_NEXT_INDENTATION;
     }
   }
   Collections.sort(tableElements, new TableElementComparator());
   if (pParams != null) {
     for (ProfileParameter pParam : pParams) {
       for (TableElement te : tableElements) {
         if (te.getUnittypeParameter() == pParam.getUnittypeParameter()) {
           te.setProfileParameter(pParam);
           break;
         }
       }
     }
   }
   if (uParams != null) {
     for (UnitParameter uParam : uParams) {
       for (TableElement te : tableElements) {
         if (te.getUnittypeParameter() == uParam.getParameter().getUnittypeParameter()) {
           te.setUnitParameter(uParam);
           break;
         }
       }
     }
   }
   if (uSessionParams != null) {
     for (UnitParameter uSessionParam : uSessionParams) {
       for (TableElement te : tableElements) {
         if (te.getUnittypeParameter() == uSessionParam.getParameter().getUnittypeParameter()) {
           te.setUnitSessionParameter(uSessionParam);
           break;
         }
       }
     }
   }
   if (gParams != null) {
     for (GroupParameter gParam : gParams) {
       for (TableElement te : tableElements) {
         if (te.getUnittypeParameter() != null
             && te.getUnittypeParameter().equals(gParam.getParameter().getUnittypeParameter())
             && gParam.getId() != null) te.addGroupParameter(gParam);
       }
     }
   }
   if (jParams != null) {
     for (JobParameter jParam : jParams) {
       for (TableElement te : tableElements) {
         if (te.getUnittypeParameter() != null
             && te.getUnittypeParameter().equals(jParam.getParameter().getUnittypeParameter())) {
           te.setJobParameter(jParam);
           break;
         }
       }
     }
   }
   return tableElements;
 }