package jp.aegif.nemaki.cmis.factory.info; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import jp.aegif.nemaki.util.PropertyManager; import jp.aegif.nemaki.util.YamlManager; import jp.aegif.nemaki.util.constant.PropertyKey; public class RepositoryInfoMap { private Capabilities capabilities; private AclCapabilities aclCapabilities; private PropertyManager propertyManager; private Map<String, RepositoryInfo> map = new HashMap<String, RepositoryInfo>(); private String superUsersId; public void init(){ loadRepositoriesSetting(); } public void add(RepositoryInfo info){ map.put(info.getId(), info); } public RepositoryInfo get(String repositoryId){ return map.get(repositoryId); } public boolean contains(String repositoryId){ return get(repositoryId) != null; } public Set<String> keys(){ return map.keySet(); } public String getArchiveId(String repositoryId){ return map.get(repositoryId).getArchiveId(); } public RepositoryInfo getSuperUsers(){ return map.get(this.superUsersId); } private void loadRepositoriesSetting(){ String file = propertyManager.readValue(PropertyKey.REPOSITORY_DEFINITION); YamlManager ymlMgr = new YamlManager(file); Map<String, Object> data = (Map<String, Object>)ymlMgr.loadYml(); Map<String, String> defaultSetting = (Map<String, String>)data.get("default"); List<Map<String, String>> repositoriesSetting = (List<Map<String, String>>)data.get("repositories"); for(Map<String, String> repStg : repositoriesSetting){ RepositoryInfo info = buildDefaultInfo(defaultSetting); modifyInfo(repStg, info); map.put(info.getId(), info); } this.superUsersId = data.get("super.users").toString(); } private void modifyInfo(Map<String, String> setting, RepositoryInfo info){ for(String key :setting.keySet()){ String val = String.valueOf(setting.get(key)); //TODO hard-coding info.setCmisVersionSupported("1.1"); info.setCapabilities(capabilities); info.setAclCapabilities(aclCapabilities); if(key.equals("id")){ info.setId(val); }else if(key.equals("name")){ info.setName(val); }else if(key.equals("description")){ info.setDescription(val); }else if(key.equals("root")){ info.setRootFolder(val); }else if(key.equals("principal.anonymous")){ info.setPrincipalAnonymous(val); }else if(key.equals("principal.anyone")){ info.setPrincipalAnyone(val); }else if(key.equals("thinClientUri")){ info.setThinClientUri(val); }else if(key.equals("vendor")){ info.setVendorName(val); }else if(key.equals("product.name")){ info.setProductName(val); }else if(key.equals("product.version")){ info.setProductVersion(val); }else if(key.equals("nameSpace")){ info.setNameSpace(val); }else if(key.equals("archive")){ info.setArchiveId(val); } } } private RepositoryInfo buildDefaultInfo(Map<String, String> setting){ RepositoryInfo info = new RepositoryInfo(); modifyInfo(setting, info); return info; } public void setCapabilities(Capabilities capabilities) { this.capabilities = capabilities; } public void setAclCapabilities(AclCapabilities aclCapabilities) { this.aclCapabilities = aclCapabilities; } public void setPropertyManager(PropertyManager propertyManager) { this.propertyManager = propertyManager; } }