Esempio n. 1
0
 /**
  * Looks up dcat mapping field for a give a record and writes response.
  *
  * @param r the record
  * @param dcatField the dcat field
  * @param before the indentation boolean cursor
  * @return the indentation boolean cursor
  */
 private boolean lookUpFieldFromDcat(IFeedRecord r, DcatField dcatField, boolean before) {
   String delimiter = ",";
   String dl = dcatField.getDelimiter();
   if (dl.length() > 0) {
     delimiter = dl;
   }
   String indexKey = dcatField.getIndex();
   Map<String, IFeedAttribute> index = r.getData(IFeedRecord.STD_COLLECTION_INDEX);
   if (indexKey.length() > 0) {
     before = writeField(r, index, dcatField, delimiter, before);
   } else if (dcatField.getName().equalsIgnoreCase("identifier") && indexKey.length() == 0) {
     ResourceLinks links = r.getResourceLinks();
     before =
         writeFieldValue(
             "\"" + getIdentifierUrl(links) + "\"", "identifier", delimiter, before, dcatField);
   }
   return before;
 }
Esempio n. 2
0
  /**
   * Writes fields value to response using field mappings.
   *
   * @param index the lucene index records
   * @param fieldName the lucene field
   * @param jsonKey the dcat field
   * @param delimiter the delimiter in lucene field
   * @param before the indentation flag
   * @param isDate true if date field
   * @return always <code>true</code>
   */
  private boolean writeField(
      IFeedRecord r,
      Map<String, IFeedAttribute> index,
      DcatField dcatField,
      String delimiter,
      boolean before) {
    String indexFieldName = dcatField.getIndex();
    String dcatFieldName = dcatField.getName();
    String fieldType = dcatField.getType();
    String fldValues = "";
    String[] flds = indexFieldName.split(",");
    for (String fld : flds) {
      IFeedAttribute indexValue = index.get(fld);
      String val = "";
      if (indexValue == null) {
        if (dcatField.isRequired()) {
          if (dcatFieldName.equalsIgnoreCase("accessURL")) {
            ResourceLinks links = r.getResourceLinks();
            for (int j = 0; j < links.size(); j++) {
              ResourceLink link = links.get(j);
              if (link.getTag().equals(ResourceLink.TAG_METADATA)) {
                val = link.getUrl();
                break;
              }
            }
          } else {
            val = defaultValues.get(dcatFieldName);
          }
        } else {
          continue;
        }
      } else {
        val = "" + indexValue;
        if (dcatFieldName.equalsIgnoreCase("format") && val.equalsIgnoreCase("[\"unknown\"]")) {
          val = defaultValues.get(dcatFieldName);
        }
      }
      String cleanedVal = cleanValue(val, fieldType, dcatFieldName, dcatField);
      if (dcatFieldName.equalsIgnoreCase("dataDictionary")
          && !(cleanedVal.startsWith("http://") || cleanedVal.startsWith("https://"))) {
        continue;
      }

      if (!fldValues.contains(cleanedVal)) {
        if (fldValues.length() > 0) {
          StringBuilder sb = new StringBuilder();
          if (fieldType.equalsIgnoreCase("array")) {
            if (!cleanedVal.equalsIgnoreCase(defaultValues.get(dcatFieldName))) {
              if (fldValues.startsWith("[") && fldValues.endsWith("]")) {
                fldValues = fldValues.replace("[", "").replace("]", "");
              }
              if (cleanedVal.startsWith("[") && cleanedVal.endsWith("]")) {
                cleanedVal = cleanedVal.replace("[", "").replace("]", "");
              }
              sb.append("[").append(fldValues).append(delimiter).append(cleanedVal).append("]");
              fldValues = sb.toString();
            }
          } else {
            sb.append(fldValues).append(delimiter).append(cleanedVal);
            fldValues = sb.toString();
          }
        } else {
          fldValues += cleanedVal;
        }
      }
    }
    if (fldValues.length() == 0) {
      fldValues = defaultValues.get(dcatFieldName);
      if (fldValues == null) {
        fldValues = "";
      }
    }
    if (fldValues.length() > 0) {
      fldValues = fldValues.replaceAll(",", ", ");
      if (before) {
        print(false, ",");
        print(false, "\r\n");
      }
      if (!fldValues.startsWith("\"")
          && !fldValues.startsWith("[")
          && !fldValues.endsWith("\"")
          && !fldValues.endsWith("]")) {
        fldValues = "\"" + fldValues + "\"";
      }
      print(before, "\"" + dcatFieldName + "\"" + sp() + ":" + sp() + fldValues);
      before = true;
    }
    return before;
  }
