/** * */ package org.ihtsdo.otf.refset.service; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.ihtsdo.otf.refset.domain.Member; import org.ihtsdo.otf.refset.domain.Refset; import org.ihtsdo.otf.refset.exception.RefsetServiceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; import org.springframework.util.Assert; import org.supercsv.cellprocessor.ParseBool; import org.supercsv.cellprocessor.constraint.NotNull; import org.supercsv.cellprocessor.ift.CellProcessor; import org.supercsv.io.dozer.CsvDozerBeanReader; import org.supercsv.io.dozer.ICsvDozerBeanReader; import org.supercsv.prefs.CsvPreference; /** * @author Episteme Partners * */ public class RefsetBrowseServiceStubData { private static final Logger LOGGER = LoggerFactory.getLogger(RefsetBrowseServiceStubData.class); private static final String REFSET_LIST = "refset"; private static final String MEMBER_LIST = "members"; private static Map<String, Integer> refsetIdsAndMembers = new HashMap<String, Integer>() ; private static final String[] REFSET_MAPPING = new String[] {"uuid", "description", "created", "createdBy", "languageCode", "type", "publishedDate", "effectiveTime", "moduleId", "published"}; private static String[] MEMBER_MAPPING = new String[] {"referencedComponentId", "effectiveTime", "active", "moduleId"}; static { /** * 700043003 450973005 450971007 703870008 447566000 447565001 700043013 450973015 450971017 703870018 447566010 447565011 700043023 450973025 450971027 703870028 447566020 447565021 700043033 450973035 450971037 703870038 447566030 447565031 700043043 450973045 450971047 703870048 447566040 447565041 700043053 450973055 450971057 703870058 447566050 447565051 700043063 450973065 450971067 703870068 447566060 447565061 700043073 450973075 450971077 703870078 447566070 447565071 700043083 450973085 450971087 703870088 447566080 447565081 700043093 450973095 450971097 703870098 447566090 */ refsetIdsAndMembers.put("700043003", 300); refsetIdsAndMembers.put("450973005", 600); refsetIdsAndMembers.put("450971007", 900); refsetIdsAndMembers.put("703870008", 1200); refsetIdsAndMembers.put("447566000", 1500); refsetIdsAndMembers.put("447565001", 1800); refsetIdsAndMembers.put("700043013", 2100); refsetIdsAndMembers.put("450973015", 2400); refsetIdsAndMembers.put("450971017", 2700); refsetIdsAndMembers.put("703870018", 3000); refsetIdsAndMembers.put("447566010", 3300); refsetIdsAndMembers.put("447565011", 3600); refsetIdsAndMembers.put("700043023", 300); refsetIdsAndMembers.put("450973025", 600); refsetIdsAndMembers.put("450971027", 900); refsetIdsAndMembers.put("703870028", 1200); refsetIdsAndMembers.put("447566020", 1500); refsetIdsAndMembers.put("447565021", 1800); refsetIdsAndMembers.put("700043033", 2100); refsetIdsAndMembers.put("450973035", 2400); refsetIdsAndMembers.put("450971037", 2700); refsetIdsAndMembers.put("703870038", 3000); refsetIdsAndMembers.put("447566030", 3300); refsetIdsAndMembers.put("447565031", 3600); refsetIdsAndMembers.put("700043043", 2100); refsetIdsAndMembers.put("450973045", 2400); refsetIdsAndMembers.put("450971047", 2700); refsetIdsAndMembers.put("703870048", 3000); refsetIdsAndMembers.put("447566040", 3300); refsetIdsAndMembers.put("447565041", 3600); refsetIdsAndMembers.put("700043053", 2100); refsetIdsAndMembers.put("450973055", 2400); refsetIdsAndMembers.put("450971057", 2700); refsetIdsAndMembers.put("703870058", 3000); refsetIdsAndMembers.put("447566050", 3300); refsetIdsAndMembers.put("447565051", 3600); refsetIdsAndMembers.put("700043063", 2100); refsetIdsAndMembers.put("450973065", 2400); refsetIdsAndMembers.put("450971067", 2700); refsetIdsAndMembers.put("703870068", 3000); refsetIdsAndMembers.put("447566060", 3300); refsetIdsAndMembers.put("447565061", 3600); refsetIdsAndMembers.put("700043073", 2100); refsetIdsAndMembers.put("450973075", 2400); refsetIdsAndMembers.put("450971077", 2700); refsetIdsAndMembers.put("703870078", 3000); refsetIdsAndMembers.put("447566070", 3300); refsetIdsAndMembers.put("447565071", 3600); refsetIdsAndMembers.put("700043083", 2100); refsetIdsAndMembers.put("450973085", 2400); refsetIdsAndMembers.put("450971087", 2700); refsetIdsAndMembers.put("703870088", 3000); refsetIdsAndMembers.put("447566080", 3300); refsetIdsAndMembers.put("447565081", 3600); refsetIdsAndMembers.put("700043093", 2100); refsetIdsAndMembers.put("450973095", 2400); refsetIdsAndMembers.put("450971097", 2700); refsetIdsAndMembers.put("703870098", 3000); refsetIdsAndMembers.put("447566090", 3300); refsetIdsAndMembers.put("447565091", 3600); } private Map<String, Resource> csvs; /**Generate a dummy list of {@link Refset} * @return * @throws RefsetServiceException */ public List<Refset> getRefSets() throws RefsetServiceException { Assert.notNull(csvs); Resource csv = csvs.get(REFSET_LIST); Assert.notNull(csv); List<Refset> refsets = new ArrayList<Refset>(); ICsvDozerBeanReader s = null; try { s = new CsvDozerBeanReader(new FileReader(csv.getFile()), CsvPreference.STANDARD_PREFERENCE); s.getHeader(true); // ignore the header s.configureBeanMapping(Refset.class, REFSET_MAPPING); Refset r = null; while( (r = s.read(Refset.class, getRefSetProcessors())) != null ) { refsets.add(r); } } catch (Exception e) { // TODO Auto-generated catch block LOGGER.error(String.format("Error while loading refset data %s", e.getMessage())); throw new RefsetServiceException(e.getCause()); } finally { if (s != null) { try { s.close(); } catch (IOException e) { // TODO Auto-generated catch block LOGGER.error(String.format("Error closing IO resource ")); } } } return Collections.unmodifiableList(refsets); } /**Generate a dummy list of {@link Refset} * @return * @throws RefsetServiceException */ public Refset getRefSet(String refSetId) throws RefsetServiceException { List<Refset> refSets = getRefSets(); Refset result = null; for (Refset refset : refSets) { if(refset.getUuid().equalsIgnoreCase(refSetId)) { result = refset; break; } } if( result == null ) { throw new RefsetServiceException("Invalid refsetId"); } Assert.notNull(csvs); Resource csv = csvs.get(MEMBER_LIST); Assert.notNull(csv); List<Member> members = new ArrayList<Member>(); ICsvDozerBeanReader s = null; try { s = new CsvDozerBeanReader(new FileReader(csv.getFile()), CsvPreference.STANDARD_PREFERENCE); s.getHeader(true); // ignore the header s.configureBeanMapping(Member.class, MEMBER_MAPPING); Member m = null; while( (m = s.read(Member.class, getMemberProcessors())) != null ) { m.setUuid(UUID.randomUUID().toString()); members.add(m); } } catch (Exception e) { // TODO Auto-generated catch block LOGGER.error(String.format("Error while loading member data %s", e.getMessage())); throw new RefsetServiceException(e.getCause()); } finally { if (s != null) { try { s.close(); } catch (IOException e) { // TODO Auto-generated catch block LOGGER.error(String.format("Error closing IO resource ")); } } } List<Member> ms = members.subList(refsetIdsAndMembers.get(result.getUuid()) - 300, refsetIdsAndMembers.get(result.getUuid())); result.setMembers(Collections.unmodifiableList(ms)); return result; } private static CellProcessor[] getRefSetProcessors() { /**String[] columns = new String[] {"id", "description", "created", "createdBy", "languageCode", "type", "publishedDate", "effectiveTime", "moduleId", "published"};*/ final CellProcessor[] processors = new CellProcessor[] { new NotNull(), // id new NotNull(), // description new NotNull(new ParseJodaTime("yyyyMMdd")), // publishedDate new NotNull(), // createdBy new NotNull(), // languageCode new NotNull(), // type new NotNull(new ParseJodaTime("yyyyMMdd")), // publishedDate new NotNull(new ParseJodaTime("yyyyMMdd")), // publishedDate new NotNull(), // moduleId new NotNull(new ParseBool()), // published }; return processors; } private static CellProcessor[] getMemberProcessors() { /** private static String[] MEMBER_MAPPING = new String[] {"referenceComponentId", "effectiveTime", "active", "moduleId"}; */ final CellProcessor[] processors = new CellProcessor[] { new NotNull(), // referenceComponentId new NotNull(new ParseJodaTime("yyyyMMdd")), // effectiveTime new NotNull(new ParseBool()), // active new NotNull(), // moduleId }; return processors; } /** * @param csvs the csvs to set */ public void setCsv(Map<String, Resource> csvs) { this.csvs = csvs; } }