return toCompleteProduct(doc, true, true);
}
private CompleteProduct toCompleteProduct(Document doc, boolean getRefs,
boolean getMetadata) {
Product product = new Product();
Metadata metadata = new Metadata();
CompleteProduct completeProduct = new CompleteProduct();
product.setProductId(doc.get("product_id"));
product.setProductName(doc.get("product_name"));
product.setProductStructure(doc.get("product_structure"));
product.setTransferStatus(doc.get("product_transfer_status"));
ProductType type = new ProductType();
type.setDescription(doc.get("product_type_desc"));
type.setProductTypeId(doc.get("product_type_id"));
type.setName(doc.get("product_type_name"));
type.setProductRepositoryPath(doc.get("product_type_repoPath"));
type.setVersioner(doc.get("product_type_versioner"));
product.setProductType(type);
if (getMetadata) {
List<Element> elements = null;
try {
elements = valLayer.getElements(type);
} catch (ValidationLayerException e) {
LOG.log(Level.WARNING,
"Unable to obtain metadata for product: ["
+ product.getProductName() + "]: Message: "
+ e.getMessage());
}
if (elements != null) {
for (Iterator<Element> i = elements.iterator(); i.hasNext();) {
Element element = (Element) i.next();
String[] elemValues = doc.getValues(element
.getElementName());
if (elemValues != null && elemValues.length > 0) {
for (int j = 0; j < elemValues.length; j++) {
metadata.addMetadata(element.getElementName(),
elemValues[j]);
}
}
}
}
completeProduct.setMetadata(metadata);
}
if (getRefs) {
// now add the references
String[] origRefs = doc.getValues("reference_orig");
String[] dataStoreRefs = doc.getValues("reference_data_store");
String[] refLengths = doc.getValues("reference_fileSize");
String[] refMimeTypes = doc.getValues("reference_mimeType");
if ((origRefs.length == dataStoreRefs.length)
&& (origRefs.length == refLengths.length)) {
List<Reference> references = new Vector<Reference>();
for (int i = 0; i < origRefs.length; i++) {
Reference r = new Reference();
r.setOrigReference(origRefs[i]);
r.setDataStoreReference(dataStoreRefs[i]);
r.setFileSize((Long.parseLong(refLengths[i])));
if (refMimeTypes != null)
r.setMimeType(refMimeTypes[i]);
references.add(r);
}
product.setProductReferences(references);
} else {
LOG.log(Level.WARNING, "Number of original refs: ["
+ origRefs.length + "] for product: ["
+ product.getProductName()
+ "] not equivalent to number of data store refs: ["
+ dataStoreRefs.length
+ "]: Skipping product references");
}
}