/** * Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org> * * 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.onebusaway.webapp.impl; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.onebusaway.csv_entities.CsvEntityReader; import org.onebusaway.csv_entities.EntityHandler; import org.onebusaway.csv_entities.schema.AnnotationDrivenEntitySchemaFactory; import org.onebusaway.users.impl.PhoneNumberLibrary; import org.onebusaway.users.model.User; import org.onebusaway.users.model.UserIndex; import org.onebusaway.users.model.UserIndexKey; import org.onebusaway.users.services.UserIndexTypes; import org.onebusaway.users.services.UserService; import org.onebusaway.webapp.services.TccParticipantRegistrationBean; import org.onebusaway.webapp.services.TccParticipantRegistrationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class TccParticipantRegistrationServiceImpl implements TccParticipantRegistrationService { private UserService _userService; @Autowired public void setUserService(UserService userService) { _userService = userService; } @Override public void register(String data) throws IOException { register(new ByteArrayInputStream(data.getBytes("UTF-8"))); } @Override public void register(File data) throws IOException { register(new FileInputStream(data)); } @Override public UserIndex register(TccParticipantRegistrationBean record) { String phoneNumber = record.getPhoneNumber(); if (phoneNumber == null || phoneNumber.trim().length() == 0) return null; phoneNumber = PhoneNumberLibrary.normalizePhoneNumber(phoneNumber); UserIndexKey key = new UserIndexKey(UserIndexTypes.PHONE_NUMBER, phoneNumber); UserIndex existingUserIndex = _userService.getOrCreateUserForIndexKey(key, "", false); User existingUser = existingUserIndex.getUser(); String id = key.getType() + "|" + key.getValue(); UserIndexKey studyKey = new UserIndexKey("tccStudyId", id); return _userService.addUserIndexToUser(existingUser, studyKey, record.getSecret()); } /**** * Private Methods ****/ private void register(InputStream in) throws IOException { CsvEntityReader reader = getReader(); reader.addEntityHandler(new EntityHandlerImpl()); reader.readEntities(TccParticipantRegistrationBean.class, in); } private CsvEntityReader getReader() { CsvEntityReader reader = new CsvEntityReader(); AnnotationDrivenEntitySchemaFactory factory = new AnnotationDrivenEntitySchemaFactory(); factory.addEntityClass(TccParticipantRegistrationBean.class); reader.setEntitySchemaFactory(factory); return reader; } private class EntityHandlerImpl implements EntityHandler { @Override public void handleEntity(Object bean) { TccParticipantRegistrationBean record = (TccParticipantRegistrationBean) bean; register(record); } } }