package eu.etaxonomy.cdm.api.service;\r
\r
import java.util.ArrayList;\r
-import java.util.Collection;\r
import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
\r
\r
\r
*\r
*/\r
@Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class AgentServiceImpl extends IdentifiableServiceBase<AgentBase,IAgentDao> implements IAgentService {\r
private static final Logger logger = Logger.getLogger(AgentServiceImpl.class);\r
\r
return new DefaultPagerImpl<Address>(pageNumber, numberOfResults, pageSize, results);\r
}\r
\r
- public Pager<AgentBase> search(Class<? extends AgentBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.count(clazz,queryString);\r
- \r
- List<AgentBase> results = new ArrayList<AgentBase>();\r
- if(numberOfResults > 0) { // no point checking again\r
- results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
- }\r
- \r
- return new DefaultPagerImpl<AgentBase>(pageNumber, numberOfResults, pageSize, results);\r
- }\r
-\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.service.IAgentService#getPersonUuidAndNomenclaturalTitle()\r
*/\r
import eu.etaxonomy.cdm.persistence.dao.common.IAnnotatableDao;\r
import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
\r
-@Transactional(readOnly = true)\r
public abstract class AnnotatableServiceBase<T extends AnnotatableEntity,DAO extends IAnnotatableDao<T>> extends VersionableServiceBase<T, DAO>\r
implements IAnnotatableService<T> {\r
- \r
+ @Transactional(readOnly = true)\r
public Pager<Annotation> getAnnotations(T annotatedObj, MarkerType status, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
Integer numberOfResults = dao.countAnnotations(annotatedObj, status);\r
\r
\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
\r
@Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class AnnotationService extends AnnotatableServiceBase<Annotation, AnnotationDaoImpl> implements\r
IAnnotationService {\r
\r
import org.joda.time.DateTime;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.persistence.view.IAuditEventDao;\r
\r
@Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class AuditEventService implements IAuditEventService {\r
\r
IAuditEventDao dao;\r
public void generateTitleCache() {\r
logger.warn("Not yet implemented");\r
}\r
-\r
- public Pager<Collection> search(Class<? extends Collection> clazz, String query, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.count(clazz,query);\r
- \r
- List<Collection> results = new ArrayList<Collection>();\r
- if(numberOfResults > 0) { // no point checking again\r
- results = dao.search(clazz,query, pageSize, pageNumber, orderHints, propertyPaths); \r
- }\r
- \r
- return new DefaultPagerImpl<Collection>(pageNumber, numberOfResults, pageSize, results);\r
- }\r
\r
public List<Collection> searchByCode(String code) {\r
return this.dao.getCollectionByCode(code);\r
import org.apache.log4j.Logger;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
\r
\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class CommonServiceImpl extends ServiceBase<OriginalSourceBase,IOriginalSourceDao> implements ICommonService {\r
private static final Logger logger = Logger.getLogger(CommonServiceImpl.class);\r
\r
import org.springframework.jdbc.datasource.AbstractDriverBasedDataSource;\r
import org.springframework.orm.hibernate3.SessionFactoryUtils;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
*\r
*/\r
@Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class DatabaseServiceHibernateImpl implements IDatabaseService, ApplicationContextAware {\r
private static final Logger logger = Logger.getLogger(DatabaseServiceHibernateImpl.class);\r
\r
* FIXME Candidate for harmonization\r
* move: descriptionElementService.search\r
*/\r
- public Pager<DescriptionElementBase> search(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+ public Pager<DescriptionElementBase> searchElements(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
Integer numberOfResults = descriptionElementDao.count(clazz,queryString);\r
\r
List<DescriptionElementBase> results = new ArrayList<DescriptionElementBase>();\r
\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.model.description.FeatureNode;\r
import eu.etaxonomy.cdm.persistence.dao.description.IFeatureTreeDao;\r
\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class FeatureTreeServiceImpl extends IdentifiableServiceBase<FeatureTree, IFeatureTreeDao> implements IFeatureTreeService {\r
\r
private IFeatureNodeDao featureNodeDao;\r
* @return a Pager DescriptionElementBase instances\r
* @see <a href="http://lucene.apache.org/java/2_4_0/queryparsersyntax.html">Apache Lucene - Query Parser Syntax</a>\r
*/\r
- public Pager<DescriptionElementBase> search(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);\r
+ public Pager<DescriptionElementBase> searchElements(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);\r
\r
/**\r
* Returns a List of Media that are associated with a given description element\r
* @return a paged list of instances of type T matching the queryString
*/
public Pager<T> findByTitle(Class<? extends T> clazz, String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);
+
+ /**
+ * Returns a Paged List of IdentifiableEntity instances where the default field matches the String queryString (as interpreted by the Lucene QueryParser)
+ *
+ * @param clazz filter the results by class (or pass null to return all IdentifiableEntity instances)
+ * @param queryString
+ * @param pageSize The maximum number of identifiable entities returned (can be null for all matching identifiable entities)
+ * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+ * @param orderHints
+ * Supports path like <code>orderHints.propertyNames</code> which
+ * include *-to-one properties like createdBy.username or
+ * authorTeam.persistentTitleCache
+ * @param propertyPaths properties to be initialized
+ * @return a Pager IdentifiableEntity instances
+ * @see <a href="http://lucene.apache.org/java/2_4_0/queryparsersyntax.html">Apache Lucene - Query Parser Syntax</a>
+ */
+ public Pager<T> search(Class<? extends T> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);
}
import java.util.UUID;\r
\r
import org.hibernate.Session;\r
-import org.springframework.transaction.annotation.Propagation;\r
-import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.cdm.persistence.dao.BeanInitializer;\r
import eu.etaxonomy.cdm.persistence.query.Grouping;\r
import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
*\r
* @param <T>\r
*/\r
-@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)\r
public interface IService<T extends CdmBase>{\r
\r
// FIXME what does this method do?\r
-// @Transactional(readOnly=false)\r
public void clear();\r
\r
\r
* @param persistentObject the object to be deleted\r
* @return the unique identifier of the deleted entity\r
*/\r
- @Transactional(readOnly=false)\r
public UUID delete(T persistentObject);\r
\r
/**\r
* @param transientObject the entity to be merged\r
* @return The unique identifier of the persisted entity\r
*/\r
- @Transactional(readOnly=false)\r
public UUID merge(T transientObject);\r
\r
/**\r
* @param persistentObject the object to be refreshed\r
* @return the unique identifier\r
*/\r
- @Transactional(readOnly=false)\r
public UUID refresh(T persistentObject);\r
\r
public List<T> rows(String tableName, int limit, int start);\r
* @return A Map containing the new entities, keyed using the generated UUID's\r
* of those entities\r
*/\r
- @Transactional(readOnly=false)\r
public Map<UUID,T> save(Collection<T> newInstances); \r
\r
/**\r
* @param newInstance the new entity to be persisted\r
* @return A generated UUID for the new persistent entity\r
*/\r
- @Transactional(readOnly=false)\r
public UUID save(T newInstance);\r
\r
/**\r
* @param transientObject the entity to be persisted\r
* @return The unique identifier of the persisted entity\r
*/\r
- @Transactional(readOnly=false)\r
public UUID saveOrUpdate(T transientObject);\r
\r
/**\r
* @param transientObject the entity to be persisted\r
* @return The unique identifier of the persisted entity\r
*/\r
- @Transactional(readOnly=false)\r
public UUID update(T transientObject);\r
\r
/**\r
\r
package eu.etaxonomy.cdm.api.service;\r
\r
+import java.util.UUID;\r
+\r
import org.springframework.dao.DataAccessException;\r
+import org.springframework.security.GrantedAuthority;\r
import org.springframework.security.userdetails.GroupManager;\r
import org.springframework.security.userdetails.UserDetailsManager;\r
import org.springframework.security.userdetails.UsernameNotFoundException;\r
\r
+import eu.etaxonomy.cdm.model.common.Group;\r
import eu.etaxonomy.cdm.model.common.User;\r
\r
public interface IUserService extends IService<User>, UserDetailsManager, GroupManager {\r
\r
public void changePasswordForUser(String username, String password) throws UsernameNotFoundException, DataAccessException;\r
+ \r
+ public UUID saveGrantedAuthority(GrantedAuthority grantedAuthority);\r
+ \r
+ public UUID saveGroup(Group group);\r
}\r
import eu.etaxonomy.cdm.persistence.query.MatchMode;
import eu.etaxonomy.cdm.persistence.query.OrderHint;
-@Transactional(readOnly = true)
public abstract class IdentifiableServiceBase<T extends IdentifiableEntity,DAO extends IIdentifiableDao<T>> extends AnnotatableServiceBase<T,DAO>
implements IIdentifiableEntityService<T>{
@SuppressWarnings("unused")
protected
static final Logger logger = Logger.getLogger(IdentifiableServiceBase.class);
-
+ @Transactional(readOnly = true)
public Pager<Rights> getRights(T t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
Integer numberOfResults = dao.countRights(t);
return new DefaultPagerImpl<Rights>(pageNumber, numberOfResults, pageSize, results);
}
-
+
+ @Transactional(readOnly = true)
public Pager<IdentifiableSource> getSources(T t, Integer pageSize, Integer pageNumber, List<String> propertyPaths) {
Integer numberOfResults = dao.countSources(t);
return new DefaultPagerImpl<IdentifiableSource>(pageNumber, numberOfResults, pageSize, results);
}
+ @Transactional(readOnly = true)
protected List<T> findByTitle(IIdentifiableEntityServiceConfigurator config){
return ((IIdentifiableDao)dao).findByTitle(config.getTitleSearchString(),
config.getMatchMode(), 0, -1, null);
* @param title
* @return
*/
+ @Transactional(readOnly = true)
protected List<T> findCdmObjectsByTitle(String title){
return ((IIdentifiableDao)dao).findByTitle(title);
}
+ @Transactional(readOnly = true)
protected List<T> findCdmObjectsByTitle(String title, Class<T> clazz){
return ((IIdentifiableDao)dao).findByTitleAndClass(title, clazz);
}
+ @Transactional(readOnly = true)
protected List<T> findCdmObjectsByTitle(String title, CdmBase sessionObject){
return ((IIdentifiableDao)dao).findByTitle(title, sessionObject);
}
* (non-Javadoc)
* @see eu.etaxonomy.cdm.api.service.ICommonService#getSourcedObjectById(java.lang.String, java.lang.String)
*/
+ @Transactional(readOnly = true)
public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {
ISourceable result = null;
/* (non-Javadoc)
* @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#getUuidAndTitleCache()
*/
+ @Transactional(readOnly = true)
public List<UuidAndTitleCache<T>> getUuidAndTitleCache() {
return dao.getUuidAndTitleCache();
}\r
- \r
+
+ @Transactional(readOnly = true)\r
public Pager<T> findByTitle(Class<? extends T> clazz, String queryString,MatchMode matchmode, List<Criterion> criteria, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
Integer numberOfResults = dao.countByTitle(clazz, queryString, matchmode, criteria);\r
\r
return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);\r
}
+ @Transactional(readOnly = true)
public T find(LSID lsid) {
return dao.find(lsid);
}
+
+ @Transactional(readOnly = true)
+ public Pager<T> search(Class<? extends T> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
+ Integer numberOfResults = dao.count(clazz,queryString);
+
+ List<T> results = new ArrayList<T>();
+ if(numberOfResults > 0) { // no point checking again
+ results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths);
+ }
+
+ return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);
+ }
}\r
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
* @version 1.0
*/
@Service
-@Transactional(readOnly=true)
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class LocationServiceImpl extends ServiceBase<DefinedTermBase,IDefinedTermDao> implements ILocationService {
private static final Logger logger = Logger
.getLogger(LocationServiceImpl.class);
\r
return new DefaultPagerImpl<Rights>(pageNumber, numberOfResults, pageSize, results);\r
}\r
- \r
- public Pager<Media> search(Class<? extends Media> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.count(clazz,queryString);\r
- \r
- List<Media> results = new ArrayList<Media>();\r
- if(numberOfResults > 0) { // no point checking again\r
- results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
- }\r
- \r
- return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);\r
- }\r
\r
public void generateTitleCache() {\r
// TODO Auto-generated method stub\r
import java.util.Collection;\r
import java.util.List;\r
import java.util.Map;\r
-import java.util.Set;\r
import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.beans.factory.annotation.Qualifier;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;\r
-import eu.etaxonomy.cdm.api.service.config.INameServiceConfigurator;\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
import eu.etaxonomy.cdm.model.common.ReferencedEntityBase;\r
import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
-import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
-import eu.etaxonomy.cdm.model.name.TypeDesignationStatusBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.cdm.persistence.dao.common.IOrderedTermVocabularyDao;\r
import eu.etaxonomy.cdm.persistence.dao.common.IReferencedEntityDao;\r
import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;\r
\r
\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxonNameDao> implements INameService {\r
static private final Logger logger = Logger.getLogger(NameServiceImpl.class);\r
\r
\r
return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
}\r
- \r
- public Pager<TaxonNameBase> search(Class<? extends TaxonNameBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.count(clazz,queryString);\r
- \r
- List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
- if(numberOfResults > 0) { // no point checking again\r
- results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
- }\r
- \r
- return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
- }\r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.service.INameService#getUuidAndTitleCacheOfNames()\r
package eu.etaxonomy.cdm.api.service;\r
\r
import java.util.ArrayList;\r
-import java.util.Collection;\r
import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
-import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;\r
import eu.etaxonomy.cdm.model.media.Media;\r
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;\r
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;\r
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;\r
-import eu.etaxonomy.cdm.persistence.dao.occurrence.ICollectionDao;\r
import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
\r
/**\r
* @author a.babadshanjan\r
* @created 01.09.2008\r
*/\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObservationBase,IOccurrenceDao> implements IOccurrenceService {\r
\r
static private final Logger logger = Logger.getLogger(OccurrenceServiceImpl.class);\r
\r
return new DefaultPagerImpl<Media>(pageNumber, numberOfResults, pageSize, results);\r
}\r
-\r
- public Pager<SpecimenOrObservationBase> search(Class<? extends SpecimenOrObservationBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.count(clazz,queryString);\r
- \r
- List<SpecimenOrObservationBase> results = new ArrayList<SpecimenOrObservationBase>();\r
- if(numberOfResults > 0) { // no point checking again\r
- results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
- }\r
- \r
- return new DefaultPagerImpl<SpecimenOrObservationBase>(pageNumber, numberOfResults, pageSize, results);\r
- }\r
}\r
\r
package eu.etaxonomy.cdm.api.service;\r
\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
-import eu.etaxonomy.cdm.api.service.pager.Pager;\r
-import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
-import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;\r
-import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
\r
\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class ReferenceServiceImpl extends IdentifiableServiceBase<ReferenceBase,IReferenceDao> implements IReferenceService {\r
\r
static Logger logger = Logger.getLogger(ReferenceServiceImpl.class);\r
protected void setDao(IReferenceDao dao) {\r
this.dao = dao;\r
}\r
- \r
- public Pager<ReferenceBase> search(Class<? extends ReferenceBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.count(clazz,queryString);\r
- \r
- List<ReferenceBase> results = new ArrayList<ReferenceBase>();\r
- if(numberOfResults > 0) { // no point checking again\r
- results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
- }\r
- \r
- return new DefaultPagerImpl<ReferenceBase>(pageNumber, numberOfResults, pageSize, results);\r
- }\r
\r
public List<UuidAndTitleCache<ReferenceBase>> getUuidAndTitle() {\r
\r
import eu.etaxonomy.cdm.persistence.query.Grouping;\r
import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
\r
-@Transactional(readOnly=true)\r
public abstract class ServiceBase<T extends CdmBase, DAO extends ICdmEntityDao<T>> implements IService<T>, ApplicationContextAware {\r
private static final Logger logger = Logger.getLogger(ServiceBase.class);\r
\r
\r
protected DAO dao;\r
\r
- // @Transactional(readOnly = false)\r
+ @Transactional(readOnly = false)\r
public void clear() {\r
dao.clear();\r
}\r
\r
+ @Transactional(readOnly = true)\r
public int count(Class<? extends T> clazz) {\r
return dao.count(clazz);\r
}\r
return dao.delete(persistentObject);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public boolean exists(UUID uuid) {\r
return dao.exists(uuid);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public List<T> find(Set<UUID> uuidSet) {\r
return dao.findByUuid(uuidSet);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public T find(UUID uuid) {\r
return dao.findByUuid(uuid);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public Session getSession() {\r
return dao.getSession();\r
}\r
\r
+ @Transactional(readOnly = true)\r
public List<Object[]> group(Class<? extends T> clazz,Integer limit, Integer start, List<Grouping> groups, List<String> propertyPaths) {\r
return dao.group(clazz, limit, start, groups, propertyPaths);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public List<T> list(Class<? extends T> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths){\r
return dao.list(type,limit, start, orderHints,propertyPaths);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public T load(UUID uuid) {\r
return dao.load(uuid);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public T load(UUID uuid, List<String> propertyPaths){\r
return dao.load(uuid, propertyPaths);\r
}\r
return dao.merge(newInstance);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public Pager<T> page(Class<? extends T> type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths){\r
Integer numberOfResults = dao.count(type);\r
List<T> results = new ArrayList<T>();\r
return new DefaultPagerImpl<T>(pageNumber, numberOfResults, pageSize, results);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public UUID refresh(T persistentObject) {\r
return dao.refresh(persistentObject);\r
}\r
* it seems a bit incongruous that we use an ORM to hide the fact that there is a \r
* database, then expose a method that talks about "rows" . . .\r
*/\r
+ @Transactional(readOnly = true)\r
public List<T> rows(String tableName, int limit, int start) {\r
return dao.rows(tableName, limit, start);\r
}\r
return dao.update(transientObject);\r
}\r
\r
+ @Transactional(readOnly = true)\r
public List<T> list(T example, Set<String> includeProperties, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
return dao.list(example, includeProperties, limit, start, orderHints, propertyPaths);\r
}\r
package eu.etaxonomy.cdm.api.service;\r
\r
import org.apache.log4j.Logger;\r
-import org.springframework.beans.factory.annotation.Qualifier;\r
import org.springframework.stereotype.Service;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;\r
\r
@Service\r
-//@Service("mainService")\r
@Transactional(readOnly = true)\r
public class ServiceImpl extends ServiceBase<CdmBase, ICdmEntityDao<CdmBase>> implements IService<CdmBase> {\r
@SuppressWarnings("unused")\r
import org.apache.log4j.Logger;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;\r
\r
\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDao> implements ITaxonService{\r
private static final Logger logger = Logger.getLogger(TaxonServiceImpl.class);\r
\r
}\r
return heterotypicSynonymyGroups;\r
}\r
-\r
- public Pager<TaxonBase> search(Class<? extends TaxonBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
- Integer numberOfResults = dao.count(clazz,queryString);\r
- \r
- List<TaxonBase> results = new ArrayList<TaxonBase>();\r
- if(numberOfResults > 0) { // no point checking again\r
- results = dao.search(clazz,queryString, pageSize, pageNumber, orderHints, propertyPaths); \r
- }\r
- \r
- return new DefaultPagerImpl<TaxonBase>(pageNumber, numberOfResults, pageSize, results);\r
- }\r
-\r
\r
public Pager<IdentifiableEntity> findTaxaAndNames(ITaxonServiceConfigurator configurator) {\r
\r
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
* @version 1.0
*/
@Service
-@Transactional(readOnly = true)
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class TaxonTreeServiceImpl extends IdentifiableServiceBase<TaxonomicTree, ITaxonomicTreeDao>
implements ITaxonTreeService {
private static final Logger logger = Logger
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import eu.etaxonomy.cdm.api.service.pager.Pager;
import eu.etaxonomy.cdm.persistence.query.OrderHint;
@Service
-@Transactional(readOnly = true)
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class TermServiceImpl extends IdentifiableServiceBase<DefinedTermBase,IDefinedTermDao> implements ITermService{
private static final Logger logger = Logger.getLogger(TermServiceImpl.class);
private ILanguageStringDao languageStringDao;
import org.springframework.security.userdetails.UserDetails;\r
import org.springframework.security.userdetails.UsernameNotFoundException;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
import org.springframework.util.Assert;\r
\r
import eu.etaxonomy.cdm.persistence.dao.common.IUserDao;\r
\r
@Service\r
-@Transactional(readOnly=true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class UserService extends ServiceBase<User,IUserDao> implements IUserService {\r
\r
protected IGroupDao groupDao;\r
import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort;
import eu.etaxonomy.cdm.persistence.dao.common.IVersionableDao;
-@Transactional(readOnly = true)
public abstract class VersionableServiceBase<T extends VersionableEntity, DAO extends IVersionableDao<T>> extends ServiceBase<T,DAO> implements IVersionableService<T> {
+ @Transactional(readOnly = true)
public Pager<AuditEventRecord<T>> pageAuditEvents(T t, Integer pageSize, Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
Integer numberOfResults = dao.countAuditEvents(t, sort);
return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
}
+ @Transactional(readOnly = true)
public AuditEventRecord<T> getNextAuditEvent(T t) {
return dao.getNextAuditEvent(t);
}
+ @Transactional(readOnly = true)
public AuditEventRecord<T> getPreviousAuditEvent(T t) {
return dao.getPreviousAuditEvent(t);
}
+ @Transactional(readOnly = true)
public Pager<AuditEventRecord<T>> pageAuditEvents(Class<? extends T> clazz,AuditEvent from,AuditEvent to, List<AuditCriterion> criteria, Integer pageSize, Integer pageNumber, AuditEventSort sort,List<String> propertyPaths) {
Integer numberOfResults = dao.countAuditEvents(clazz, from, to, criteria);
\r
import java.util.ArrayList;\r
import java.util.List;\r
-import java.util.Set;\r
import java.util.UUID;\r
\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
-import eu.etaxonomy.cdm.model.agent.Address;\r
import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
import eu.etaxonomy.cdm.model.common.Language;\r
import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
\r
@Service\r
-@Transactional(readOnly = true)\r
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class VocabularyServiceImpl extends IdentifiableServiceBase<TermVocabulary,ITermVocabularyDao> implements IVocabularyService {\r
\r
@Autowired\r