List of usage examples for org.apache.commons.lang3 StringEscapeUtils escapeXml10
public static String escapeXml10(final String input)
Escapes the characters in a String using XML entities.
For example: "bread" & "butter" => "bread" & "butter" .
From source file:org.mskcc.cbio.oncokb.quest.VariantAnnotationXML.java
public static String annotate(Alteration alt, String tumorType) { // GeneBo geneBo = ApplicationContextSingleton.getGeneBo(); StringBuilder sb = new StringBuilder(); Gene gene = alt.getGene();//w ww . j av a 2s . c o m // Set<Gene> genes = new HashSet<Gene>(); // if (gene.getEntrezGeneId() > 0) { // genes.add(gene); // } else { // fake gene... could be a fusion gene // Set<String> aliases = gene.getGeneAliases(); // for (String alias : aliases) { // Gene g = geneBo.findGeneByHugoSymbol(alias); // if (g != null) { // genes.add(g); // } // } // } List<TumorType> relevantTumorTypes = TumorTypeUtils.getMappedOncoTreeTypesBySource(tumorType, "quest"); AlterationUtils.annotateAlteration(alt, alt.getAlteration()); AlterationBo alterationBo = ApplicationContextSingleton.getAlterationBo(); LinkedHashSet<Alteration> alterations = alterationBo.findRelevantAlterations(alt, true); // In previous logic, we do not include alternative alleles List<Alteration> alternativeAlleles = AlterationUtils.getAlleleAlterations(alt); alterations.removeAll(alternativeAlleles); EvidenceBo evidenceBo = ApplicationContextSingleton.getEvidenceBo(); // find all drugs //List<Drug> drugs = evidenceBo.findDrugsByAlterations(alterations); // find tumor types Set<String> tumorTypes = new HashSet<>(); if (alterations != null && alterations.size() > 0) { List<Object> tumorTypesEvidence = evidenceBo .findTumorTypesWithEvidencesForAlterations(new ArrayList<>(alterations)); for (Object evidence : tumorTypesEvidence) { if (evidence != null) { Object[] evidences = (Object[]) evidence; if (evidences.length > 0 && evidences[0] != null) { tumorTypes.add((String) evidences[0]); } } } } // sortTumorType(tumorTypes, tumorType); Query query = new Query(alt); query.setTumorType(tumorType); // summary sb.append("<annotation_summary>"); sb.append(SummaryUtils.fullSummary(gene, alt, alterations.isEmpty() ? Collections.singletonList(alt) : new ArrayList<>(alterations), query, relevantTumorTypes)); sb.append("</annotation_summary>\n"); // gene background List<Evidence> geneBgEvs = evidenceBo.findEvidencesByGene(Collections.singleton(gene), Collections.singleton(EvidenceType.GENE_BACKGROUND)); if (!geneBgEvs.isEmpty()) { Evidence ev = geneBgEvs.get(0); sb.append("<gene_annotation>\n"); sb.append(" <description>"); sb.append(StringEscapeUtils.escapeXml10(ev.getDescription()).trim()); sb.append("</description>\n"); exportRefereces(ev, sb, " "); sb.append("</gene_annotation>\n"); } if (alterations.isEmpty()) { sb.append("<!-- There is no information about the function of this variant in the MSKCC OncoKB. -->"); return sb.toString(); } List<Evidence> mutationEffectEbs = evidenceBo.findEvidencesByAlteration(alterations, Collections.singleton(EvidenceType.MUTATION_EFFECT)); for (Evidence ev : mutationEffectEbs) { sb.append("<variant_effect>\n"); sb.append(" <effect>"); if (ev != null) { sb.append(ev.getKnownEffect()); } sb.append("</effect>\n"); if (ev.getDescription() != null) { sb.append(" <description>"); sb.append(StringEscapeUtils.escapeXml10(ev.getDescription()).trim()); sb.append("</description>\n"); } if (ev != null) { exportRefereces(ev, sb, " "); } sb.append("</variant_effect>\n"); } for (String tt : tumorTypes) { TumorType oncoTreeType = TumorTypeUtils.getMappedOncoTreeTypesBySource(tt, "quest").get(0); boolean isRelevant = relevantTumorTypes.contains(oncoTreeType); StringBuilder sbTumorType = new StringBuilder(); sbTumorType.append("<cancer_type type=\"").append(tt).append("\" relevant_to_patient_disease=\"") .append(isRelevant ? "Yes" : "No").append("\">\n"); int nEmp = sbTumorType.length(); // find prognostic implication evidence blob Set<Evidence> prognosticEbs = new HashSet<Evidence>(evidenceBo.findEvidencesByAlteration(alterations, Collections.singleton(EvidenceType.PROGNOSTIC_IMPLICATION), Collections.singleton(oncoTreeType))); if (!prognosticEbs.isEmpty()) { sbTumorType.append(" <prognostic_implications>\n"); sbTumorType.append(" <description>\n"); for (Evidence ev : prognosticEbs) { String description = ev.getDescription(); if (description != null) { sbTumorType.append(" ").append(StringEscapeUtils.escapeXml10(description).trim()) .append("\n"); } } sbTumorType.append("</description>\n"); for (Evidence ev : prognosticEbs) { exportRefereces(ev, sbTumorType, " "); } sbTumorType.append(" </prognostic_implications>\n"); } // STANDARD_THERAPEUTIC_IMPLICATIONS List<Evidence> stdImpEbsSensitivity = evidenceBo.findEvidencesByAlteration(alterations, Collections.singleton(EvidenceType.STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY), Collections.singleton(oncoTreeType)); List<Evidence> stdImpEbsResisitance = evidenceBo.findEvidencesByAlteration(alterations, Collections.singleton(EvidenceType.STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE), Collections.singleton(oncoTreeType)); //Remove level_0 stdImpEbsSensitivity = filterLevelZeroEvidence(stdImpEbsSensitivity); //Remove level_R3 stdImpEbsResisitance = filterResistanceEvidence(stdImpEbsResisitance); exportTherapeuticImplications(relevantTumorTypes, stdImpEbsSensitivity, stdImpEbsResisitance, "standard_therapeutic_implications", sbTumorType, " ", isRelevant); // INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS List<Evidence> invImpEbsSensitivity = evidenceBo.findEvidencesByAlteration(alterations, Collections.singleton(EvidenceType.INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY), Collections.singleton(oncoTreeType)); List<Evidence> invImpEbsResisitance = evidenceBo.findEvidencesByAlteration(alterations, Collections.singleton(EvidenceType.INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE), Collections.singleton(oncoTreeType)); //Remove level_R3 invImpEbsResisitance = filterResistanceEvidence(invImpEbsResisitance); exportTherapeuticImplications(relevantTumorTypes, invImpEbsSensitivity, invImpEbsResisitance, "investigational_therapeutic_implications", sbTumorType, " ", isRelevant); if (sbTumorType.length() > nEmp) { sbTumorType.append("</cancer_type>\n"); sb.append(sbTumorType); } } return sb.toString(); }
From source file:org.mskcc.cbio.oncokb.quest.VariantAnnotationXML.java
private static void exportTherapeuticImplications(List<TumorType> relevantTumorTypes, Evidence evidence, StringBuilder sb, String indent) { LevelOfEvidence levelOfEvidence = evidence.getLevelOfEvidence(); for (Treatment treatment : evidence.getTreatments()) { sb.append(indent).append("<treatment>\n"); exportTreatment(treatment, sb, indent + " ", levelOfEvidence); sb.append(indent).append("</treatment>\n"); }//from w w w . ja v a 2s . c o m if (levelOfEvidence != null) { levelOfEvidence = LevelUtils.updateOrKeepLevelByIndication(levelOfEvidence, evidence.getPropagation(), relevantTumorTypes.contains(evidence.getOncoTreeType())); sb.append(indent).append("<level_of_evidence_for_patient_indication>\n"); sb.append(indent).append(" <level>"); sb.append(levelOfEvidence.getLevel()); sb.append("</level>\n"); sb.append(indent).append(" <description>"); sb.append(StringEscapeUtils.escapeXml10(levelOfEvidence.getDescription()).trim()); sb.append("</description>\n"); if (levelOfEvidence == LevelOfEvidence.LEVEL_1 || levelOfEvidence == LevelOfEvidence.LEVEL_2A || levelOfEvidence == LevelOfEvidence.LEVEL_2B) { sb.append(indent).append("<approved_indication>"); sb.append("</approved_indication>\n"); } sb.append(indent).append("</level_of_evidence_for_patient_indication>\n"); } sb.append(indent).append("<description>"); if (evidence.getDescription() != null) { sb.append(StringEscapeUtils.escapeXml10(evidence.getDescription()).trim()); } sb.append("</description>\n"); exportRefereces(evidence, sb, indent); }
From source file:org.mskcc.cbio.oncokb.quest.VariantAnnotationXML.java
private static void exportTreatment(Treatment treatment, StringBuilder sb, String indent, LevelOfEvidence levelOfEvidence) { List<Drug> drugs = treatment.getDrugs(); for (Drug drug : drugs) { sb.append(indent).append("<drug>\n"); sb.append(indent).append(" <name>"); String name = drug.getDrugName(); if (name != null) { sb.append(StringEscapeUtils.escapeXml10(name)); }//from w w w .j av a 2 s .c o m sb.append("</name>\n"); Set<String> synonyms = drug.getSynonyms(); for (String synonym : synonyms) { sb.append(indent).append(" <synonym>"); sb.append(synonym); sb.append("</synonym>\n"); } sb.append(indent).append(" <fda_approved>"); //FDA approved info based on evidence level. Temporaty solution. The info should be pulled up from database //by using PI-helper // Boolean fdaApproved = drug.isFdaApproved(); // if (fdaApproved!=null) { // sb.append(fdaApproved ? "Yes" : "No"); // } Boolean fdaApproved = levelOfEvidence == LevelOfEvidence.LEVEL_1 || levelOfEvidence == LevelOfEvidence.LEVEL_2A; sb.append(fdaApproved ? "Yes" : "No"); sb.append("</fda_approved>\n"); // sb.append(indent).append(" <description>"); // String desc = drug.getDescription(); // if (desc != null) { // sb.append(StringEscapeUtils.escapeXml10(desc)); // } // sb.append("</description>\n"); sb.append(indent).append("</drug>\n"); } }
From source file:org.openbmap.soapclient.GpxSerializer.java
/** * Iterates on way points and write them. * * @param bw/*from ww w . j a v a 2s. c o m*/ * Writer to the target file. */ private void writeWifis(final BufferedWriter bw) throws IOException { Log.i(TAG, "Writing wifi waypoints"); //@formatter:off Cursor c = mDbHelper.getReadableDatabase().rawQuery(WIFI_POINTS_SQL_QUERY, new String[] { String.valueOf(mSession), String.valueOf(0) }); //@formatter:on final int colLatitude = c.getColumnIndex(Schema.COL_LATITUDE); final int colLongitude = c.getColumnIndex(Schema.COL_LONGITUDE); final int colAltitude = c.getColumnIndex(Schema.COL_ALTITUDE); final int colTimestamp = c.getColumnIndex(Schema.COL_TIMESTAMP); final int colSsid = c.getColumnIndex(Schema.COL_SSID); long outer = 0; while (!c.isAfterLast()) { c.moveToFirst(); while (!c.isAfterLast()) { StringBuffer out = new StringBuffer(); out.append("<wpt lat=\""); out.append(String.valueOf(c.getDouble(colLatitude))); out.append("\" "); out.append("lon=\""); out.append(String.valueOf(c.getDouble(colLongitude))); out.append("\">"); out.append("<ele>"); out.append(String.valueOf(c.getDouble(colAltitude))); out.append("</ele>\n"); out.append("<time>"); // time stamp conversion to ISO 8601 out.append(getGpxDate(c.getLong(colTimestamp))); out.append("</time>"); out.append("<name>"); out.append(StringEscapeUtils.escapeXml10(c.getString(colSsid))); out.append("</name>"); out.append("</wpt>"); bw.write(out.toString()); bw.flush(); c.moveToNext(); } // fetch next CURSOR_SIZE records outer += CURSOR_SIZE; c.close(); //@formatter:off c = mDbHelper.getReadableDatabase().rawQuery(WIFI_POINTS_SQL_QUERY, new String[] { String.valueOf(mSession), String.valueOf(outer) }); //@formatter:on } c.close(); }
From source file:org.openbmap.soapclient.GpxSerializer.java
/** * Iterates on way points and write them. * * @param bw/*from ww w. j av a2s . c o m*/ * Writer to the target file. */ private void writeCells(final BufferedWriter bw) throws IOException { Log.i(TAG, "Writing cell waypoints"); //@formatter:off Cursor c = mDbHelper.getReadableDatabase().rawQuery(CELL_POINTS_SQL_QUERY, new String[] { String.valueOf(mSession), String.valueOf(0) }); //@formatter:on final int colLatitude = c.getColumnIndex(Schema.COL_LATITUDE); final int colLongitude = c.getColumnIndex(Schema.COL_LONGITUDE); final int colAltitude = c.getColumnIndex(Schema.COL_ALTITUDE); final int colTimestamp = c.getColumnIndex(Schema.COL_TIMESTAMP); final int colName = c.getColumnIndex("name"); long outer = 0; while (!c.isAfterLast()) { c.moveToFirst(); while (!c.isAfterLast()) { StringBuffer out = new StringBuffer(); out.append("<wpt lat=\""); out.append(String.valueOf(c.getDouble(colLatitude))); out.append("\" "); out.append("lon=\""); out.append(String.valueOf(c.getDouble(colLongitude))); out.append("\">"); out.append("<ele>"); out.append(String.valueOf(c.getDouble(colAltitude))); out.append("</ele>"); out.append("<time>"); // time stamp conversion to ISO 8601 out.append(getGpxDate(c.getLong(colTimestamp))); out.append("</time>"); out.append("<name>"); out.append(StringEscapeUtils.escapeXml10(c.getString(colName))); out.append("</name>"); out.append("</wpt>"); bw.write(out.toString()); bw.flush(); c.moveToNext(); } //bw.write(out.toString()); //out = null; // fetch next CURSOR_SIZE records outer += CURSOR_SIZE; c.close(); //@formatter:off c = mDbHelper.getReadableDatabase().rawQuery(CELL_POINTS_SQL_QUERY, new String[] { String.valueOf(mSession), String.valueOf(outer) }); //@formatter:on } c.close(); }
From source file:org.opendatakit.aggregate.externalservice.REDCapServer.java
@Override protected void insertData(Submission submission, CallingContext cc) throws ODKExternalServiceException { try {/*from ww w .ja v a2 s. co m*/ // an empty map to hold our values String study_id = null; // create a hash to hold the blobs for later processing Map<String, BlobSubmissionType> blobs = new HashMap<String, BlobSubmissionType>(); StringBuilder b = new StringBuilder(); Map<FormElementModel, SubmissionValue> valuesMap = submission.getSubmissionValuesMap(); for (FormElementModel element : valuesMap.keySet()) { SubmissionValue value = valuesMap.get(element); if (value == null) { continue; } if (element.isMetadata()) { // handle metadata specially } else { switch (element.getElementType()) { case METADATA: // This keeps lint warnings down... break; case STRING: { StringSubmissionType str = (StringSubmissionType) value; String strValue = str.getValue(); if (element.getElementName().equals("study_id")) { // Piece of crap parser in REDCap requires study id to be first // element study_id = strValue; } else if (strValue != null) { b.append("<").append(element.getElementName()).append(">") .append(StringEscapeUtils.escapeXml10(strValue)).append("</") .append(element.getElementName()).append(">"); } } break; case JRDATETIME: { JRDateTimeType dt = (JRDateTimeType) value; Date dtValue = dt.getValue(); if (dtValue != null) { GregorianCalendar g = new GregorianCalendar(TimeZone.getTimeZone("GMT")); g.setTime(dtValue); String strValue = String.format(FormatConsts.REDCAP_DATE_TIME_FORMAT_STRING, g.get(Calendar.YEAR), g.get(Calendar.MONTH) + 1, g.get(Calendar.DAY_OF_MONTH), g.get(Calendar.HOUR_OF_DAY), g.get(Calendar.MINUTE), g.get(Calendar.SECOND)); b.append("<").append(element.getElementName()).append(">") .append(StringEscapeUtils.escapeXml10(strValue)).append("</") .append(element.getElementName()).append(">"); } } break; case JRDATE: { JRDateType dt = (JRDateType) value; Date dtValue = dt.getValue(); if (dtValue != null) { GregorianCalendar g = new GregorianCalendar(TimeZone.getTimeZone("GMT")); g.setTime(dtValue); String strValue = String.format(FormatConsts.REDCAP_DATE_ONLY_FORMAT_STRING, g.get(Calendar.YEAR), g.get(Calendar.MONTH) + 1, g.get(Calendar.DAY_OF_MONTH)); b.append("<").append(element.getElementName()).append(">") .append(StringEscapeUtils.escapeXml10(strValue)).append("</") .append(element.getElementName()).append(">"); } } break; case JRTIME: { JRTimeType dt = (JRTimeType) value; Date dtValue = dt.getValue(); if (dtValue != null) { GregorianCalendar g = new GregorianCalendar(TimeZone.getTimeZone("GMT")); g.setTime(dtValue); String strValue = String.format(FormatConsts.REDCAP_TIME_FORMAT_STRING, g.get(Calendar.HOUR_OF_DAY), g.get(Calendar.MINUTE)); b.append("<").append(element.getElementName()).append(">") .append(StringEscapeUtils.escapeXml10(strValue)).append("</") .append(element.getElementName()).append(">"); } } break; case INTEGER: { LongSubmissionType longVal = (LongSubmissionType) value; if (longVal.getValue() != null) { String strValue = longVal.getValue().toString(); b.append("<").append(element.getElementName()).append(">") .append(StringEscapeUtils.escapeXml10(strValue)).append("</") .append(element.getElementName()).append(">"); } } break; case DECIMAL: { DecimalSubmissionType dec = (DecimalSubmissionType) value; if (dec.getValue() != null) { String strValue = dec.getValue().toString(); b.append("<").append(element.getElementName()).append(">") .append(StringEscapeUtils.escapeXml10(strValue)).append("</") .append(element.getElementName()).append(">"); } } break; case GEOPOINT: { // TODO: should not have gps_ prefix on tag... String strippedElementName = element.getElementName().replace("gps_", ""); GeoPointSubmissionType submissionValue = (GeoPointSubmissionType) value; GeoPoint coors = submissionValue.getValue(); if (coors.getLatitude() != null) { b.append("<").append("gps_lat_" + strippedElementName).append(">") .append(StringEscapeUtils.escapeXml10(coors.getLatitude().toString())) .append("</").append("gps_lat_" + strippedElementName).append(">"); b.append("<").append("gps_lon_" + strippedElementName).append(">") .append(StringEscapeUtils.escapeXml10(coors.getLongitude().toString())) .append("</").append("gps_lon_" + strippedElementName).append(">"); b.append("<").append("gps_alt_" + strippedElementName).append(">") .append(StringEscapeUtils.escapeXml10(coors.getAltitude().toString())) .append("</").append("gps_alt_" + strippedElementName).append(">"); b.append("<").append("gps_acc_" + strippedElementName).append(">") .append(StringEscapeUtils.escapeXml10(coors.getAccuracy().toString())) .append("</").append("gps_acc_" + strippedElementName).append(">"); } } break; case BINARY: { String file_field = element.getElementName(); BlobSubmissionType blob_value = (BlobSubmissionType) value; if (blob_value.getAttachmentCount(cc) == 1) { blobs.put(file_field, blob_value); } // upload these after we have successfully imported the record } break; case BOOLEAN: { String strippedElementName = element.getElementName().replace("slct-", ""); BooleanSubmissionType bType = (BooleanSubmissionType) value; if (bType.getValue() != null) { b.append("<").append(strippedElementName + "___" + bType.getValue().toString()) .append(">").append(StringEscapeUtils.escapeXml10("1")).append("</") .append(strippedElementName + "___" + bType.getValue().toString()).append(">"); } } break; case SELECT1: case SELECTN: { // TODO: it's not necessary to add (or remove) 'slct-' from // the field name anymore String formatElementName = element.getElementName().replace("slct-", ""); ChoiceSubmissionType choice = (ChoiceSubmissionType) value; for (String choiceVal : choice.getValue()) { b.append("<").append(formatElementName + "___" + choiceVal).append(">") .append(StringEscapeUtils.escapeXml10("1")).append("</") .append(formatElementName + "___" + choiceVal).append(">"); } } break; case REPEAT: { logger.warn("Unable to publish repeat groups to REDCap"); // REDCap does not handle repeat groups. } break; case GROUP: logger.warn("The GROUP submission type is not implemented"); break; } } } b.append("</item></records>"); if (study_id == null) { throw new IllegalStateException("Form does not contain a study_id field -- cannot publish!"); } String submissionsListString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><records><item><study_id>" + StringEscapeUtils.escapeXml10(study_id) + "</study_id>" + b.toString(); List<NameValuePair> eparams = new ArrayList<NameValuePair>(); eparams.add(new BasicNameValuePair("token", getApiKey())); eparams.add(new BasicNameValuePair("content", "record")); eparams.add(new BasicNameValuePair("format", "xml")); eparams.add(new BasicNameValuePair("overwriteBehavior", "overwrite")); eparams.add(new BasicNameValuePair("data", submissionsListString)); eparams.add(new BasicNameValuePair("returnContent", "ids")); eparams.add(new BasicNameValuePair("returnFormat", "xml")); HttpEntity postentity = new UrlEncodedFormEntity(eparams, UTF_CHARSET); submitPost("Publishing", postentity, null, cc); // send the files if they exist for (Map.Entry<String, BlobSubmissionType> e : blobs.entrySet()) { System.out.println("Processing media attachment...."); BlobSubmissionType blob = e.getValue(); submitFile(study_id, e.getKey(), blob, cc); } } catch (Exception e) { throw new ODKExternalServiceException(e); } }
From source file:org.opendatakit.aggregate.form.PropertyMapSerializer.java
/** * Serialize a key-value map into an XML-formatted document. * * @param value - a Map<String,String> of key-value pairs. * @return the XML document representing the serialization of that key-value map. *///from w ww. jav a 2 s . com public static String serializeRequestParameters(Map<String, String> value) { if (value == null) { return null; } StringBuilder b = new StringBuilder(); b.append(K_XML_BEGIN_PARAMETERS); for (Map.Entry<String, String> e : value.entrySet()) { b.append(K_XML_BEGIN_PARAMETER_BEGIN_KEY); b.append(StringEscapeUtils.escapeXml10(e.getKey())); b.append(K_XML_END_KEY_BEGIN_VALUE); b.append(StringEscapeUtils.escapeXml10(e.getValue())); b.append(K_XML_END_VALUE_END_PARAMETER); } b.append(K_XML_END_PARAMETERS); return b.toString(); }
From source file:org.opendatakit.aggregate.format.element.XmlAttributeFormatter.java
private void addToXmlValueToRow(Object value, String propertyName, Row row) { if (value != null) { String xmlString = propertyName + "=\"" + StringEscapeUtils.escapeXml10(value.toString()) + "\""; row.addFormattedValue(xmlString); }/* w ww. jav a 2s. c o m*/ }
From source file:org.opendatakit.aggregate.format.element.XmlElementFormatter.java
private void addToXmlValueToRow(Object value, String propertyName, Row row) { if (value != null) { String xmlString = HtmlUtil.createBeginTag(prefix + propertyName); xmlString += StringEscapeUtils.escapeXml10(value.toString()); xmlString += HtmlUtil.createEndTag(prefix + propertyName); xmlFormatter.writeXml(xmlString); } else {// w ww.j av a2 s . co m xmlFormatter.writeXml(HtmlUtil.createSelfClosingTag(prefix + propertyName)); } }
From source file:org.opendatakit.aggregate.format.element.XmlMediaAttachmentFormatter.java
@Override public void formatBinary(BlobSubmissionType blobSubmission, FormElementModel element, String ordinalValue, Row row, CallingContext cc) throws ODKDatastoreException { if (blobSubmission == null || (blobSubmission.getAttachmentCount(cc) == 0) || (blobSubmission.getContentHash(1, cc) == null)) { return;//w ww . jav a 2 s . c o m } String urlLink; { Map<String, String> properties = new HashMap<String, String>(); SubmissionKey k = blobSubmission.generateSubmissionKey(1); properties.put(ServletConsts.BLOB_KEY, k.toString()); properties.put(ServletConsts.AS_ATTACHMENT, "true"); String downloadRequestURL = cc.getServerURL() + BasicConsts.FORWARDSLASH + BinaryDataServlet.ADDR; urlLink = HtmlUtil.createLinkWithProperties(downloadRequestURL, properties); } // parallel to XFormsManifestXmlTable String xmlString = "<mediaFile>" + "<filename>" + StringEscapeUtils.escapeXml10(blobSubmission.getUnrootedFilename(1, cc)) + "</filename>" + "<hash>" + StringEscapeUtils.escapeXml10(blobSubmission.getContentHash(1, cc)) + "</hash>" + "<downloadUrl>" + StringEscapeUtils.escapeXml10(urlLink) + "</downloadUrl>" + "</mediaFile>\n"; row.addFormattedValue(xmlString); }