Java tutorial
/* * Copyright: (c) 2004-2010 Mayo Foundation for Medical Education and * Research (MFMER). All rights reserved. MAYO, MAYO CLINIC, and the * triple-shield Mayo logo are trademarks and service marks of MFMER. * * Except as contained in the copyright notice above, or as used to identify * MFMER as the author of this software, the trade names, trademarks, service * marks, or product names of the copyright holder shall not be used in * advertising, promotion or otherwise in connection with this software without * prior written authorization of the copyright holder. * * Licensed under the Eclipse Public License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * */ package org.lexevs.dao.database.operation.root; import java.util.ArrayList; import java.util.List; import org.LexGrid.LexBIG.DataModel.Core.ConceptReference; import org.LexGrid.LexBIG.Exceptions.LBParameterException; import org.LexGrid.relations.AssociationPredicate; import org.LexGrid.relations.AssociationSource; import org.LexGrid.relations.AssociationTarget; import org.apache.commons.collections.CollectionUtils; import org.lexevs.dao.database.operation.LexEvsDatabaseOperations.RootOrTail; import org.lexevs.dao.database.operation.LexEvsDatabaseOperations.TraverseAssociations; import org.lexevs.dao.database.service.DatabaseServiceManager; import org.lexevs.system.service.SystemResourceService; import org.springframework.util.Assert; public class DefaultRootBuilder implements RootBuilder { private static String MULTI_ASSN_ROOT_PREDICATE_NAME = "-multi-assn-@-root-"; private static String ROOT_NODE = "@"; private static String TAIL_NODE = "@@"; private DatabaseServiceManager databaseServiceManager; private SystemResourceService systemResourceService; @Override public void addRootRelationNode(String codingSchemeUri, String codingSchemeVersion, List<String> associationNames, String relationContainerName, RootOrTail rootOrTail, TraverseAssociations traverse) { Assert.notNull(relationContainerName); List<ConceptReference> refs; if (CollectionUtils.isEmpty(associationNames)) { associationNames = this.databaseServiceManager.getCodedNodeGraphService() .getAssociationPredicateNamesForCodingScheme(codingSchemeUri, codingSchemeVersion, relationContainerName); } if (rootOrTail.equals(RootOrTail.ROOT)) { refs = databaseServiceManager.getCodedNodeGraphService().getRootConceptReferences(codingSchemeUri, codingSchemeVersion, relationContainerName, associationNames, null, null, null, traverse, null, 0, -1); } else { refs = databaseServiceManager.getCodedNodeGraphService().getTailConceptReferences(codingSchemeUri, codingSchemeVersion, relationContainerName, associationNames, null, null, null, traverse, null, 0, -1); } if (CollectionUtils.isNotEmpty(refs)) { if (CollectionUtils.isEmpty(associationNames)) { associationNames = databaseServiceManager.getCodedNodeGraphService() .getAssociationPredicateNamesForCodingScheme(codingSchemeUri, codingSchemeVersion, relationContainerName); } } else { return; } if (associationNames.size() > 1) { databaseServiceManager.getAssociationService().insertAssociationPredicate(codingSchemeUri, codingSchemeVersion, relationContainerName, createMultiAssociationPredicate()); } List<AssociationSource> sources = buildAssociationSources(codingSchemeUri, codingSchemeVersion, refs, rootOrTail); for (AssociationSource source : sources) { databaseServiceManager.getAssociationService().insertAssociationSource(codingSchemeUri, codingSchemeVersion, relationContainerName, getAssociationPredicateName(associationNames), source); } } private String getAssociationPredicateName(List<String> associations) { Assert.notEmpty(associations); if (associations.size() > 1) { return MULTI_ASSN_ROOT_PREDICATE_NAME; } else { return associations.get(0); } } private AssociationPredicate createMultiAssociationPredicate() { AssociationPredicate predicate = new AssociationPredicate(); predicate.setAssociationName(MULTI_ASSN_ROOT_PREDICATE_NAME); return predicate; } private AssociationTarget buildAssociationTarget(ConceptReference ref) { AssociationTarget target = new AssociationTarget(); target.setTargetEntityCode(ref.getCode()); target.setTargetEntityCodeNamespace(ref.getCodeNamespace()); return target; } private AssociationSource buildAssociationSource(ConceptReference ref) { AssociationSource source = new AssociationSource(); source.setSourceEntityCode(ref.getCode()); source.setSourceEntityCodeNamespace(ref.getCodeNamespace()); return source; } private List<AssociationSource> buildAssociationSources(String codingSchemeUri, String codingSchemeVersion, List<ConceptReference> refs, RootOrTail rootOrTail) { List<AssociationSource> returnList = new ArrayList<AssociationSource>(); String namespace; try { namespace = this.systemResourceService .getInternalCodingSchemeNameForUserCodingSchemeName(codingSchemeUri, codingSchemeVersion); } catch (LBParameterException e) { throw new RuntimeException(e); } if (rootOrTail.equals(RootOrTail.ROOT)) { AssociationSource source = new AssociationSource(); source.setSourceEntityCode(ROOT_NODE); source.setSourceEntityCodeNamespace(namespace); for (ConceptReference ref : refs) { source.addTarget(this.buildAssociationTarget(ref)); } returnList.add(source); } else { for (ConceptReference ref : refs) { AssociationSource source = this.buildAssociationSource(ref); AssociationTarget target = new AssociationTarget(); target.setTargetEntityCode(TAIL_NODE); target.setTargetEntityCodeNamespace(namespace); source.addTarget(target); returnList.add(source); } } return returnList; } public DatabaseServiceManager getDatabaseServiceManager() { return databaseServiceManager; } public void setDatabaseServiceManager(DatabaseServiceManager databaseServiceManager) { this.databaseServiceManager = databaseServiceManager; } public void setSystemResourceService(SystemResourceService systemResourceService) { this.systemResourceService = systemResourceService; } public SystemResourceService getSystemResourceService() { return systemResourceService; } }