annotate src/de/mpiwg/anteater/events/processors/EventCreatorProcessor.java @ 0:036535fcd179

anteater
author jdamerow
date Fri, 14 Sep 2012 10:30:43 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
036535fcd179 anteater
jdamerow
parents:
diff changeset
1 package de.mpiwg.anteater.events.processors;
036535fcd179 anteater
jdamerow
parents:
diff changeset
2
036535fcd179 anteater
jdamerow
parents:
diff changeset
3 import java.util.ArrayList;
036535fcd179 anteater
jdamerow
parents:
diff changeset
4 import java.util.List;
036535fcd179 anteater
jdamerow
parents:
diff changeset
5
036535fcd179 anteater
jdamerow
parents:
diff changeset
6 import de.mpiwg.anteater.events.Applicant;
036535fcd179 anteater
jdamerow
parents:
diff changeset
7 import de.mpiwg.anteater.events.ResearchEvent;
036535fcd179 anteater
jdamerow
parents:
diff changeset
8 import de.mpiwg.anteater.results.ApplicantResult;
036535fcd179 anteater
jdamerow
parents:
diff changeset
9 import de.mpiwg.anteater.results.LocationResult;
036535fcd179 anteater
jdamerow
parents:
diff changeset
10 import de.mpiwg.anteater.results.ResultsCarrier;
036535fcd179 anteater
jdamerow
parents:
diff changeset
11 import de.mpiwg.anteater.results.SpeciesScientificResult;
036535fcd179 anteater
jdamerow
parents:
diff changeset
12 import de.mpiwg.anteater.text.TextInformation;
036535fcd179 anteater
jdamerow
parents:
diff changeset
13
036535fcd179 anteater
jdamerow
parents:
diff changeset
14 public class EventCreatorProcessor extends AEventProcessor {
036535fcd179 anteater
jdamerow
parents:
diff changeset
15
036535fcd179 anteater
jdamerow
parents:
diff changeset
16 @Override
036535fcd179 anteater
jdamerow
parents:
diff changeset
17 public void processEvents(List<ResearchEvent> events, ResultsCarrier carrier) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
18 TextInformation info = carrier.getTextInfo();
036535fcd179 anteater
jdamerow
parents:
diff changeset
19
036535fcd179 anteater
jdamerow
parents:
diff changeset
20 // find how many distinct applicants there are
036535fcd179 anteater
jdamerow
parents:
diff changeset
21 List<ApplicantResult> distinctApplicants = getDistinctApplicants(carrier);
036535fcd179 anteater
jdamerow
parents:
diff changeset
22
036535fcd179 anteater
jdamerow
parents:
diff changeset
23 // if there is only one applicant in text
036535fcd179 anteater
jdamerow
parents:
diff changeset
24 if (distinctApplicants.size() == 1) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
25 ResearchEvent event = createEvent(distinctApplicants.get(0), info,
036535fcd179 anteater
jdamerow
parents:
diff changeset
26 carrier.getLocationResults(), carrier.getSpeciesResults());
036535fcd179 anteater
jdamerow
parents:
diff changeset
27 events.add(event);
036535fcd179 anteater
jdamerow
parents:
diff changeset
28 return;
036535fcd179 anteater
jdamerow
parents:
diff changeset
29 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
30
036535fcd179 anteater
jdamerow
parents:
diff changeset
31 // if there are several applicants start new event with each applicant
036535fcd179 anteater
jdamerow
parents:
diff changeset
32 List<ApplicantResult> appsInSummary = new ArrayList<ApplicantResult>();
036535fcd179 anteater
jdamerow
parents:
diff changeset
33 List<ApplicantResult> appsInSuppleInf = new ArrayList<ApplicantResult>();
036535fcd179 anteater
jdamerow
parents:
diff changeset
34
036535fcd179 anteater
jdamerow
parents:
diff changeset
35 sortByTextType(distinctApplicants, appsInSummary, appsInSuppleInf);
036535fcd179 anteater
jdamerow
parents:
diff changeset
36
036535fcd179 anteater
jdamerow
parents:
diff changeset
37 List<SpeciesScientificResult> speciesInSuppleInf = new ArrayList<SpeciesScientificResult>();
036535fcd179 anteater
jdamerow
parents:
diff changeset
38 sortSpeciesByTextType(carrier.getSpeciesResults(), new ArrayList<SpeciesScientificResult>(), speciesInSuppleInf);
036535fcd179 anteater
jdamerow
parents:
diff changeset
39
036535fcd179 anteater
jdamerow
parents:
diff changeset
40 List<LocationResult> locationsInSuppleInf = new ArrayList<LocationResult>();
036535fcd179 anteater
jdamerow
parents:
diff changeset
41 sortLocsByTextType(carrier.getLocationResults(), new ArrayList<LocationResult>(), locationsInSuppleInf);
036535fcd179 anteater
jdamerow
parents:
diff changeset
42
036535fcd179 anteater
jdamerow
parents:
diff changeset
43 // if there are no applicants in summary, start new event with every
036535fcd179 anteater
jdamerow
parents:
diff changeset
44 // applicant
036535fcd179 anteater
jdamerow
parents:
diff changeset
45 // unless there is no species in between
036535fcd179 anteater
jdamerow
parents:
diff changeset
46 if (appsInSummary.isEmpty()) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
47 ResearchEvent event = null;
036535fcd179 anteater
jdamerow
parents:
diff changeset
48 for (int i = 0; i < appsInSuppleInf.size(); i++) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
49 ApplicantResult applicant = appsInSuppleInf.get(i);
036535fcd179 anteater
jdamerow
parents:
diff changeset
50 ApplicantResult nextApplicant = null;
036535fcd179 anteater
jdamerow
parents:
diff changeset
51 if (i < appsInSuppleInf.size() - 1)
036535fcd179 anteater
jdamerow
parents:
diff changeset
52 nextApplicant = appsInSuppleInf.get(i + 1);
036535fcd179 anteater
jdamerow
parents:
diff changeset
53
036535fcd179 anteater
jdamerow
parents:
diff changeset
54 List<SpeciesScientificResult> speciesForApp = new ArrayList<SpeciesScientificResult>();
036535fcd179 anteater
jdamerow
parents:
diff changeset
55 List<LocationResult> locationsForApp = new ArrayList<LocationResult>();
036535fcd179 anteater
jdamerow
parents:
diff changeset
56
036535fcd179 anteater
jdamerow
parents:
diff changeset
57 int endOfApplicant = applicant.getFinding().getStart()
036535fcd179 anteater
jdamerow
parents:
diff changeset
58 + applicant.getFinding().getLength();
036535fcd179 anteater
jdamerow
parents:
diff changeset
59 int startOfNextApplicant = nextApplicant != null ? nextApplicant
036535fcd179 anteater
jdamerow
parents:
diff changeset
60 .getFinding().getStart() : info.getSupplInfos().get(applicant.getResult().getTextIdx()).getText().length();
036535fcd179 anteater
jdamerow
parents:
diff changeset
61
036535fcd179 anteater
jdamerow
parents:
diff changeset
62 // find all species between current applicant and next one
036535fcd179 anteater
jdamerow
parents:
diff changeset
63 for (SpeciesScientificResult speciesResult : speciesInSuppleInf) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
64 if (speciesResult.getFinding().getStart() > endOfApplicant
036535fcd179 anteater
jdamerow
parents:
diff changeset
65 && speciesResult.getFinding().getStart() < startOfNextApplicant)
036535fcd179 anteater
jdamerow
parents:
diff changeset
66 speciesForApp.add(speciesResult);
036535fcd179 anteater
jdamerow
parents:
diff changeset
67 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
68
036535fcd179 anteater
jdamerow
parents:
diff changeset
69 // find all locations between current applicant and next one
036535fcd179 anteater
jdamerow
parents:
diff changeset
70 for (LocationResult locationResult : locationsInSuppleInf) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
71 if (locationResult.getFinding().getStart() >= endOfApplicant
036535fcd179 anteater
jdamerow
parents:
diff changeset
72 && locationResult.getFinding().getStart() < startOfNextApplicant)
036535fcd179 anteater
jdamerow
parents:
diff changeset
73 locationsForApp.add(locationResult);
036535fcd179 anteater
jdamerow
parents:
diff changeset
74 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
75
036535fcd179 anteater
jdamerow
parents:
diff changeset
76 // if there are no specie in between, applicant goes to last
036535fcd179 anteater
jdamerow
parents:
diff changeset
77 // event
036535fcd179 anteater
jdamerow
parents:
diff changeset
78 if (event != null) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
79 List<Applicant> applicantsInEvent = event.getApplicants();
036535fcd179 anteater
jdamerow
parents:
diff changeset
80 List<Applicant> applicantsWithoutLoc = new ArrayList<Applicant>();
036535fcd179 anteater
jdamerow
parents:
diff changeset
81
036535fcd179 anteater
jdamerow
parents:
diff changeset
82 Applicant newApplicant = createApplicant(applicant);
036535fcd179 anteater
jdamerow
parents:
diff changeset
83 event.getApplicants().add(newApplicant);
036535fcd179 anteater
jdamerow
parents:
diff changeset
84
036535fcd179 anteater
jdamerow
parents:
diff changeset
85 for (Applicant applicantInEvent : applicantsInEvent)
036535fcd179 anteater
jdamerow
parents:
diff changeset
86 if (applicantInEvent.getApplicantInstitution()
036535fcd179 anteater
jdamerow
parents:
diff changeset
87 .isEmpty()
036535fcd179 anteater
jdamerow
parents:
diff changeset
88 && applicantInEvent.getLocation().isEmpty())
036535fcd179 anteater
jdamerow
parents:
diff changeset
89 applicantsWithoutLoc.add(applicantInEvent);
036535fcd179 anteater
jdamerow
parents:
diff changeset
90
036535fcd179 anteater
jdamerow
parents:
diff changeset
91 setLocations(applicantsWithoutLoc, locationsForApp, event);
036535fcd179 anteater
jdamerow
parents:
diff changeset
92 setSpecies(speciesForApp, event);
036535fcd179 anteater
jdamerow
parents:
diff changeset
93 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
94
036535fcd179 anteater
jdamerow
parents:
diff changeset
95 if (event == null)
036535fcd179 anteater
jdamerow
parents:
diff changeset
96 event = createEvent(applicant, info, locationsForApp,
036535fcd179 anteater
jdamerow
parents:
diff changeset
97 speciesForApp);
036535fcd179 anteater
jdamerow
parents:
diff changeset
98
036535fcd179 anteater
jdamerow
parents:
diff changeset
99 if (speciesForApp.size() > 0) {
036535fcd179 anteater
jdamerow
parents:
diff changeset
100 events.add(event);
036535fcd179 anteater
jdamerow
parents:
diff changeset
101 event = null;
036535fcd179 anteater
jdamerow
parents:
diff changeset
102 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
103
036535fcd179 anteater
jdamerow
parents:
diff changeset
104 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
105 return;
036535fcd179 anteater
jdamerow
parents:
diff changeset
106 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
107
036535fcd179 anteater
jdamerow
parents:
diff changeset
108 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
109
036535fcd179 anteater
jdamerow
parents:
diff changeset
110 @Override
036535fcd179 anteater
jdamerow
parents:
diff changeset
111 public int getRank() {
036535fcd179 anteater
jdamerow
parents:
diff changeset
112 return 0;
036535fcd179 anteater
jdamerow
parents:
diff changeset
113 }
036535fcd179 anteater
jdamerow
parents:
diff changeset
114
036535fcd179 anteater
jdamerow
parents:
diff changeset
115
036535fcd179 anteater
jdamerow
parents:
diff changeset
116
036535fcd179 anteater
jdamerow
parents:
diff changeset
117
036535fcd179 anteater
jdamerow
parents:
diff changeset
118 }