/**
* =============================================================================
*
* ORCID (R) Open Source
* http://orcid.org
*
* Copyright (c) 2012-2014 ORCID, Inc.
* Licensed under an MIT-Style License (MIT)
* http://orcid.org/open-source-license
*
* This copyright and license information (including a link to the full license)
* shall be included in its entirety in all copies or substantial portion of
* the software.
*
* =============================================================================
*/
package org.orcid.core.cli;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.orcid.core.security.visibility.OrcidVisibilityDefaults;
import org.orcid.jaxb.model.common_v2.Iso3166Country;
import org.orcid.jaxb.model.common_v2.Visibility;
import org.orcid.persistence.dao.AddressDao;
import org.orcid.persistence.jpa.entities.AddressEntity;
import org.orcid.persistence.jpa.entities.ProfileEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
/**
*
* @author Angel Montenegro
*
*/
public class MigrateAddressData {
private static Logger LOG = LoggerFactory.getLogger(MigrateAddressData.class);
private AddressDao addressDao;
private TransactionTemplate transactionTemplate;
public static void main(String... args) {
new MigrateAddressData().migrate();
}
private void migrate() {
init();
migrateAddress();
System.exit(0);
}
private void migrateAddress() {
LOG.debug("Starting migration process");
List<Object[]> addressElements = Collections.emptyList();
do {
addressElements = addressDao.findAddressesToMigrate();
for(final Object[] addressElement : addressElements) {
String orcid = (String) addressElement[0];
String countryCode = (String) addressElement[1];
String visibilityValue = (String) addressElement[2];
LOG.info("Migrating address for profile: {}", orcid);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
Visibility visibility = null;
try {
visibility = Visibility.fromValue(visibilityValue);
} catch(Exception e) {
visibility = Visibility.fromValue(OrcidVisibilityDefaults.COUNTRY_DEFAULT.getVisibility().value());
}
AddressEntity address = new AddressEntity();
address.setDateCreated(new Date());
address.setLastModified(new Date());
address.setUser(new ProfileEntity(orcid));
address.setIso2Country(Iso3166Country.fromValue(countryCode));
address.setSourceId(orcid);
address.setVisibility(visibility);
addressDao.persist(address);
}
});
}
} while (addressElements != null && !addressElements.isEmpty());
LOG.debug("Finished migration process");
}
@SuppressWarnings("resource")
private void init() {
ApplicationContext context = new ClassPathXmlApplicationContext("orcid-persistence-context.xml");
addressDao = (AddressDao) context.getBean("addressDao");
transactionTemplate = (TransactionTemplate) context.getBean("transactionTemplate");
}
}