dnet-core/dnet-data-services/src/main/java/eu/dnetlib/data/objectstore/modular/inspector/ObjectStoreInspector.java

200 lines
4.9 KiB
Java

package eu.dnetlib.data.objectstore.modular.inspector;
import static eu.dnetlib.miscutils.collections.MappedCollection.listMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.google.gson.Gson;
import eu.dnetlib.data.objectstore.modular.connector.ObjectStore;
import eu.dnetlib.data.objectstore.modular.connector.ObjectStoreDao;
import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
import eu.dnetlib.enabling.inspector.AbstractInspectorController;
import eu.dnetlib.enabling.resultset.ResultSetListener;
import eu.dnetlib.miscutils.collections.MappedCollection;
import eu.dnetlib.miscutils.functional.UnaryFunction;
/**
* The Class ObjectStoreInspector is the inspector controller of the objectStore.
*/
@Controller
public class ObjectStoreInspector extends AbstractInspectorController {
// private static final Log log = LogFactory.getLog(ObjectStoreInspector.class);
/** The object store dao. */
@Autowired
private ObjectStoreDao objectStoreDao;
/**
* The Class ObjectStoreDescription.
*/
class ObjectStoreDescription {
/** The id. */
private String id;
/** The size. */
private int size;
/**
* Instantiates a new object store description.
*
* @param id
* the id
* @param size
* the size
*/
public ObjectStoreDescription(final String id, final int size) {
this.id = id;
this.size = size;
}
/**
* Gets the interpretation.
*
* @return the interpretation
* @throws ObjectStoreServiceException
*/
public String getInterpretation() throws ObjectStoreServiceException {
ObjectStore objectStore = objectStoreDao.getObjectStore(id);
return objectStore.getInterpretation();
}
/**
* Gets the id.
*
* @return the id
*/
public String getId() {
return id;
}
/**
* Sets the id.
*
* @param id
* the new id
*/
public void setId(final String id) {
this.id = id;
}
/**
* Gets the size.
*
* @return the size
*/
public int getSize() {
return size;
}
/**
* Sets the size.
*
* @param size
* the new size
*/
public void setSize(final int size) {
this.size = size;
}
}
/**
* Object stores.
*
* @param model
* the model
*/
@RequestMapping(value = "/inspector/objectstores.do")
public void objectStores(final Model model) {
List<String> objectStores = objectStoreDao.listObjectStores();
model.addAttribute("objectstores", MappedCollection.listMap(objectStores, new UnaryFunction<ObjectStoreDescription, String>() {
@Override
public ObjectStoreDescription evaluate(final String id) {
try {
ObjectStore objStore = objectStoreDao.getObjectStore(id);
return new ObjectStoreDescription(id, objStore.getSize());
} catch (ObjectStoreServiceException e) {
return null;
}
}
}));
}
/**
* Object store.
*
* @param model
* the model
* @param id
* the id
* @param startParam
* the start param
* @param regex
* the regex
* @throws ObjectStoreServiceException
*/
@RequestMapping(value = "/inspector/objectstore.do", method = RequestMethod.GET)
public void objectStore(final Model model,
@RequestParam("id") final String id,
@RequestParam(value = "start", required = false) final Integer startParam,
@RequestParam(value = "regex", required = false) final String regex) throws ObjectStoreServiceException {
int pageSize = 10;
int start = 0;
if (startParam != null) {
start = startParam;
}
ObjectStore objctStore = objectStoreDao.getObjectStore(id);
ResultSetListener rs = objctStore.deliver((long) 0, System.currentTimeMillis());
List<String> page = rs.getResult((1 + start), (start + pageSize));
final Gson g = new Gson();
model.addAttribute("id", id);
model.addAttribute("start", start);
model.addAttribute("regex", regex);
model.addAttribute("nextPage", start + pageSize);
model.addAttribute("prevPage", Math.max(0, start - pageSize));
model.addAttribute("size", rs.getSize());
model.addAttribute("page", listMap(page, new UnaryFunction<ObjectStoreFile, String>() {
@Override
public ObjectStoreFile evaluate(final String json) {
return g.fromJson(json, ObjectStoreFile.class);
}
}));
}
/**
* Gets the object store dao.
*
* @return the object store dao
*/
public ObjectStoreDao getObjectStoreDao() {
return objectStoreDao;
}
/**
* Sets the object store dao.
*
* @param objectStoreDao
* the new object store dao
*/
public void setObjectStoreDao(final ObjectStoreDao objectStoreDao) {
this.objectStoreDao = objectStoreDao;
}
}