Project

General

Profile

1
package eu.dnetlib.data.mdstore.modular.inspector;
2

    
3
import static eu.dnetlib.miscutils.collections.MappedCollection.listMap;
4

    
5
import java.io.StringReader;
6
import java.util.HashMap;
7
import java.util.List;
8
import java.util.Map;
9

    
10
import javax.annotation.Resource;
11

    
12
import org.apache.commons.logging.Log;
13
import org.apache.commons.logging.LogFactory;
14
import org.dom4j.Document;
15
import org.dom4j.DocumentException;
16
import org.dom4j.io.SAXReader;
17
import org.springframework.beans.factory.annotation.Autowired;
18
import org.springframework.stereotype.Controller;
19
import org.springframework.ui.Model;
20
import org.springframework.web.bind.annotation.RequestMapping;
21
import org.springframework.web.bind.annotation.RequestMethod;
22
import org.springframework.web.bind.annotation.RequestParam;
23

    
24
import com.google.common.base.Function;
25
import com.google.common.collect.Lists;
26

    
27
import eu.dnetlib.data.mdstore.MDStoreServiceException;
28
import eu.dnetlib.data.mdstore.modular.MDStoreDescription;
29
import eu.dnetlib.data.mdstore.modular.MDStoreFeeder;
30
import eu.dnetlib.data.mdstore.modular.connector.MDStore;
31
import eu.dnetlib.data.mdstore.modular.connector.MDStoreDao;
32
import eu.dnetlib.data.mdstore.modular.connector.MDStoreManagerInfo;
33
import eu.dnetlib.data.mdstore.modular.connector.MDStoreTransactionManager;
34
import eu.dnetlib.data.mdstore.modular.mongodb.MongoMDStore;
35
import eu.dnetlib.enabling.inspector.AbstractInspectorController;
36
import eu.dnetlib.enabling.resultset.ResultSetListener;
37
import eu.dnetlib.miscutils.functional.xml.TryIndentXmlString;
38

    
39
@Controller
40
public class MDStoreInspector extends AbstractInspectorController {
41

    
42
	private static final Log log = LogFactory.getLog(MDStoreInspector.class); // NOPMD by marko on 11/24/08 5:02 PM
43

    
44
	@Resource(name = "mongodbMDStoreDao")
45
	private MDStoreDao dao;
46

    
47
	@Autowired
48
	private MDStoreTransactionManager transactionManager;
49

    
50
	@Resource
51
	private MDStoreFeeder feeder;
52

    
53
	@RequestMapping(value = "/inspector/mdstores.do")
54
	public void mdstores(final Model model) throws MDStoreServiceException {
55
		model.addAttribute("mdstores", dao.listMDStores());
56
	}
57

    
58
	@RequestMapping(value = "/inspector/mdstore.do", method = RequestMethod.GET)
59
	public void mdstore(final Model model,
60
			@RequestParam("id") final String id,
61
			@RequestParam(value = "start", required = false) final Integer startParam,
62
			@RequestParam(value = "regex", required = false) final String regex) throws MDStoreServiceException {
63
		int pageSize = 10;
64
		int start = 0;
65

    
66
		if (startParam != null) {
67
			start = startParam;
68
		}
69

    
70
		MongoMDStore mdstore = (MongoMDStore) dao.getMDStore(id);
71

    
72
		ResultSetListener rs = mdstore.deliver(null, null, regex);
73
		Function<String, Map<String, String>> function = new Function<String, Map<String, String>>() {
74

    
75
			private SAXReader reader = new SAXReader();
76

    
77
			@Override
78
			public Map<String, String> apply(final String input) {
79
				try {
80

    
81
					Document doc = reader.read(new StringReader(input));
82
					final HashMap<String, String> result = new HashMap<String, String>();
83
					result.put("docId", doc.valueOf("//*[local-name()='objIdentifier']"));
84
					result.put("body", input.replaceAll("<", "&lt;").replaceAll(">", "&gt;"));
85
					result.put("mdId", id);
86
					return result;
87
				} catch (DocumentException e) {
88
					throw new RuntimeException(e);
89
				}
90

    
91
			}
92
		};
93
		List<Map<String, String>> page = Lists.transform(listMap(rs.getResult(1 + start, start + pageSize), new TryIndentXmlString()), function);
94

    
95
		model.addAttribute("id", id);
96
		model.addAttribute("start", start);
97
		model.addAttribute("regex", regex);
98
		model.addAttribute("nextPage", start + pageSize);
99
		model.addAttribute("prevPage", Math.max(0, start - pageSize));
100
		model.addAttribute("size", rs.getSize());
101
		model.addAttribute("page", page);
102
	}
103

    
104
	@RequestMapping(value = "/inspector/mdstore.do", method = RequestMethod.POST)
105
	public String bulkReplace(final Model model,
106
			@RequestParam("id") final String id,
107
			@RequestParam("regex") final String regex,
108
			@RequestParam("replace") final String replace,
109
			@RequestParam(value = "checkReplace", required = false) final Boolean checkReplace) throws MDStoreServiceException {
110

    
111
		log.debug("regex: " + regex);
112
		log.debug("replace: " + replace);
113

    
114
		MongoMDStore mdstore = (MongoMDStore) dao.getMDStore(id);
115

    
116
		boolean replaceEnable = checkReplace != null && checkReplace == true;
117

    
118
		if (replaceEnable) {
119
			mdstore.replace(regex, replace);
120
		} else {
121
			model.addAttribute("regex", regex);
122
		}
123

    
124
		return "redirect:mdstore.do?id=" + id;
125
	}
126

    
127
	@RequestMapping(value = "/inspector/mdstoreEditResult.do")
128
	public void mdstoreEditRecord(final Model model, @RequestParam("mdId") final String mdId, @RequestParam("docId") final String docId)
129
			throws MDStoreServiceException {
130
		MDStore mdstore = dao.getMDStore(mdId);
131
		String record = mdstore.getRecord(docId);
132
		log.debug("Displaying record for editing :" + record);
133
		model.addAttribute("mdId", mdId);
134
		TryIndentXmlString tryIndent = new TryIndentXmlString();
135
		String escaped = tryIndent.evaluate(record);
136
		model.addAttribute("body", escaped.replace("&", "&amp;"));
137
	}
138

    
139
	@RequestMapping(value = "/inspector/mdstoreSaveRecord.do")
140
	public String mdstoreSaveRecord(final Model model, @RequestParam("mdId") final String mdId, @RequestParam("body") final String body)
141
			throws MDStoreServiceException {
142
		MDStore mdstore = dao.getMDStore(mdId);
143

    
144
		mdstore.feed(Lists.newArrayList(body), true);
145

    
146
		return "redirect:mdstore.do?id=" + mdId;
147

    
148
	}
149

    
150
	@RequestMapping(value = "/inspector/mdstoreDeleteRecord.do")
151
	public String mdstoreDeleteRecord(final Model model, @RequestParam("mdId") final String mdId, @RequestParam("docId") final String docId)
152
			throws MDStoreServiceException {
153
		MDStore mdstore = dao.getMDStore(mdId);
154
		log.info("deleting record " + docId);
155
		mdstore.deleteRecord(docId);
156
		return "redirect:mdstore.do?id=" + mdId;
157
	}
158

    
159
	@RequestMapping(value = "/inspector/mdstoresRefreshSizes.do")
160
	public String mdstoresRefreshSizes(final Model model) throws MDStoreServiceException {
161

    
162
		for (MDStoreDescription mdstore : dao.listMDStores()) {
163
			feeder.touchSize(mdstore.getId(), dao.getMDStore(mdstore.getId()).getSize());
164
		}
165

    
166
		return "redirect:mdstores.do";
167
	}
168

    
169
	@RequestMapping(value = "/inspector/ensure.do")
170
	public String mdstoreEnsureIndex(final Model model, @RequestParam("id") final String mdId) throws MDStoreServiceException {
171

    
172
		MongoMDStore mdStore = (MongoMDStore) dao.getMDStore(mdId);
173

    
174
		log.info("manual ensureIndex for mdId: " + mdId);
175
		mdStore.ensureIndices();
176

    
177
		return "redirect:mdstores.do";
178
	}
179

    
180
	@RequestMapping(value = "/inspector/infoTransaction.do")
181
	public void mdstoreInfoTransaction(final Model model, @RequestParam("id") final String id) throws MDStoreServiceException {
182
		MDStoreManagerInfo info = transactionManager.getInfoForCurrentMdStore(id);
183
		model.addAttribute("info", info);
184
	}
185

    
186
	@RequestMapping(value = "/inspector/dropUsedCollection.do")
187
	public String dropUsedCollection(final Model model, @RequestParam("mdId") final String mdId, @RequestParam("id") final String id)
188
			throws MDStoreServiceException {
189
		transactionManager.dropUsed(mdId, id);
190
		return "redirect:mdstore.do?id=" + mdId;
191
	}
192

    
193
	@RequestMapping(value = "/inspector/invalidTransactionCollection.do")
194
	public String invalidTransactionCollection(final Model model, @RequestParam("mdId") final String mdId, @RequestParam("id") final String id)
195
			throws MDStoreServiceException {
196
		transactionManager.dropTransaction(mdId, id);
197
		return "redirect:mdstore.do?id=" + mdId;
198
	}
199

    
200
	@RequestMapping(value = "/inspector/refreshSizes.do")
201
	public String refreshSizes(final Model model) throws MDStoreServiceException {
202

    
203
		dao.refreshSizes();
204
		return "redirect:mdstores.do";
205
	}
206

    
207
	@RequestMapping(value = "/inspector/doGarbage.do")
208
	public String doGarbage(final Model model) throws MDStoreServiceException {
209

    
210
		dao.startGarbage();
211
		return "redirect:mdstores.do";
212
	}
213
}
    (1-1/1)