/* * Copyright 2015 fdefalco. * * Licensed 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.ohdsi.webapi.service; import java.sql.ResultSet; import java.sql.SQLException; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.ohdsi.sql.SqlRender; import org.ohdsi.sql.SqlTranslate; import org.ohdsi.webapi.person.ObservationPeriod; import org.ohdsi.webapi.helper.ResourceHelper; import org.ohdsi.webapi.person.PersonRecord; import org.ohdsi.webapi.person.CohortPerson; import org.ohdsi.webapi.person.PersonProfile; import org.ohdsi.webapi.source.Source; import org.ohdsi.webapi.source.SourceDaimon; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Component; @Path("{sourceKey}/person/") @Component public class PersonService extends AbstractDaoService { @Autowired private VocabularyService vocabService; @Autowired private ConceptSetService conceptSetService; @Path("{personId}") @GET @Produces(MediaType.APPLICATION_JSON) public PersonProfile getPersonProfile(@PathParam("sourceKey") String sourceKey, @PathParam("personId") String personId) { final PersonProfile profile = new PersonProfile(); Source source = getSourceRepository().findBySourceKey(sourceKey); String tableQualifier = source.getTableQualifier(SourceDaimon.DaimonType.CDM); String resultsTableQualifier = source.getTableQualifier(SourceDaimon.DaimonType.Results); String sql_statement = ResourceHelper.GetResourceAsString("/resources/person/sql/personInfo.sql"); sql_statement = SqlRender.renderSql(sql_statement, new String[]{"personId", "tableQualifier"}, new String[]{personId, tableQualifier}); sql_statement = SqlTranslate.translateSql(sql_statement, "sql server", source.getSourceDialect()); profile.gender = "not found"; profile.yearOfBirth = 0; getSourceJdbcTemplate(source).query(sql_statement, new RowMapper<Void>() { @Override public Void mapRow(ResultSet resultSet, int arg1) throws SQLException { profile.yearOfBirth = resultSet.getInt("year_of_birth"); profile.gender = resultSet.getString("gender"); return null; } }); if (profile.gender.equals("not found")) { throw new RuntimeException("Can't find person " + personId); } // get observation periods String sqlObservationPeriods = ResourceHelper.GetResourceAsString("/resources/person/sql/getObservationPeriods.sql"); sqlObservationPeriods = SqlRender.renderSql(sqlObservationPeriods, new String[]{"personId", "tableQualifier"}, new String[]{personId, tableQualifier}); sqlObservationPeriods = SqlTranslate.translateSql(sqlObservationPeriods, "sql server", source.getSourceDialect()); getSourceJdbcTemplate(source).query(sqlObservationPeriods, new RowMapper<Void>() { @Override public Void mapRow(ResultSet resultSet, int arg1) throws SQLException { ObservationPeriod op = new ObservationPeriod(); op.startDate = resultSet.getTimestamp("start_date"); op.endDate = resultSet.getTimestamp("end_date"); op.type = resultSet.getString("observation_period_type"); op.id = resultSet.getInt("observation_period_id"); profile.observationPeriods.add(op); return null; } }); // get simplified records sql_statement = ResourceHelper.GetResourceAsString("/resources/person/sql/getRecords.sql"); sql_statement = SqlRender.renderSql(sql_statement, new String[]{"personId", "tableQualifier"}, new String[]{personId, tableQualifier}); sql_statement = SqlTranslate.translateSql(sql_statement, "sql server", source.getSourceDialect()); getSourceJdbcTemplate(source).query(sql_statement, new RowMapper<Void>() { @Override public Void mapRow(ResultSet resultSet, int arg1) throws SQLException { PersonRecord item = new PersonRecord(); item.conceptId = resultSet.getLong("concept_id"); item.conceptName = resultSet.getString("concept_name"); item.domain = resultSet.getString("domain"); item.startDate = resultSet.getTimestamp("start_date"); item.endDate = resultSet.getTimestamp("end_date"); profile.records.add(item); return null; } }); sql_statement = ResourceHelper.GetResourceAsString("/resources/person/sql/getCohorts.sql"); sql_statement = SqlRender.renderSql(sql_statement, new String[]{"subjectId", "tableQualifier"}, new String[]{personId, resultsTableQualifier}); sql_statement = SqlTranslate.translateSql(sql_statement, "sql server", source.getSourceDialect()); getSourceJdbcTemplate(source).query(sql_statement, new RowMapper<Void>() { @Override public Void mapRow(ResultSet resultSet, int arg1) throws SQLException { CohortPerson item = new CohortPerson(); item.startDate = resultSet.getTimestamp("cohort_start_date"); item.endDate = resultSet.getTimestamp("cohort_end_date"); item.cohortDefinitionId = resultSet.getLong("cohort_definition_id"); profile.cohorts.add(item); return null; } }); return profile; } }