Changeset 5377
- Timestamp:
- 06/20/14 13:38:26 (10 years ago)
- Location:
- VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main
- Files:
-
- 2 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/VirtualCollectionRegistry.java
r5376 r5377 1 1 package eu.clarin.cmdi.virtualcollectionregistry; 2 2 3 import eu.clarin.cmdi.virtualcollectionregistry.service.impl.VirtualCollectionValidatorImpl; 3 import eu.clarin.cmdi.oai.provider.impl.OAIProvider; 4 import eu.clarin.cmdi.virtualcollectionregistry.model.User; 5 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection; 6 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollectionList; 7 import eu.clarin.cmdi.virtualcollectionregistry.pid.PersistentIdentifier; 8 import eu.clarin.cmdi.virtualcollectionregistry.pid.PersistentIdentifierProvider; 9 import eu.clarin.cmdi.virtualcollectionregistry.query.ParsedQuery; 10 import eu.clarin.cmdi.virtualcollectionregistry.service.VirtualCollectionValidator; 11 import eu.clarin.cmdi.virtualcollectionregistry.service.VirtualCollectionValidatorFactory; 4 12 import java.security.Principal; 5 13 import java.util.Date; … … 8 16 import java.util.TimerTask; 9 17 import java.util.concurrent.atomic.AtomicBoolean; 10 11 18 import javax.persistence.EntityManager; 12 19 import javax.persistence.EntityTransaction; … … 19 26 import javax.persistence.criteria.Predicate; 20 27 import javax.persistence.criteria.Root; 21 22 28 import org.slf4j.Logger; 23 29 import org.slf4j.LoggerFactory; 24 25 import eu.clarin.cmdi.oai.provider.impl.OAIProvider;26 import eu.clarin.cmdi.virtualcollectionregistry.pid.PersistentIdentifier;27 import eu.clarin.cmdi.virtualcollectionregistry.pid.PersistentIdentifierProvider;28 import eu.clarin.cmdi.virtualcollectionregistry.model.User;29 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection;30 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollectionList;31 import eu.clarin.cmdi.virtualcollectionregistry.query.ParsedQuery;32 30 import org.springframework.beans.factory.DisposableBean; 33 31 import org.springframework.beans.factory.InitializingBean; … … 44 42 @Autowired 45 43 private OAIProvider oaiProvider; 46 44 @Autowired 45 private VirtualCollectionValidatorFactory validatorFactory; 46 47 47 private static final Logger logger = 48 48 LoggerFactory.getLogger(VirtualCollectionRegistry.class); … … 82 82 logger.info("Stopping Virtual Collection Registry maintenance schedule"); 83 83 timer.cancel(); 84 84 85 85 logger.info("Shutting down OAI provider"); 86 86 oaiProvider.shutdown(); … … 98 98 logger.debug("creating virtual collection"); 99 99 100 VirtualCollectionValidatorImpl validator = 101 new VirtualCollectionValidatorImpl(); 100 VirtualCollectionValidator validator = validatorFactory.createValidator(); 102 101 validator.validate(vc); 103 102 try { … … 138 137 logger.debug("updating virtual collection (id={})", id); 139 138 140 VirtualCollectionValidatorImpl validator = 141 new VirtualCollectionValidatorImpl(); 139 VirtualCollectionValidator validator = validatorFactory.createValidator(); 142 140 validator.validate(vc); 143 141 … … 160 158 principal.getName() + "\""); 161 159 } 162 160 163 161 // update virtual collection 164 162 c.updateFrom(vc); … … 299 297 boolean update = false; 300 298 switch (state) { 301 case PRIVATE:299 case PRIVATE: 302 300 update = vc.getState() != state; 303 break;304 case PUBLIC_PENDING:301 break; 302 case PUBLIC_PENDING: 305 303 update = vc.getState() != VirtualCollection.State.PUBLIC; 306 break;304 break; 307 305 } 308 306 if (update) { … … 320 318 } 321 319 } 322 320 323 321 /** 324 * 322 * 325 323 * @param id identifier of the virtual collection to retrieve 326 324 * @return the identified virtual collection, never null … … 514 512 } 515 513 } 516 514 517 515 public List<VirtualCollection> getVirtualCollections( 518 516 int first, int count, QueryOptions options) … … 561 559 // (for now) purge deleted collection roughly after 30 seconds 562 560 final Date nowDatePurge = new Date(now - 30*1000); 563 561 564 562 EntityManager em = datastore.getEntityManager(); 565 563 try { … … 570 568 TypedQuery<VirtualCollection> q = 571 569 em.createNamedQuery("VirtualCollection.findAllByState", 572 570 VirtualCollection.class); 573 571 q.setParameter("state", VirtualCollection.State.PUBLIC_PENDING); 574 572 q.setParameter("date", nowDateAlloc); … … 587 585 } 588 586 em.getTransaction().commit(); 589 587 590 588 /* 591 589 * delayed purging of deleted virtual collections -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/service/impl/VirtualCollectionValidatorImpl.java
r5376 r5377 11 11 import java.util.HashSet; 12 12 import java.util.Set; 13 import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE; 14 import org.springframework.beans.factory.config.ServiceLocatorFactoryBean; 15 import org.springframework.context.annotation.Scope; 16 import org.springframework.stereotype.Service; 13 17 14 //TODO: @Service 15 //TODO: @Scope(value = SCOPE_PROTOTYPE) 18 /** 19 * A virtual collection validator. Scoped prototype, because it carries state. 20 * Use a factory (e.g. dynamically generated using 21 * {@link ServiceLocatorFactoryBean}) to get new instances within a singleton. 22 * 23 * @author twagoo 24 */ 25 @Service 26 @Scope(value = SCOPE_PROTOTYPE) 16 27 public class VirtualCollectionValidatorImpl implements VirtualCollectionValidator { 17 28 private final Set<Creator> uniqueCreators = new HashSet<Creator>(16); … … 33 44 "collection has an empty name"); 34 45 } 35 46 36 47 for (Creator creator : vc.getCreators()) { 37 48 if (uniqueCreators.contains(creator)) { … … 43 54 44 55 switch (vc.getType()) { 45 case EXTENSIONAL:46 if (vc.getResources().isEmpty()) {47 throw new VirtualCollectionRegistryUsageException(56 case EXTENSIONAL: 57 if (vc.getResources().isEmpty()) { 58 throw new VirtualCollectionRegistryUsageException( 48 59 "extensional collection must contain on or " + 49 60 "more resources"); 50 } 51 if (vc.getGeneratedBy() != null) { 52 throw new VirtualCollectionRegistryUsageException( 53 "extensional collection must not contain GeneratedBy"); 54 } 55 break; 56 case INTENSIONAL: 57 final GeneratedBy generatedBy = vc.getGeneratedBy(); 58 if (generatedBy == null) { 59 throw new VirtualCollectionRegistryUsageException( 60 "intensional collections needs GeneratedBy"); 61 } 62 if (generatedBy.getDescription() == null) { 63 throw new VirtualCollectionRegistryUsageException( 64 "GeneratedBy has empty description"); 65 } 66 final GeneratedByQuery query = generatedBy.getQuery(); 67 if (query != null) { 68 if (query.getProfile() == null) { 61 } 62 if (vc.getGeneratedBy() != null) { 69 63 throw new VirtualCollectionRegistryUsageException( 70 " profile of GeneratedBy.Query is empty");64 "extensional collection must not contain GeneratedBy"); 71 65 } 72 if (query.getValue() == null) { 66 break; 67 case INTENSIONAL: 68 final GeneratedBy generatedBy = vc.getGeneratedBy(); 69 if (generatedBy == null) { 73 70 throw new VirtualCollectionRegistryUsageException( 74 " query of GeneratedBy.Query is empty");71 "intensional collections needs GeneratedBy"); 75 72 } 76 } 73 if (generatedBy.getDescription() == null) { 74 throw new VirtualCollectionRegistryUsageException( 75 "GeneratedBy has empty description"); 76 } 77 final GeneratedByQuery query = generatedBy.getQuery(); 78 if (query != null) { 79 if (query.getProfile() == null) { 80 throw new VirtualCollectionRegistryUsageException( 81 "profile of GeneratedBy.Query is empty"); 82 } 83 if (query.getValue() == null) { 84 throw new VirtualCollectionRegistryUsageException( 85 "query of GeneratedBy.Query is empty"); 86 } 87 } 77 88 } 78 89 -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/webapp/WEB-INF/applicationContext.xml
r5374 r5377 16 16 --> 17 17 <context:component-scan base-package="eu.clarin.cmdi.virtualcollectionregistry" /> 18 18 19 <!-- 20 Will generate a factory for virtual collection validator, based on the 21 prototype bean for the VirtualCollectionValidator implementation 22 see http://docs.spring.io/spring/docs/4.0.5.RELEASE/javadoc-api/org/springframework/beans/factory/config/ServiceLocatorFactoryBean.html 23 --> 24 <bean id="validatorFactory" 25 class="org.springframework.beans.factory.config.ServiceLocatorFactoryBean"> 26 <property name="serviceLocatorInterface" value="eu.clarin.cmdi.virtualcollectionregistry.service.VirtualCollectionValidatorFactory"/> 27 </bean> 28 19 29 </beans>
Note: See TracChangeset
for help on using the changeset viewer.