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 9b1580c4b4..420c387fa9 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 += SubmissionLookupUtils.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 a0b57cde22..68f3e2c57c 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 += SubmissionLookupUtils.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..ac4174147c 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 += SubmissionLookupUtils.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 671bf94ed7..446fd2d119 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 @@ -18,6 +18,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; @@ -92,13 +93,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() { diff --git a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java index b824a7cd39..ca18af6611 100644 --- a/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java +++ b/dspace-api/src/main/java/org/dspace/submit/lookup/SubmissionLookupUtils.java @@ -126,11 +126,29 @@ public class SubmissionLookupUtils { public static List getValues(Record rec, String field) { List result = new ArrayList(); List values = rec.getValues(field); - String value = null; if (values != null && values.size() > 0) { - value = values.get(0).getAsString(); - result.add(value); + for (Value value : values){ + result.add( value.getAsString()); + } } return result; } + + 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 ece72e309b..49a5ceb1d3 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(); @@ -208,6 +210,7 @@ public class SubmissionLookupJSONRequest extends JSONRequest { data.put("authors",pub.getValues("authors")!=null? StringUtils.join(SubmissionLookupUtils.getValues(pub, "authors").iterator(), ", "):""); data.put("issued", SubmissionLookupUtils.getFirstValue(pub, "issued")); + publications.add(data); } }