11
|
1
|
|
2 package de.mpiwg.itgroup.eSciDoc.Tools.DRI;
|
|
3
|
|
4 import java.awt.datatransfer.StringSelection;
|
|
5 import java.io.BufferedReader;
|
|
6 import java.io.BufferedWriter;
|
|
7 import java.io.DataInputStream;
|
|
8 import java.io.File;
|
|
9 import java.io.FileInputStream;
|
|
10 import java.io.FileNotFoundException;
|
|
11 import java.io.FileOutputStream;
|
|
12 import java.io.FileWriter;
|
|
13 import java.io.IOException;
|
|
14 import java.io.InputStreamReader;
|
|
15 import java.io.OutputStreamWriter;
|
|
16 import java.io.Writer;
|
|
17 import java.util.HashMap;
|
|
18
|
|
19 import org.jdom.Document;
|
|
20 import org.jdom.Element;
|
|
21 import org.jdom.JDOMException;
|
|
22 import org.jdom.input.SAXBuilder;
|
|
23 import org.jdom.output.XMLOutputter;
|
|
24 import org.jdom.xpath.XPath;
|
|
25
|
|
26 import de.mpiwg.itgroup.eSciDoc.Tools.EScidocTools;
|
|
27 import de.mpiwg.itgroup.eSciDoc.utils.EScidocNameSpaceContext;
|
|
28
|
|
29 /**
|
|
30 * This package loads a list of filenames and the dris belonging to them as tab delimited list.
|
|
31 * It checks if the DRI are already in the index.meta, if not there are added, if there is wrong ID
|
|
32 * this is eithrer corrected or an warning message is generated
|
|
33 * @author dwinter
|
|
34 *
|
|
35 */
|
|
36 public class CheckAndAddDRIs {
|
|
37
|
|
38 public class DRI{
|
|
39
|
|
40 DRI(Document doc, String driString, Element driElement, boolean hasNameSpace){
|
|
41 this.doc = doc;
|
|
42 this.driString=driString;
|
|
43 this.driElement=driElement;
|
|
44 this.hasNameSpace=hasNameSpace;
|
|
45
|
|
46
|
|
47 }
|
|
48 Document doc;
|
|
49 String driString;
|
|
50 Element driElement;
|
|
51 boolean hasNameSpace;
|
|
52 }
|
|
53
|
|
54 HashMap<String,String> fileToDri;
|
|
55 String driType;
|
|
56
|
|
57 public CheckAndAddDRIs(String fileName, String driType) throws IOException {
|
|
58
|
|
59 this.driType=driType;
|
|
60
|
|
61 FileInputStream fstream = new FileInputStream(fileName);
|
|
62
|
|
63 DataInputStream in = new DataInputStream(fstream);
|
|
64 BufferedReader br = new BufferedReader(new InputStreamReader(in));
|
|
65 String strLine;
|
|
66
|
|
67
|
|
68 // lies alle files and dris
|
|
69 fileToDri = new HashMap<String, String>();
|
|
70 while ((strLine = br.readLine()) != null) {
|
|
71 String[] splitted= strLine.split(("\t"));
|
|
72 fileToDri.put(splitted[0], splitted[1]);
|
|
73 }
|
|
74 //Close the input stream
|
|
75 in.close();
|
|
76
|
|
77 }
|
|
78
|
|
79
|
|
80 /**
|
|
81 * Checks if the DRIs are in the index.meta
|
|
82 */
|
|
83 private void doDRI(String mode) {
|
|
84 for (String key: fileToDri.keySet()){
|
|
85 int result;
|
|
86 DRI dri;
|
|
87 try {
|
|
88 dri = getDRI(key);
|
|
89 result = checkDRI(dri,fileToDri.get(key));
|
|
90 } catch (JDOMException e) {
|
|
91 System.err.println("jdomExecption:"+key);
|
|
92 continue;
|
|
93
|
|
94 } catch (IOException e) {
|
|
95 System.err.println("IOError:"+key);
|
|
96 e.printStackTrace();
|
|
97 continue;
|
|
98
|
|
99 }
|
|
100 if (result==0){
|
|
101 System.out.println(String.format("%s\t%s\tOK", key,fileToDri.get(key)));
|
|
102 } else if (result==1){
|
|
103 if (mode.equals("check")){
|
|
104 System.out.println(String.format("%s\t%s\tno DRI", key,fileToDri.get(key)));
|
|
105 } else {
|
|
106 try {
|
|
107 System.out.println(String.format("%s\t%s\tadding DRI", key,fileToDri.get(key)));
|
|
108 add(key,dri,fileToDri.get(key));
|
|
109 } catch (JDOMException e) {
|
|
110 System.err.println("jdomExecption:"+key);
|
|
111 continue;
|
|
112 } catch (IOException e) {
|
|
113
|
|
114 System.err.println("IOExecption:"+key);
|
|
115 }
|
|
116 }
|
|
117 } else if (result==2){
|
|
118
|
|
119 if (mode.equals("modify")){
|
|
120 try {
|
|
121 modify(key,dri,fileToDri.get(key));
|
|
122 } catch (IOException e) {
|
|
123 System.err.println("IOExecption:"+key);
|
|
124 }
|
|
125 } else {
|
|
126 System.out.println(String.format("%s\t%s\twrong DRI", key,fileToDri.get(key)));
|
|
127 }
|
|
128 }
|
|
129
|
|
130 }
|
|
131
|
|
132
|
|
133
|
|
134
|
|
135 }
|
|
136 private void modify(String fileName, DRI dri, String driString) throws IOException {
|
|
137 dri.driElement.setText(driString);
|
|
138 writeIndexMeta(fileName, dri);
|
|
139
|
|
140 }
|
|
141
|
|
142
|
|
143 private void add(String fileName, DRI dri, String driString) throws JDOMException, IOException {
|
|
144 XPath xp;
|
|
145 if (dri.hasNameSpace){
|
|
146 xp = EScidocTools.getESciDocXpath("//mpiwg:meta");
|
|
147 } else {
|
|
148 xp = EScidocTools.getESciDocXpath("//meta");
|
|
149 }
|
|
150 Element meta = (Element)xp.selectSingleNode(dri.doc);
|
|
151 if (meta==null){
|
|
152 System.err.println("NO metatag in:"+fileName);
|
|
153 return;
|
|
154 }
|
|
155
|
|
156 Element el;
|
|
157 if (dri.hasNameSpace){
|
|
158 el = new Element("dri",EScidocNameSpaceContext.MPIWG);
|
|
159 }
|
|
160 else {
|
|
161 el = new Element("dri");
|
|
162 }
|
|
163
|
|
164 el.setAttribute("type",this.driType);
|
|
165 el.addContent(driString);
|
|
166 meta.addContent(el);
|
|
167
|
|
168 writeIndexMeta(fileName,dri);
|
|
169 }
|
|
170
|
|
171
|
|
172 private void writeIndexMeta(String fileName, DRI dri) throws IOException {
|
|
173
|
|
174 File im = new File(fileName+"/index.meta");
|
|
175 File old = new File(fileName+"/index.meta_old_DRI");
|
|
176
|
|
177 if (im.renameTo(old)){
|
|
178 XMLOutputter out = new XMLOutputter();
|
|
179
|
|
180 String string = out.outputString(dri.doc);
|
|
181 Writer out1 = new BufferedWriter(new OutputStreamWriter(
|
|
182 new FileOutputStream(fileName+"/index.meta"), "UTF-8"));
|
|
183
|
|
184
|
|
185 out1.write(string);
|
|
186 out1.close();
|
|
187 } else {
|
|
188 System.err.println("cannot rename:"+fileName);
|
|
189 }
|
|
190
|
|
191
|
|
192
|
|
193
|
|
194 // TODO Auto-generated method stub
|
|
195
|
|
196 }
|
|
197
|
|
198
|
|
199 private int checkDRI(DRI dri, String driString) throws JDOMException, IOException {
|
|
200
|
|
201
|
|
202 if(dri.driString==null){
|
|
203 return 1;
|
|
204 } else if (dri.driString.equals(driString)){
|
|
205 return 0;
|
|
206 }
|
|
207
|
|
208 return 2;
|
|
209 }
|
|
210
|
|
211
|
|
212 private DRI getDRI(String filename) throws JDOMException, IOException {
|
|
213
|
|
214
|
|
215 Document doc = readIndexMeta(filename);
|
|
216
|
|
217 XPath xpath = EScidocTools.getESciDocXpath("//meta/dri[@type=\""+driType+"\"]");
|
|
218
|
|
219
|
|
220 Element res = (Element)xpath.selectSingleNode(doc);
|
|
221
|
|
222 boolean hasNameSpace=false;
|
|
223 //Try namespace
|
|
224 if (res == null){
|
|
225 xpath = EScidocTools.getESciDocXpath("//mpiwg:meta/mpiwg:dri[@type=\""+driType+"\"]");
|
|
226 res = (Element)xpath.selectSingleNode(doc);
|
|
227
|
|
228 if (res==null)
|
|
229 return new DRI(doc,null,null,false);
|
|
230 else {
|
|
231 hasNameSpace=true;
|
|
232 }
|
|
233 }
|
|
234
|
|
235 String txt=res.getTextTrim();
|
|
236
|
|
237
|
|
238
|
|
239 return new DRI(doc, txt, res, hasNameSpace);
|
|
240 }
|
|
241
|
|
242
|
|
243 private Document readIndexMeta(String filename) throws JDOMException, IOException {
|
|
244 SAXBuilder builder = new SAXBuilder();
|
|
245 Document doc = builder.build(new File(filename+"/index.meta"));
|
|
246 return doc;
|
|
247 }
|
|
248
|
|
249
|
|
250 /**
|
|
251 * @param args
|
|
252 * @throws IOException
|
|
253 */
|
|
254 public static void main(String[] args) throws IOException {
|
|
255 if (args.length <3){
|
|
256 System.out.print("USAGE: command filename dri-type");
|
|
257 System.exit(0);
|
|
258 }
|
|
259
|
|
260 String command = args[0];
|
|
261 String fileName = args[1];
|
|
262 String driType = args[2];
|
|
263
|
|
264 final CheckAndAddDRIs ck = new CheckAndAddDRIs(fileName,driType);
|
|
265
|
|
266 if (command.equals("check")){
|
|
267 System.out.println("only checking");
|
|
268 ck.doDRI("check");
|
|
269 } else if (command.equals("add")){
|
|
270 System.out.println("only adding");
|
|
271 ck.doDRI("add");
|
|
272 } else if (command.equals("modify")){
|
|
273 System.out.println("adding and modify");
|
|
274 ck.doDRI("modify");
|
|
275 }
|
|
276 else {
|
|
277 System.out.println("Only the commands: check, add or modify are allowed");
|
|
278 }
|
|
279
|
|
280
|
|
281 }
|
|
282
|
|
283
|
|
284
|
|
285
|
|
286
|
|
287
|
|
288 }
|