Esempio n. 1
0
  /**
   * Prints attributes using dcat mappings
   *
   * @param r record
   * @param before <code>true</code> if more info will be printed after that section
   */
  protected void printAttributesUserDcatMappings(IFeedRecord r, boolean before) {

    String schemaKey = "";
    Map<String, IFeedAttribute> index = r.getData(IFeedRecord.STD_COLLECTION_INDEX);
    IFeedAttribute schemaKeyAttr = index.get("sys.schema.key");
    if (schemaKeyAttr != null) {
      schemaKey = cleanValue(schemaKeyAttr + "", "", "", null);
    }
    DcatFields dcatFields = null;
    Set<String> keys = this.dcatSchemas.keySet();
    schemaKey = schemaKey.replaceAll("\"", "");
    for (String key : keys) {
      if (key.contains(schemaKey)) {
        dcatFields = this.dcatSchemas.get(key);
        break;
      }
    }
    if (dcatFields == null) {
      dcatFields = this.dcatSchemas.get("others");
    }
    if (dcatFields == null) {
      return;
    }

    printTab();
    for (DcatField dcatField : dcatFields) {
      before = lookUpFieldFromDcat(r, dcatField, before);
    }
    ResourceLinks links = r.getResourceLinks();
    printLinks(links, false, before);
  }
Esempio n. 2
0
  /**
   * Prints all records.
   *
   * @param records records to print
   * @param more <code>true</code> if more info will be printed after that section
   */
  @Override
  protected void printRecords(IFeedRecords records, boolean more) {
    int numberOfHits = records.getOpenSearchProperties().getNumberOfHits();
    int counter = 0;

    this.dcatSchemas =
        ApplicationContext.getInstance()
            .getConfiguration()
            .getCatalogConfiguration()
            .getDcatSchemas();
    LOGGER.info("Beginning processing " + numberOfHits + " DCAT records...");
    for (int i = 0; i < records.size(); i++) {
      IFeedRecord record = records.get(i);
      Envelope envelope = record.getEnvelope();
      printRecord(record, envelope, i < records.size() - 1);

      if ((++counter) % 1000 == 0) {
        LOGGER.info(
            "Processed "
                + counter
                + "/"
                + numberOfHits
                + " DCAT records ("
                + (100 * counter) / numberOfHits
                + "%)");
      }
    }
  }
Esempio n. 3
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. 4
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;
  }