added IdentifierComparator
parent
0419953470
commit
5af5a8ae42
@ -0,0 +1,81 @@
|
||||
|
||||
package eu.dnetlib.dhp.oa.dedup;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import eu.dnetlib.dhp.oa.dedup.model.Identifier;
|
||||
import eu.dnetlib.dhp.schema.common.EntityType;
|
||||
import eu.dnetlib.dhp.schema.common.ModelConstants;
|
||||
import eu.dnetlib.dhp.schema.oaf.DataInfo;
|
||||
import eu.dnetlib.dhp.schema.oaf.KeyValue;
|
||||
import eu.dnetlib.dhp.schema.oaf.OafEntity;
|
||||
import eu.dnetlib.dhp.schema.oaf.StructuredProperty;
|
||||
import eu.dnetlib.dhp.schema.oaf.utils.OafMapperUtils;
|
||||
import eu.dnetlib.dhp.schema.oaf.utils.PidComparator;
|
||||
import eu.dnetlib.dhp.schema.oaf.utils.PidType;
|
||||
|
||||
public class IdentifierComparator<T extends OafEntity> implements Comparator<Identifier<T>> {
|
||||
|
||||
public static int compareIdentifiers(Identifier left, Identifier right) {
|
||||
return new IdentifierComparator<>().compare(left, right);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(Identifier<T> left, Identifier<T> i) {
|
||||
// priority in comparisons: 1) pidtype, 2) collectedfrom (depending on the entity type) , 3) date 4)
|
||||
// alphabetical order of the originalID
|
||||
|
||||
Set<String> lKeys = Optional
|
||||
.ofNullable(left.getCollectedFrom())
|
||||
.map(c -> c.stream().map(KeyValue::getKey).collect(Collectors.toSet()))
|
||||
.orElse(Sets.newHashSet());
|
||||
|
||||
final Optional<List<KeyValue>> cf = Optional.ofNullable(i.getCollectedFrom());
|
||||
Set<String> rKeys = cf
|
||||
.map(c -> c.stream().map(KeyValue::getKey).collect(Collectors.toSet()))
|
||||
.orElse(Sets.newHashSet());
|
||||
|
||||
if (left.getPidType().compareTo(i.getPidType()) == 0) { // same type
|
||||
if (left.getEntityType() == EntityType.publication) {
|
||||
if (isFromDatasourceID(lKeys, ModelConstants.CROSSREF_ID)
|
||||
&& !isFromDatasourceID(rKeys, ModelConstants.CROSSREF_ID))
|
||||
return -1;
|
||||
if (isFromDatasourceID(rKeys, ModelConstants.CROSSREF_ID)
|
||||
&& !isFromDatasourceID(lKeys, ModelConstants.CROSSREF_ID))
|
||||
return 1;
|
||||
}
|
||||
if (left.getEntityType() == EntityType.dataset) {
|
||||
if (isFromDatasourceID(lKeys, ModelConstants.DATACITE_ID)
|
||||
&& !isFromDatasourceID(rKeys, ModelConstants.DATACITE_ID))
|
||||
return -1;
|
||||
if (isFromDatasourceID(rKeys, ModelConstants.DATACITE_ID)
|
||||
&& !isFromDatasourceID(lKeys, ModelConstants.DATACITE_ID))
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (left.getDate().compareTo(i.getDate()) == 0) {// same date
|
||||
// we need to take the alphabetically lower id
|
||||
return left.getOriginalID().compareTo(i.getOriginalID());
|
||||
} else
|
||||
// we need to take the elder date
|
||||
return left.getDate().compareTo(i.getDate());
|
||||
} else {
|
||||
return new PidComparator<>(left.getEntity()).compare(toSP(left.getPidType()), toSP(i.getPidType()));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isFromDatasourceID(Set<String> collectedFrom, String dsId) {
|
||||
return collectedFrom.contains(dsId);
|
||||
}
|
||||
|
||||
private StructuredProperty toSP(PidType pidType) {
|
||||
return OafMapperUtils.structuredProperty("", pidType.toString(), pidType.toString(), "", "", new DataInfo());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
# Root logger option
|
||||
log4j.rootLogger=DEBUG, stdout
|
||||
|
||||
# Direct log messages to stdout
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.Target=System.out
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
|
||||
|
||||
# Change this to set Spark log level
|
||||
log4j.logger.org.apache.spark=ERROR
|
||||
log4j.rootCategory=WARN
|
||||
|
||||
# Silence akka remoting
|
||||
log4j.logger.Remoting=WARN
|
||||
|
||||
# Ignore messages below warning level from Jetty, because it's a bit verbose
|
||||
log4j.logger.org.eclipse.jetty=WARN
|
||||
|
||||
log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitterFactory=WARN
|
||||
log4j.logger.org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter=WARN
|
||||
log4j.logger.org.apache.parquet.hadoop.ParquetOutputFormat=WARN
|
||||
log4j.logger.org.apache.parquet.hadoop.InternalParquetRecordWriter=WARN
|
||||
log4j.logger.org.apache.hadoop.io.compress.CodecPool=WARN
|
||||
log4j.logger.org.apache.parquet.hadoop.codec.CodecConfig=WARN
|
Loading…
Reference in New Issue