Esempio n. 3
0
  /**
   * Cleans value from lucene index
   *
   * @param value value to clean
   * @return cleaned value
   */
  private String cleanValue(String value, String type, String dcatFieldName, DcatField dcatField) {
    String delimiter = ", ";
    String dateFormat = "";
    int maxChars = -1;
    if (dcatField != null) {
      String df = dcatField.getDateFormat();
      if (df.length() > 0) {
        dateFormat = df;
      }
      int mc = dcatField.getMaxChars();
      if (mc > -1) {
        maxChars = mc;
      }
    }
    if (value == null) {
      return "";
    }
    if (value == "null") {
      return "";
    }
    if (type.equalsIgnoreCase("date") || dcatFieldName.equalsIgnoreCase("spatial")) {
      value = value.replaceAll("\"", "");
    }
    if (value.startsWith("[")) {
      value = value.replace("[", "");
      if (type.equalsIgnoreCase("string")) {
        value = value.replaceAll("\",\"", ",");
      }
    }
    if (value.endsWith("]")) {
      value = value.replace("]", "");
    }

    // only one webService url
    if (dcatFieldName.equalsIgnoreCase("webService") && value != null && value.length() > 0) {
      String[] parts = value.split(",http");
      if (parts != null && parts.length > 0) {
        value = parts[0];
        if (!value.startsWith("\"")) {
          value = "\"" + Val.escapeStrForJson(value);
        }
        if (!value.endsWith("\"")) {
          value += "\"";
        }
      }
    }

    if (value != null && value.length() > 0) {
      if (type.equalsIgnoreCase("date")) {
        int firstIdx = value.indexOf(",");
        if (firstIdx > -1) {
          value = value.substring(0, firstIdx);
        }
        value = parseDateTime(value);
        if (dateFormat.length() > 0) {
          SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
          Date dt = null;
          try {
            dt = sdf.parse(value);
          } catch (ParseException e) {
          }
          value = sdf.format(dt);
        }
      } else if (type.equalsIgnoreCase("array")) {
        value = value.replace("\"", "").replace("\"", "");
        String[] parts = value.split(",");
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        boolean hasValue = false;
        HashMap<String, String> repKeyword = new HashMap<String, String>();
        for (String part : parts) {
          String partTrimUpper = part.trim().toUpperCase();
          if (!part.startsWith("\"") && !part.endsWith("\"")) {
            if ((!dcatFieldName.equalsIgnoreCase("keyword"))
                || (!repKeyword.containsKey(partTrimUpper))) {
              repKeyword.put(partTrimUpper, partTrimUpper);
              if (hasValue) {
                sb.append(delimiter);
              }

              sb.append("\"").append(Val.escapeStrForJson(part.trim())).append("\"");
              hasValue = true;
            }
          }
        }
        sb.append("]");
        value = sb.toString();
      }

      if (type.equalsIgnoreCase("string")) {
        if (maxChars > -1 && value.length() > maxChars) {
          if (value.startsWith("\"") && value.endsWith("\"")) {
            value = "\"" + Val.escapeStrForJson(value.substring(1, maxChars)) + "\"";
          }
        }
      }
    }
    return value;
  }