1 package org.weda.store.impl; 2 3 import java.util.Map; 4 import org.apache.commons.logging.Log; 5 import org.apache.commons.logging.LogFactory; 6 import org.weda.action.ActionRegistry; 7 import org.weda.message.Messages; 8 import org.weda.message.MessagesRegistry; 9 import org.weda.property.PropertyValue; 10 import org.weda.cache.CacheEntity; 11 import org.weda.converter.ValueTypeConverter; 12 import org.weda.store.ObjectSourceException; 13 import org.weda.store.ObjectSourceRegistryException; 14 import org.weda.store.DetailObjectSourceInfo; 15 import org.weda.cache.CacheManager; 16 import org.weda.store.ObjectSource; 17 import org.weda.store.ObjectSourceRegistry; 18 import org.weda.property.ObjectDescriptorRegistry; 19 import org.weda.store.ObjectStore; 20 import org.weda.message.impl.MessagesSubset; 21 22 /**Цель: предотавление доступа к {@link tim.docarch.service.DataSource}. 23 * 24 * @author Mikhail Titov 25 */ 26 public class ObjectSourceRegistryImpl implements ObjectSourceRegistry{ 27 private final static Log log = 28 LogFactory.getLog(ObjectSourceRegistryImpl.class); 29 private CacheManager cacheManager; 30 private Map<String, ObjectSource> config; 31 32 public void init() throws ObjectSourceRegistryException { 33 try{ 34 for (ObjectSource dataSource: config.values()){ 35 dataSource.init(); 36 if (dataSource.getDetailInfos()!=null){ 37 for (DetailObjectSourceInfo detailInfo: 38 dataSource.getDetailInfos()) 39 { 40 if (!config.containsKey(detailInfo.getName())) 41 throw new ObjectSourceRegistryException( 42 String.format( 43 "Can't resolve detail dataSource (%2$s) " + 44 "for master dataSource (%1$s). " + 45 "DataSource (%2$s) not found." 46 , dataSource.getName() 47 , detailInfo.getName())); 48 } 49 } 50 } 51 52 }catch(ObjectSourceException e){ 53 throw new ObjectSourceRegistryException( 54 "Error in initializing dataSourceRegistry service" 55 , e); 56 } 57 } 58 /**Метод возвращает ObjectSource по его имени. 59 */ 60 public ObjectSource getObjectSource(String name) throws Exception { 61 ObjectSourceCacheEntity entity= 62 (ObjectSourceCacheEntity) 63 cacheManager.getCacheService().get(name); 64 ObjectSource objectSource=null; 65 if (entity==null){ 66 String objectSourceName = name; 67 int pos = name.indexOf('#'); 68 if (pos >= 0){ 69 objectSourceName = name.substring(0, pos); 70 if (pos+1 == name.length()) 71 throw new ObjectSourceRegistryException( 72 String.format( 73 "Additional identificator for object source " + 74 "can not be empty. Object source name is (%s)" 75 , objectSourceName)); 76 } 77 objectSource = config.get(objectSourceName); 78 if (objectSource==null) 79 throw new ObjectSourceRegistryException( 80 String.format( 81 "Registry doesn't contains object source (%s)" 82 , objectSourceName)); 83 objectSource = (ObjectSource)objectSource.clone(); 84 objectSource.init(); 85 cacheManager.getCacheService() 86 .setCacheEntity( 87 name, new ObjectSourceCacheEntity(objectSource)); 88 }else 89 objectSource = entity.getObjectSource(); 90 return objectSource; 91 } 92 93 public void setCacheManager(CacheManager cacheManager) { 94 this.cacheManager = cacheManager; 95 } 96 97 public void setConfig(Map<String, ObjectSource> config) throws Exception { 98 this.config = config; 99 } 100 101 private class ObjectSourceCacheEntity implements CacheEntity { 102 private ObjectSource dataSource; 103 104 public ObjectSourceCacheEntity(ObjectSource dataSource){ 105 this.dataSource=dataSource; 106 } 107 108 public void release() { 109 } 110 111 public Object getValue() { 112 return dataSource; 113 } 114 115 public ObjectSource getObjectSource(){ 116 return dataSource; 117 } 118 119 } 120 121 }