Project

General

Profile

Download (4.2 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2009 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.cdm.io.markup;
11

    
12
import javax.xml.stream.XMLEventReader;
13
import javax.xml.stream.XMLStreamException;
14
import javax.xml.stream.events.XMLEvent;
15

    
16
import org.apache.log4j.Logger;
17

    
18
import eu.etaxonomy.cdm.common.CdmUtils;
19
import eu.etaxonomy.cdm.common.GeneralParser;
20
import eu.etaxonomy.cdm.model.reference.Reference;
21
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
22

    
23
/**
24
 * @author a.mueller
25
 * @created 30.05.2012
26
 * 
27
 */
28
public class MarkupModsImport extends MarkupImportBase {
29
	@SuppressWarnings("unused")
30
	private static final Logger logger = Logger.getLogger(MarkupModsImport.class);
31

    
32
	protected static final String MODS_TITLEINFO = "titleInfo";
33
	protected static final String MODS_ABSTRACT = "abstract";
34
	protected static final String MODS_TITLE = "title";
35
	protected static final String MODS_SUBTITLE = "subTitle";
36
	protected static final String MODS_PARTNUMBER = "partNumber";
37
	protected static final String MODS_NAME = "name";
38
	protected static final String MODS_ORIGININFO = "originInfo";
39
	protected static final String MODS_IDENTIFIER = "identifier";
40

    
41
	
42
	public MarkupModsImport(MarkupDocumentImport docImport) {
43
		super(docImport);
44
	}
45

    
46
	public void handleMods(MarkupImportState state, XMLEventReader reader, XMLEvent parentEvent)
47
			throws XMLStreamException {
48
		checkNoAttributes(parentEvent);
49
		
50
		Reference<?> modsRef = ReferenceFactory.newGeneric();
51
		while (reader.hasNext()) {
52
			XMLEvent next = readNoWhitespace(reader);
53
			if (isMyEndingElement(next, parentEvent)) {
54
				//set the source reference
55
				state.getConfig().setSourceReference(modsRef);
56
				return;
57
			}else if (isStartingElement(next, MODS_TITLEINFO)) {
58
				handleTitleInfo(state, reader, next, modsRef);
59
			}else if (isStartingElement(next, MODS_ABSTRACT)) {
60
				String abstractStr = getCData(state, reader, next, true).trim();
61
				if (abstractStr.startsWith("ABSTRACT")){
62
					abstractStr = abstractStr.replaceFirst("ABSTRACT", "").trim();
63
				}
64
				modsRef.setReferenceAbstract(abstractStr);
65
			} else if (isStartingElement(next, MODS_IDENTIFIER)) {
66
				handleIdentifier(state, reader, next, modsRef);
67
			} else if (isStartingElement(next, MODS_NAME)) {
68
				handleNotYetImplementedElement(next);
69
			} else if (isStartingElement(next, MODS_ORIGININFO)) {
70
				handleNotYetImplementedElement(next);
71
			} else {
72
				handleUnexpectedElement(next);
73
			}
74
		}
75
		return;
76
	}
77

    
78
	private void handleIdentifier(MarkupImportState state, XMLEventReader reader, 
79
			XMLEvent parentEvent, Reference<?> modsRef) throws XMLStreamException {
80
		checkNoAttributes(parentEvent);
81
		
82
		
83
		String identifier = getCData(state, reader, parentEvent, true).trim();
84
		
85
		if (GeneralParser.isIsbn(identifier)){
86
			modsRef.setIsbn(identifier);
87
		}else{
88
			String message = "Identifier pattern not recognized: %s";
89
			fireWarningEvent(String.format(message, identifier), parentEvent, 4);
90
		}
91
		
92
		return;
93
	}
94

    
95
	/**
96
	 * Reads all titleInfo information.
97
	 * ! Preliminary implementation !
98
	 */
99
	private void handleTitleInfo(MarkupImportState state, XMLEventReader reader, XMLEvent parentEvent, Reference<?> modsRef) 
100
			throws XMLStreamException {
101
		checkNoAttributes(parentEvent);
102

    
103
		
104
		String title = null;
105
		String subTitle = null;
106
		String partNumber = null;
107
		
108
		while (reader.hasNext()) {
109
			XMLEvent next = readNoWhitespace(reader);
110
			
111
			if (isMyEndingElement(next, parentEvent)) {
112
				String all = CdmUtils.concat(" - ", title, subTitle);
113
				all = CdmUtils.concat(", ", all, partNumber);
114
				modsRef.setTitle(all);
115
				return;
116
			}else if (isStartingElement(next, MODS_TITLE)) {
117
				title = this.getCData(state, reader, next);
118
			}else if (isStartingElement(next, MODS_SUBTITLE)) {
119
				subTitle = this.getCData(state, reader, next);
120
			}else if (isStartingElement(next, MODS_PARTNUMBER)) {
121
				partNumber = this.getCData(state, reader, next);
122
			} else {
123
				handleUnexpectedElement(next);
124
			}
125
		}
126
		return;
127
		
128
	}
129
}
(14-14/19)