All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.ctakes.ytex.umls.dao.UMLSDaoImpl Maven / Gradle / Ivy

The newest version!
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.ctakes.ytex.umls.dao;

import org.apache.ctakes.ytex.umls.model.UmlsAuiFirstWord;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;


public class UMLSDaoImpl implements UMLSDao {

	public static final String INCLUDE_REL[] = new String[] { "PAR" };
	public static final String EXCLUDE_RELA[] = new String[] { "inverse_isa" };

	SessionFactory sessionFactory;
	private JdbcTemplate t;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public void setDataSource(DataSource ds) {
		t = new JdbcTemplate(ds);
	}

	public DataSource getDataSource() {
		return t.getDataSource();
	}

	// /*
	// * (non-Javadoc)
	// *
	// * @see org.apache.ctakes.ytex.umls.dao.UMLSDao#getRelationsForSABs(java.util.Set)
	// */
	// public List getRelationsForSABs(String[] sabs) {
	// Query q = sessionFactory.getCurrentSession().getNamedQuery(
	// "getRelationsForSABs");
	// q.setParameterList("sabs", sabs);
	// // q.setParameterList("rel", INCLUDE_REL);
	// // q.setParameterList("relaExclude", EXCLUDE_RELA);
	// return (List) q.list();
	// }

	// /*
	// * (non-Javadoc)
	// *
	// * @see org.apache.ctakes.ytex.umls.dao.UMLSDao#getAllRelations(java.util.Set)
	// */
	// public List getAllRelations() {
	// Query q = sessionFactory.getCurrentSession().getNamedQuery(
	// "getAllRelations");
	// // q.setParameterList("rel", INCLUDE_REL);
	// // q.setParameterList("relaExclude", EXCLUDE_RELA);
	// return (List) q.list();
	// }

	/**
	 * sets up the umls_aui_fword table.
	 */
	@SuppressWarnings("unchecked")
	public List getAllAuiStr(String lastAui) {
		Query q = null;
		if (lastAui == null)
			q = sessionFactory.getCurrentSession().getNamedQuery(
					"getFirstAuiStr");
		else {
			q = sessionFactory.getCurrentSession().getNamedQuery(
					"getNextAuiStr");
			q.setString("aui", lastAui);
		}
		q.setMaxResults(10000);
		return q.list();
	}

	public void deleteAuiFirstWord() {
		// delete all entries
		sessionFactory.getCurrentSession()
				.createQuery("delete from UmlsAuiFirstWord").executeUpdate();
	}

	public void insertAuiFirstWord(List listAuiFirstWord) {
		for (UmlsAuiFirstWord w : listAuiFirstWord)
			sessionFactory.getCurrentSession().save(w);

	}

	@Override
	public Map getNames(List subList) {
		Map names = new HashMap(subList.size());
		// get the shortest string for the specified cuis
		updateNames("getCuiMinStr", subList, names);
		// for those cuis with a preferred name, use it
		updateNames("getCuiPreferredName", subList, names);
		return names;
	}

	private void updateNames(String queryName, List subList,
			Map names) {
		Query q = sessionFactory.getCurrentSession().getNamedQuery(queryName);
		q.setParameterList("cuis", subList);
		@SuppressWarnings("unchecked")
		List listCuiName = q.list();
		for (Object[] cuiName : listCuiName) {
			names.put((String) cuiName[0], (String) cuiName[1]);
		}
	}

	@Override
	public String getLastAui() {
		Query q = sessionFactory.getCurrentSession()
				.getNamedQuery("getLastAui");
		String aui = (String) q.uniqueResult();
		return aui;
	}

	@Override
	@SuppressWarnings("unchecked")
	public HashSet getRXNORMCuis() {
		HashSet cuis = new HashSet();
		for (String cui : (List) sessionFactory.getCurrentSession()
				.getNamedQuery("getRXNORMCuis").list()) {
			Matcher m = UMLSDao.cuiPattern.matcher(cui);
			if (m.find()) {
				cuis.add(Integer.parseInt(m.group(1)));
			}
		}
		return cuis;
	}

	@Override
	public boolean isRXNORMCui(String cui) {
		Query q = sessionFactory.getCurrentSession().getNamedQuery(
				"isRXNORMCui");
		q.setCacheable(true);
		q.setString("cui", cui);
		long count = ((Long)q.uniqueResult());
		return count > 0;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy