1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.mycore.mods.access.facts.condition;
20
21 import java.util.List;
22 import java.util.Optional;
23
24 import org.jdom2.Element;
25 import org.mycore.access.facts.MCRFactsHolder;
26 import org.mycore.access.facts.condition.fact.MCRStringCondition;
27 import org.mycore.access.facts.fact.MCRObjectIDFact;
28 import org.mycore.access.facts.fact.MCRStringFact;
29 import org.mycore.datamodel.metadata.MCRObject;
30 import org.mycore.mods.MCRMODSWrapper;
31
32
33
34
35
36
37
38
39
40
41 public class MCRMODSCollectionCondition extends MCRStringCondition {
42
43 private static final String XPATH_COLLECTION = "mods:classification[contains(@valueURI,'/collection#')]";
44
45 private String idFact = "objid";
46
47 @Override
48 public void parse(Element xml) {
49 super.parse(xml);
50 this.idFact = Optional.ofNullable(xml.getAttributeValue("idfact")).orElse("objid");
51 }
52
53 @Override
54 public Optional<MCRStringFact> computeFact(MCRFactsHolder facts) {
55
56 Optional<MCRObjectIDFact> idc = facts.require(idFact);
57 if (idc.isPresent()) {
58 Optional<MCRObject> optMCRObject = idc.get().getObject();
59 if (optMCRObject.isPresent()) {
60 MCRMODSWrapper wrapper = new MCRMODSWrapper(optMCRObject.get());
61 List<Element> e = wrapper.getElements(XPATH_COLLECTION);
62 if ((e != null) && !(e.isEmpty())) {
63 String value = e.get(0).getAttributeValue("valueURI").split("#")[1];
64 if (value.equals(getTerm())) {
65 MCRStringFact fact = new MCRStringFact(getFactName(), getTerm());
66 fact.setValue(value);
67 facts.add(fact);
68 return Optional.of(fact);
69 }
70 }
71 }
72 }
73 return Optional.empty();
74 }
75 }