From a037bd6ed7e1db54bf48e18865d1a42e74bc12c4 Mon Sep 17 00:00:00 2001 From: Kostas Stamatis Date: Fri, 18 Oct 2013 14:17:31 +0300 Subject: [PATCH] add logging + bug fixes --- .../lookup/ConfigurableLookupProvider.java | 80 +++++++++---------- .../DSpaceWorkspaceItemOutputGenerator.java | 18 ++++- .../submit/lookup/FieldMergeModifier.java | 2 +- .../MultipleSubmissionLookupDataLoader.java | 21 ++++- .../lookup/SubmissionItemDataLoader.java | 13 ++- .../SubmissionLookupOutputGenerator.java | 4 + .../lookup/SubmissionLookupService.java | 50 ++++++++++-- .../step/StartSubmissionLookupStep.java | 1 + .../submit/util/ItemSubmissionLookupDTO.java | 14 ++-- .../json/SubmissionLookupJSONRequest.java | 7 +- 10 files changed, 147 insertions(+), 63 deletions(-) diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/ConfigurableLookupProvider.java b/dspace-api/src/main/java/org/dspace/submit/lookup/ConfigurableLookupProvider.java index de34d60817..39fd476292 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/ConfigurableLookupProvider.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/ConfigurableLookupProvider.java @@ -128,48 +128,44 @@ public abstract class ConfigurableLookupProvider implements SubmissionLookupProv shortName); Field[] fields = bean.getClass().getDeclaredFields(); for (Field field : fields) { - if (field.getType() == String.class) { - Method getter = bean.getClass().getMethod( - "get" + field.getName().substring(0, 1).toUpperCase() - + field.getName().substring(1)); - - String value = (String) getter.invoke(bean); - - addMetadata(shortName, publication, field.getName(), value); - - } else if (field.getType() == List.class) { - ParameterizedType pt = (ParameterizedType) field - .getGenericType(); - - Method getter = bean.getClass().getMethod( - "get" + field.getName().substring(0, 1).toUpperCase() - + field.getName().substring(1)); - - ParameterizedType stringListType = (ParameterizedType) field.getGenericType(); - Class stringListClass = (Class) stringListType.getActualTypeArguments()[0]; - - if (String.class.isAssignableFrom(stringListClass)) { //repeatable metadata - List values = (List) getter.invoke(bean); - if (values != null) { - for (String value : values) { - addMetadata(shortName, publication, - field.getName(), value); - } - } - } else { - //authors - List values = (List) getter - .invoke(bean); - if (values != null) { - for (String[] nvalue : values) { - String value = nvalue[1] + ", " + nvalue[0]; - addMetadata(shortName, publication, - field.getName(), value); - } - } - } - - } + if (field.getType() == String.class) { + Method getter = bean.getClass().getMethod( + "get" + field.getName().substring(0, 1).toUpperCase() + + field.getName().substring(1)); + + String value = (String) getter.invoke(bean); + + addMetadata(shortName, publication, field.getName(), value); + + } else if (field.getType() == List.class) { + ParameterizedType pt = (ParameterizedType) field + .getGenericType(); + + Method getter = bean.getClass().getMethod( + "get" + field.getName().substring(0, 1).toUpperCase() + + field.getName().substring(1)); + + if (pt.getActualTypeArguments()[0] instanceof GenericArrayType) { // nomi + // di + // persone + List values = (List) getter.invoke(bean); + if (values != null) { + for (String[] nvalue : values) { + String value = nvalue[1] + ", " + nvalue[0]; + addMetadata(shortName, publication, + field.getName(), value); + } + } + } else { // metadati ripetibili + List values = (List) getter.invoke(bean); + if (values != null) { + for (String value : values) { + addMetadata(shortName, publication, + field.getName(), value); + } + } + } + } } return publication; } diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java b/dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java index 1a808add05..d9426cb1b8 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/DSpaceWorkspaceItemOutputGenerator.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; import org.dspace.app.util.DCInput; import org.dspace.app.util.DCInputSet; import org.dspace.app.util.DCInputsReader; @@ -43,6 +44,8 @@ import org.dspace.submit.util.ItemSubmissionLookupDTO; */ public class DSpaceWorkspaceItemOutputGenerator implements OutputGenerator { + private static Logger log = Logger.getLogger(DSpaceWorkspaceItemOutputGenerator.class); + private Context context; private String formName; private List witems; @@ -57,12 +60,21 @@ public class DSpaceWorkspaceItemOutputGenerator implements OutputGenerator { } @Override - public List generateOutput(RecordSet records) { + public List generateOutput(RecordSet recordSet) { + log.info("BTE OutputGenerator started. Records to output: " + recordSet.getRecords().size()); + + //Printing debug message + String totalString = ""; + for (Record record : recordSet.getRecords()){ + totalString += SubmissionLookupService.getPrintableString(record)+"\n"; + } + log.debug("Records to output:\n"+totalString); + + witems = new ArrayList(); - Map> record_sets = new HashMap>(); - for(Record rec : records) { + for(Record rec : recordSet.getRecords()) { try { WorkspaceItem wi = WorkspaceItem.create(context, collection, true); merge(formName, wi.getItem(), rec); diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java b/dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java index b461e5415a..6a312e9047 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/FieldMergeModifier.java @@ -34,7 +34,7 @@ public class FieldMergeModifier extends AbstractModifier { rec.addValue(target_field, value); } } - rec.removeField(source_field); + //rec.removeField(source_field); } } } diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java index 73ec544d2f..2fa477364d 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/MultipleSubmissionLookupDataLoader.java @@ -14,12 +14,14 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.log4j.Logger; import gr.ekt.bte.core.DataLoader; import gr.ekt.bte.core.DataLoadingSpec; import gr.ekt.bte.core.Record; import gr.ekt.bte.core.RecordSet; import gr.ekt.bte.core.StringValue; +import gr.ekt.bte.core.Value; import gr.ekt.bte.exceptions.MalformedSourceException; /** @@ -28,6 +30,8 @@ import gr.ekt.bte.exceptions.MalformedSourceException; */ public class MultipleSubmissionLookupDataLoader implements DataLoader { + private static Logger log = Logger.getLogger(MultipleSubmissionLookupDataLoader.class); + private static final String NOT_FOUND_DOI = "NOT-FOUND-DOI"; List providers; @@ -91,8 +95,13 @@ public class MultipleSubmissionLookupDataLoader implements DataLoader { } } - //KSTA:ToDo: providers must only be the ones that support DOI search! for (SubmissionLookupProvider provider : providers) { + + //Provider must support DOI + if (provider.getSupportedIdentifiers().contains(SubmissionLookupProvider.DOI)){ + continue; + } + //if (evictProviders != null // && evictProviders.contains(provider.getShortName())) { // continue; @@ -122,6 +131,16 @@ public class MultipleSubmissionLookupDataLoader implements DataLoader { } } + + log.info("BTE DataLoader finished. Items loaded: " + recordSet.getRecords().size()); + + //Printing debug message + String totalString = ""; + for (Record record : recordSet.getRecords()){ + totalString += SubmissionLookupService.getPrintableString(record)+"\n"; + } + log.debug("Records loaded:\n"+totalString); + return recordSet; } diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java index c7d617a85a..777478d89b 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionItemDataLoader.java @@ -16,6 +16,7 @@ import gr.ekt.bte.exceptions.MalformedSourceException; import java.util.List; +import org.apache.log4j.Logger; import org.dspace.submit.util.ItemSubmissionLookupDTO; @@ -26,7 +27,8 @@ public class SubmissionItemDataLoader implements DataLoader { private List dtoList; List providers; - + private static Logger log = Logger.getLogger(SubmissionItemDataLoader.class); + public SubmissionItemDataLoader() { dtoList = null; providers = null; @@ -44,6 +46,15 @@ public class SubmissionItemDataLoader implements DataLoader { ret.addRecord(rec); } + log.info("BTE DataLoader finished. Items loaded: " + ret.getRecords().size()); + + //Printing debug message + String totalString = ""; + for (Record record : ret.getRecords()){ + totalString += SubmissionLookupService.getPrintableString(record)+"\n"; + } + log.debug("Records loaded:\n"+totalString); + return ret; } diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java index 88a5216a44..7d5ed0afce 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupOutputGenerator.java @@ -58,6 +58,10 @@ public class SubmissionLookupOutputGenerator implements OutputGenerator { ItemSubmissionLookupDTO dto = new ItemSubmissionLookupDTO(entry.getValue()); dtoList.add(dto); } + + //Print debug messages + + return new ArrayList(); } diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java index 6e4669d1e8..70639c7e5f 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupService.java @@ -20,6 +20,7 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; +import org.dspace.identifier.DOI; import org.dspace.submit.util.SubmissionLookupDTO; import gr.ekt.bte.core.TransformationEngine; @@ -94,13 +95,19 @@ public class SubmissionLookupService { return phase2TransformationEngine; } - //KSTA:ToDo: Replace with something more dynamic public List getIdentifiers() { - List identifiers = new ArrayList(); - identifiers.add("doi"); - identifiers.add("pubmed"); - identifiers.add("arxiv"); - return identifiers; + + List allSupportedIdentifiers = new ArrayList(); + MultipleSubmissionLookupDataLoader dataLoader = (MultipleSubmissionLookupDataLoader)phase1TransformationEngine.getDataLoader(); + for (SubmissionLookupProvider provider : dataLoader.getProviders()){ + for (String identifier : provider.getSupportedIdentifiers()){ + if (!allSupportedIdentifiers.contains(identifier)){ + allSupportedIdentifiers.add(identifier); + } + } + } + + return allSupportedIdentifiers; } public Map> getProvidersIdentifiersMap() { @@ -153,4 +160,35 @@ public class SubmissionLookupService { public static String getType(Record rec) { return getFirstValue(rec, SubmissionLookupProvider.TYPE); } + + public static List getStringValuesFromValues(Record rec, String field) { + List values = rec.getValues(field); + if (values == null) + return null; + + List stringValues = new ArrayList(); + for (Value value : values){ + stringValues.add(value.getAsString()); + } + + return stringValues; + } + + public static String getPrintableString(Record record){ + StringBuilder result = new StringBuilder(); + + result.append("\nPublication {\n"); + + for (String field: record.getFields()){ + result.append("--"+field + ":\n"); + List values = record.getValues(field); + for (Value value : values){ + result.append("\t"+value.getAsString()+"\n"); + } + } + + result.append("}\n"); + + return result.toString(); + } } diff --git a/dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java b/dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java index 8fb43b12b5..fb3e5b7138 100644 --- a/dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java +++ b/dspace-api/src/main/java/org/dspace/submit/step/StartSubmissionLookupStep.java @@ -208,6 +208,7 @@ public class StartSubmissionLookupStep extends AbstractProcessingStep if (transformationEngine != null){ SubmissionItemDataLoader dataLoader = (SubmissionItemDataLoader)transformationEngine.getDataLoader(); dataLoader.setDtoList(Arrays.asList(new ItemSubmissionLookupDTO[]{dto})); + //dataLoader.setProviders() DSpaceWorkspaceItemOutputGenerator outputGenerator = (DSpaceWorkspaceItemOutputGenerator)transformationEngine.getOutputGenerator(); outputGenerator.setCollection(col); diff --git a/dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java b/dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java index d6e4129f6c..d0bee81575 100644 --- a/dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java +++ b/dspace-api/src/main/java/org/dspace/submit/util/ItemSubmissionLookupDTO.java @@ -64,14 +64,14 @@ public class ItemSubmissionLookupDTO implements Serializable { else { MutableRecord pub = new SubmissionLookupPublication(MERGED_PUBLICATION_PROVIDER); - for (SubmissionLookupProvider prov : providers) - { + //for (SubmissionLookupProvider prov : providers) + //{ for (Record p : publications) { - if (!SubmissionLookupService.getProviderName(p).equals(prov.getShortName())) - { - continue; - } + //if (!SubmissionLookupService.getProviderName(p).equals(prov.getShortName())) + //{ + // continue; + //} for (String field : p.getFields()) { List values = p.getValues(field); @@ -87,7 +87,7 @@ public class ItemSubmissionLookupDTO implements Serializable { } } } - } + //} return pub; } } diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java b/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java index 3b276ef836..3bd7ce470b 100644 --- a/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/json/SubmissionLookupJSONRequest.java @@ -83,7 +83,9 @@ public class SubmissionLookupJSONRequest extends JSONRequest { dataLoader.setIdentifiers(identifiers); try { + log.debug("BTE transformation is about to start!"); transformationEngine.transform(new TransformationSpec()); + log.debug("BTE transformation finished!"); SubmissionLookupOutputGenerator outputGenerator = (SubmissionLookupOutputGenerator)transformationEngine.getOutputGenerator(); result = outputGenerator.getDtoList(); @@ -205,8 +207,9 @@ public class SubmissionLookupJSONRequest extends JSONRequest { data.put("uuid", uuid); data.put("providers", item.getProviders()); data.put("title", SubmissionLookupService.getFirstValue(pub, "title")); - data.put("authors",pub.getValues("authors")!=null? - StringUtils.join(pub.getValues("authors").iterator(), ", "):""); + List authors = SubmissionLookupService.getStringValuesFromValues(pub, "authors"); + data.put("authors",authors!=null? + StringUtils.join(authors.iterator(), ", "):""); data.put("issued", SubmissionLookupService.getFirstValue(pub, "issued")); publications.add(data); }