Project

General

Profile

« Previous | Next » 

Revision 49332

minor

View differences:

DLIResolverSerializer.java
10 10
import com.ximpleware.XMLModifier;
11 11
import eu.dnetlib.dli.resolver.model.DLIResolvedObject;
12 12

  
13
import eu.dnetlib.pid.resolver.mdstore.plugin.AbstractResolverSerializer;
13 14
import eu.dnetlib.pid.resolver.mdstore.plugin.ResolverSerializer;
14 15
import eu.dnetlib.pid.resolver.model.ObjectType;
15 16
import eu.dnetlib.pid.resolver.model.ResolvedObject;
......
22 23
/**
23 24
 * Created by sandro on 9/21/16.
24 25
 */
25
public class DLIResolverSerializer implements ResolverSerializer {
26
public class DLIResolverSerializer extends AbstractResolverSerializer {
26 27

  
27
	private static final Log log = LogFactory.getLog(DLIResolverSerializer.class);
28
    private static final Log log = LogFactory.getLog(DLIResolverSerializer.class);
28 29

  
29
	private StringTemplate dmfTemplate;
30
    private StringTemplate dmfTemplate;
30 31

  
31
	private StringTemplate pmfTemplate;
32
    private StringTemplate pmfTemplate;
32 33

  
33
	private StringTemplate scholixTemplate;
34
    private StringTemplate scholixTemplate;
34 35

  
35 36

  
36
	@Override
37
	public String serializeToXML(final ResolvedObject object) {
38
		StringWriter writer = new StringWriter(16);
37
    @Override
38
    public String serializeToXML(final ResolvedObject object) {
39
        StringWriter writer = new StringWriter(16);
39 40
        NoIndentWriter out = new NoIndentWriter(writer);
40 41

  
41
		if (object.getType() == null)
42
			object.setType(ObjectType.unknown);
42
        if (object.getType() == null)
43
            object.setType(ObjectType.unknown);
43 44

  
44
		switch (object.getType()) {
45
		case publication: {
46
            return serialize(pmfTemplate, object, writer, out);
45
        switch (object.getType()) {
46
            case publication: {
47
                return serialize(pmfTemplate, object, writer, out);
48
            }
49
            case dataset: {
50
                return serialize(dmfTemplate, object, writer, out);
51
            }
52
            case unknown: {
53
                return serialize(scholixTemplate, object, writer, out);
54
            }
47 55
        }
48
		case dataset: {
49
            return serialize(dmfTemplate, object, writer, out);
50
        }
51
		case unknown: {
52
            return serialize(scholixTemplate, object, writer, out);
53
        }
54
        }
55
		return null;
56
	}
57

  
58
	@Override
59
	public String serialize(final StringTemplate template, final ResolvedObject object, final StringWriter writer, final NoIndentWriter out) {
60
		try {
61
            template.removeAttribute("object");
62
            template.setAttribute("object", object);
63
            template.write(out);
64
            String result = writer.toString();
65
            writer.close();
66
            return result;
67
        } catch (Throwable e) {
68
            throw new RuntimeException(e);
69
        }
56
        return null;
70 57
    }
71 58

  
72 59

  
73
	public String serializeReplacingXML(final String xml, final ResolvedObject object) {
60
    public StringTemplate getDmfTemplate() {
61
        return dmfTemplate;
62
    }
74 63

  
75
		try {
76
			VTDGen vg = new VTDGen(); // Instantiate VTDGen
77
			XMLModifier xm = new XMLModifier(); //Instantiate XMLModifier
64
    @Required
65
    public void setDmfTemplate(final StringTemplate dmfTemplate) {
66
        this.dmfTemplate = dmfTemplate;
67
    }
78 68

  
79
			vg.setDoc(xml.getBytes());
69
    public StringTemplate getPmfTemplate() {
70
        return pmfTemplate;
71
    }
80 72

  
81
			vg.parse(true);
82
			VTDNav vn = vg.getNav();
83
			xm.bind(vn);
73
    @Required
74
    public void setPmfTemplate(final StringTemplate pmfTemplate) {
75
        this.pmfTemplate = pmfTemplate;
76
    }
84 77

  
85
			final AutoPilot ap = new AutoPilot(vn);
78
    public StringTemplate getScholixTemplate() {
79
        return scholixTemplate;
80
    }
86 81

  
87
            ap.selectXPath("//*[local-name()='objIdentifier']");
88
            if (ap.evalXPath() != -1) {
89
                LocalDateTime currentTime = LocalDateTime.now();
90
                xm.insertAfterElement(String.format("\n<dri:resolvedDate>%s</dri:resolvedDate>", currentTime));
91
            }
92

  
93
			ap.selectXPath("//*[local-name()='about']");
94
			if (ap.evalXPath() != -1) {
95
				xm.remove();
96
			}
97
			ap.selectXPath("//*[local-name()='metadata']");
98

  
99
			if (ap.evalXPath() != -1) {
100
				xm.insertBeforeElement(serializeToXML(object));
101
				xm.remove();
102
			}
103
			final ByteArrayOutputStream bas = new ByteArrayOutputStream();
104
			xm.output(bas);
105
			return new String(bas.toByteArray());
106
		} catch (Throwable e) {
107
			if (log.isDebugEnabled()) {
108
				log.debug(String.format("Error on replacing xml: %s", xml));
109
			}
110
			return null;
111
		}
112
	}
113

  
114
	public StringTemplate getDmfTemplate() {
115
		return dmfTemplate;
116
	}
117

  
118
	@Required
119
	public void setDmfTemplate(final StringTemplate dmfTemplate) {
120
		this.dmfTemplate = dmfTemplate;
121
	}
122

  
123
	public StringTemplate getPmfTemplate() {
124
		return pmfTemplate;
125
	}
126

  
127
	@Required
128
	public void setPmfTemplate(final StringTemplate pmfTemplate) {
129
		this.pmfTemplate = pmfTemplate;
130
	}
131

  
132
	public StringTemplate getScholixTemplate() {
133
		return scholixTemplate;
134
	}
135

  
136
	@Required
137
	public void setScholixTemplate(final StringTemplate scholixTemplate) {
138
		this.scholixTemplate = scholixTemplate;
139
	}
82
    @Required
83
    public void setScholixTemplate(final StringTemplate scholixTemplate) {
84
        this.scholixTemplate = scholixTemplate;
85
    }
140 86
}

Also available in: Unified diff