change version to 3.3.0-SNAPSHOT in cdm-3.3 branch
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / ManagementController.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.cdm.remote.controller;
11
12 import java.io.IOException;
13 import java.net.URL;
14 import java.util.Map;
15 import java.util.UUID;
16
17 import javax.servlet.http.HttpServletRequest;
18 import javax.servlet.http.HttpServletResponse;
19
20 import org.apache.log4j.Logger;
21 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.stereotype.Controller;
23 import org.springframework.web.bind.annotation.RequestMapping;
24 import org.springframework.web.bind.annotation.RequestMethod;
25 import org.springframework.web.bind.annotation.RequestParam;
26 import org.springframework.web.servlet.ModelAndView;
27
28 import eu.etaxonomy.cdm.api.service.search.ICdmMassIndexer;
29 import eu.etaxonomy.cdm.common.monitor.RestServiceProgressMonitor;
30 import eu.etaxonomy.cdm.database.DataSourceInfo;
31 import eu.etaxonomy.cdm.database.DataSourceReloader;
32 import eu.etaxonomy.cdm.remote.controller.util.ProgressMonitorUtil;
33 import eu.etaxonomy.cdm.remote.json.JsonpRedirect;
34
35 @Controller
36 @RequestMapping(value = {"/manage"})
37 public class ManagementController
38 {
39 public static final Logger logger = Logger.getLogger(ManagementController.class);
40
41 // @Autowired
42 private DataSourceReloader datasoucrceLoader;
43
44 @Autowired
45 public ICdmMassIndexer indexer;
46
47 @Autowired
48 public ProgressMonitorController progressMonitorController;
49
50 /**
51 * There should only be one processes operating on the lucene index
52 * therefore the according progress monitor uuid is stored in
53 * this static field.
54 */
55 private static UUID indexMonitorUuid = null;
56
57
58 private static final int DEFAULT_PAGE_SIZE = 25;
59
60 /*
61 * return page not found http error (404) for unknown or incorrect UUIDs
62 * (non-Javadoc)
63 * @see org.springframework.web.servlet.mvc.AbstractController#handleRequestInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
64 */
65 //@RequestMapping(value = { "/manager/datasources/list" }, method = RequestMethod.GET)
66 protected ModelAndView doList(HttpServletRequest request, HttpServletResponse respone) throws Exception {
67
68 ModelAndView mv = new ModelAndView();
69 Map<String, DataSourceInfo> dataSourceInfos = datasoucrceLoader.test();
70 mv.addObject(dataSourceInfos);
71
72 return mv;
73 }
74
75 //@RequestMapping(value = { "/manager/datasources/reload" }, method = RequestMethod.GET)
76 public ModelAndView doReload(HttpServletRequest request, HttpServletResponse respone) throws Exception {
77
78 ModelAndView mv = new ModelAndView();
79 Map<String, DataSourceInfo> dataSourceInfos = datasoucrceLoader.reload();
80 mv.addObject(dataSourceInfos);
81
82 return mv;
83 }
84
85 /**
86 *
87 * Reindex all cdm entities listed in {@link ICdmMassIndexer#indexedClasses()}.
88 * Re-indexing will not purge the index.
89 * @param frontendBaseUrl if the CDM server is running behind a reverse proxy you need
90 * to supply the base URL of web service front-end which is
91 * provided by the proxy server.
92 * @param request
93 * @param respone
94 * @return
95 * @throws Exception
96 */
97 @RequestMapping(value = { "reindex" }, method = RequestMethod.GET)
98 public ModelAndView doReindex(
99 @RequestParam(value = "frontendBaseUrl", required = false) String frontendBaseUrl,
100 HttpServletRequest request, HttpServletResponse response) throws Exception {
101
102
103 String processLabel = "Re-indexing";
104 ProgressMonitorUtil progressUtil = new ProgressMonitorUtil(progressMonitorController);
105
106 if(!progressMonitorController.isMonitorRunning(indexMonitorUuid)) {
107 indexMonitorUuid = progressUtil.registerNewMonitor();
108 Thread subThread = new Thread(){
109 public void run(){
110 indexer.reindex(progressMonitorController.getMonitor(indexMonitorUuid));
111 }
112 };
113 subThread.start();
114 }
115 // send redirect "see other"
116 return progressUtil.respondWithMonitor(frontendBaseUrl, request, response, processLabel, indexMonitorUuid);
117 }
118
119 /**
120 * This will wipe out the index.
121 *
122 * @param request
123 * @param respone
124 * @return
125 * @throws Exception
126 */
127 @RequestMapping(value = { "purge" }, method = RequestMethod.GET)
128 public ModelAndView doPurge(
129 @RequestParam(value = "frontendBaseUrl", required = false) String frontendBaseUrl,
130 HttpServletRequest request, HttpServletResponse response) throws Exception {
131
132
133 String processLabel = "Purging";
134
135 ProgressMonitorUtil progressUtil = new ProgressMonitorUtil(progressMonitorController);
136
137 if(!progressMonitorController.isMonitorRunning(indexMonitorUuid)) {
138 indexMonitorUuid = progressUtil.registerNewMonitor();
139 Thread subThread = new Thread(){
140 public void run(){
141 indexer.purge(progressMonitorController.getMonitor(indexMonitorUuid));
142 }
143 };
144 subThread.start();
145 }
146
147 // send redirect "see other"
148 return progressUtil.respondWithMonitor(frontendBaseUrl, request, response, processLabel, indexMonitorUuid);
149 }
150
151 }
152