/*
* Copyright 2010 Glencoe Software, Inc. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.services.util;
import java.util.Arrays;
import java.util.List;
import ome.model.meta.ExperimenterGroup;
import ome.model.meta.Namespace;
import ome.parameters.Parameters;
import ome.system.Principal;
import ome.system.Roles;
import ome.system.ServiceFactory;
import ome.tools.spring.OnContextRefreshedEventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.hibernate.Session;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.transaction.annotation.Transactional;
/**
* Hook run by the context. This hook checks for certain well-defined namespaces
* on {@link #onApplicationEvent(ContextRefreshedEvent)}.
*
* @author Josh Moore, josh at glencoesoftwarecom
* @since 4.2.1
*/
public class NamespaceCheck extends OnContextRefreshedEventListener {
public final static Logger log = LoggerFactory.getLogger(NamespaceCheck.class);
public final static String FLIM = "openmicroscopy.org/omero/analysis/flim";
private final Executor executor;
private final Principal principal;
private final Roles roles;
public NamespaceCheck(Executor executor, String uuid, Roles roles) {
this.executor = executor;
this.principal = new Principal(uuid);
this.roles = roles;
}
@Override
public void handleContextRefreshedEvent(ContextRefreshedEvent event) {
executor.execute(principal, new Executor.SimpleWork(this,
"namespaceCheck") {
@Transactional(readOnly = false)
public Object doWork(Session session, ServiceFactory sf) {
Parameters params = new Parameters();
params.addString("name", FLIM);
List<Object[]> rv = sf.getQueryService().projection(
"select id from Namespace where name = :name", params);
if (rv.size() == 0) {
Namespace ns = new Namespace();
ns.setKeywords(Arrays.asList("Cell", "Background"));
ns.setName(FLIM);
ns.setMultivalued(Boolean.FALSE);
ns.getDetails()
.setGroup(
new ExperimenterGroup(roles
.getUserGroupId(), false));
ns = sf.getUpdateService().saveAndReturnObject(ns);
sf.getAdminService().moveToCommonSpace(ns);
log.info("Created namespace in common space: " + FLIM);
}
return null;
}
});
}
}