package qa.qcri.aidr.dbmanager.ejb.remote.facade.imp;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import qa.qcri.aidr.common.exception.PropertyNotSetException;
import qa.qcri.aidr.dbmanager.dto.CollectionDTO;
import qa.qcri.aidr.dbmanager.dto.CrisisTypeDTO;
import qa.qcri.aidr.dbmanager.dto.DocumentDTO;
import qa.qcri.aidr.dbmanager.dto.DocumentNominalLabelDTO;
import qa.qcri.aidr.dbmanager.dto.DocumentNominalLabelIdDTO;
import qa.qcri.aidr.dbmanager.dto.ModelFamilyDTO;
import qa.qcri.aidr.dbmanager.dto.NominalAttributeDTO;
import qa.qcri.aidr.dbmanager.dto.NominalLabelDTO;
import qa.qcri.aidr.dbmanager.dto.UsersDTO;
import qa.qcri.aidr.dbmanager.dto.taggerapi.TrainingDataDTO;
public class TestMiscResourceFacadeImp {
private static Logger logger = Logger.getLogger("db-manager-log");
private static MiscResourceFacadeImp miscResourceFacadeImp;
private static ModelFamilyResourceFacadeImp modelFamilyResourceFacadeImp;
private static CollectionResourceFacadeImp crisisResourceFacadeImp;
private static CrisisTypeResourceFacadeImp crisisTypeResourceFacadeImp;
private static NominalAttributeResourceFacadeImp nominalAttributeResourceFacadeImp;
private static UsersResourceFacadeImp userResourceFacadeImp;
private static EntityManager entityManager;
private static DocumentNominalLabelResourceFacadeImp documentNominalLabelResourceFacadeImp;
private static DocumentResourceFacadeImp documentResourceFacadeImp;
private static NominalLabelResourceFacadeImp nominalLabelResourceFacadeImp;
private ModelFamilyDTO modelFamilyDTO;
private CollectionDTO crisisDTO;
private CrisisTypeDTO crisisTypeDTO;
private DocumentDTO documentDTO;
private DocumentNominalLabelDTO documentNominalLabelDTO;
private NominalLabelDTO nominalLabelDTO;
private UsersDTO userDTO;
@BeforeClass
public static void setUpBeforeClass() {
miscResourceFacadeImp = new MiscResourceFacadeImp();
documentNominalLabelResourceFacadeImp = new DocumentNominalLabelResourceFacadeImp();
documentResourceFacadeImp = new DocumentResourceFacadeImp();
modelFamilyResourceFacadeImp = new ModelFamilyResourceFacadeImp();
crisisResourceFacadeImp = new CollectionResourceFacadeImp();
crisisTypeResourceFacadeImp = new CrisisTypeResourceFacadeImp();
nominalAttributeResourceFacadeImp = new NominalAttributeResourceFacadeImp();
userResourceFacadeImp = new UsersResourceFacadeImp();
nominalLabelResourceFacadeImp = new NominalLabelResourceFacadeImp();
entityManager = Persistence.createEntityManagerFactory(
"ProjectDBManagerTest-ejbPU").createEntityManager();
miscResourceFacadeImp.setEntityManager(entityManager);
modelFamilyResourceFacadeImp.setEntityManager(entityManager);
crisisResourceFacadeImp.setEntityManager(entityManager);
crisisTypeResourceFacadeImp.setEntityManager(entityManager);
userResourceFacadeImp.setEntityManager(entityManager);
nominalAttributeResourceFacadeImp.setEntityManager(entityManager);
documentResourceFacadeImp.setEntityManager(entityManager);
documentNominalLabelResourceFacadeImp.setEntityManager(entityManager);
nominalLabelResourceFacadeImp.setEntityManager(entityManager);
}
@Before
public void setUp() {
try {
// fetch crisis type
crisisTypeDTO = crisisTypeResourceFacadeImp.findCrisisTypeByID(10L);
// add test user
userDTO = new UsersDTO("testUser"+new Date(), "testRole"+new Date());
entityManager.getTransaction().begin();
userDTO = userResourceFacadeImp.addUser(userDTO);
entityManager.getTransaction().commit();
// insert crisis type
crisisDTO = new CollectionDTO("tesName"+new Date(), "testCode" +new Date(), false, false, crisisTypeDTO, userDTO, userDTO);
entityManager.getTransaction().begin();
crisisDTO = crisisResourceFacadeImp.addCrisis(crisisDTO);
entityManager.getTransaction().commit();
// fetch nominal attribute : nominal attribute with id : 1 already exists
NominalAttributeDTO nominalAttributeDTO = nominalAttributeResourceFacadeImp.getAttributeByID(1L);
modelFamilyDTO = new ModelFamilyDTO();
modelFamilyDTO.setCrisisDTO(crisisDTO);
modelFamilyDTO.setIsActive(true);
modelFamilyDTO.setNominalAttributeDTO(nominalAttributeDTO);
// insert nominal attribute
entityManager.getTransaction().begin();
boolean success = modelFamilyResourceFacadeImp.addCrisisAttribute(modelFamilyDTO);
entityManager.getTransaction().commit();
assertTrue(success);
List<ModelFamilyDTO> modelFamilyDTOs = modelFamilyResourceFacadeImp.getAllModelFamiliesByCrisis(crisisDTO.getCrisisID());
assertNotNull(modelFamilyDTOs);
modelFamilyDTO = modelFamilyDTOs.get(0);
nominalLabelDTO = nominalLabelResourceFacadeImp.getNominalLabelByCode("informative");
// creating document
documentDTO = createDocument();
// add document nominal label
documentNominalLabelDTO = getDocumentNominalLabel();
documentNominalLabelDTO = documentNominalLabelResourceFacadeImp
.addDocument(documentNominalLabelDTO);
} catch (PropertyNotSetException ex) {
logger.error("PropertyNotSetException while accessing/inserting data "+ex.getMessage());
}
}
@After
public void tearDown() {
// tear down data
if(documentNominalLabelDTO != null) {
entityManager.getTransaction().begin();
documentNominalLabelResourceFacadeImp.deleteDocument(documentNominalLabelDTO);
entityManager.getTransaction().commit();
}
if(documentDTO != null) {
entityManager.getTransaction().begin();
documentResourceFacadeImp.deleteDocument(documentDTO);
entityManager.getTransaction().commit();
}
try {
if(modelFamilyDTO != null) {
entityManager.getTransaction().begin();
modelFamilyResourceFacadeImp.deleteModelFamily(modelFamilyDTO.getModelFamilyId());
entityManager.getTransaction().commit();
}
} catch (PropertyNotSetException ex) {
logger.error("PropertyNotSetException while deleting model family "+ex.getMessage());
}
try {
if (crisisDTO != null) {
entityManager.getTransaction().begin();
crisisResourceFacadeImp.deleteCrisis(crisisDTO);
entityManager.getTransaction().commit();
CollectionDTO result = crisisResourceFacadeImp.getCrisisByCode(crisisDTO.getCode());
assertNull(result);
}
} catch (PropertyNotSetException ex) {
logger.error("PropertyNotSetException while deleting crisis "+ex.getMessage());
}
try {
if (userDTO != null) {
entityManager.getTransaction().begin();
userResourceFacadeImp.deleteUser(userDTO.getUserID());
entityManager.getTransaction().commit();
UsersDTO result = userResourceFacadeImp.getUserByName(userDTO.getName());
assertNull(result);
}
} catch (PropertyNotSetException ex) {
logger.error("PropertyNotSetException while deleting user "+ex.getMessage());
}
}
@AfterClass
public static void tearDownAfterClass() {
miscResourceFacadeImp.getEntityManager().close();
}
/**
* Test to get all models
*/// TODO Class cast exception
@Test
public void testGetTraningDataByCrisisAndAttribute() {
List<TrainingDataDTO> trainingDataDTOs = miscResourceFacadeImp.getTraningDataByCrisisAndAttribute(crisisDTO.getCrisisID(), modelFamilyDTO.getModelFamilyId(), 0, 1, null, null);
assertNotNull(trainingDataDTOs);
assertTrue("Training DTOs", trainingDataDTOs.size() == 1);
}
private DocumentNominalLabelDTO getDocumentNominalLabel() {
documentNominalLabelDTO = new DocumentNominalLabelDTO();
DocumentNominalLabelIdDTO idDTO = new DocumentNominalLabelIdDTO();
idDTO.setUserId(userDTO.getUserID());
idDTO.setDocumentId(documentDTO.getDocumentID());
idDTO.setNominalLabelId(nominalLabelDTO.getNominalLabelId());
documentNominalLabelDTO.setIdDTO(idDTO);
documentNominalLabelDTO.setNominalLabelDTO(nominalLabelDTO);
documentNominalLabelDTO.setDocumentDTO(documentDTO);
documentNominalLabelDTO.setTimestamp(new Date());
return documentNominalLabelDTO;
}
private DocumentDTO createDocument() throws PropertyNotSetException {
documentDTO = new DocumentDTO();
String tweet = "\"filter_level\":\"medium\",\"retweeted\":false,\"in_reply_to_screen_name\":null,\"possibly_sensitive\":false,\"truncated\":false,\"lang\":\"en\",\"in_reply_to_status_id_str\":null,"
+ "\"id\":445125937915387905,\"in_reply_to_user_id_str\":null,\"in_reply_to_status_id\":null,\"created_at\":\"Sun Mar 16 09:14:28 +0000 2014\",\"favorite_count\":0,\"place\":null,\"coordinates\":null,"
+ "\"text\":\"'Those in the #cockpit' behind #missing #flight? http://t.co/OYHvM1t0CT\",\"contributors\":null,\"geo\":null,\"entities\":{\"hashtags\":[{\"text\":\"cockpit\",\"indices\":[14,22]},{\"text\":\"missing\","
+ "\"indices\":[31,39]},{\"text\":\"flight\",\"indices\":[40,47]}],\"symbols\":[],\"urls\":[{\"expanded_url\":\"http://www.cnn.com/2014/03/15/world/asia/malaysia-airlines-plane/index.html\""
+ ",\"indices\":[49,71],\"display_url\":\"cnn.com/2014/03/15/wor\u2026\",\"url\":\"http://t.co/OYHvM1t0CT\"}],\"user_mentions\":[]},\"aidr\":{\"crisis_code\":\"2014-03-mh370\""
+ ",\"doctype\":\"twitter\",\"crisis_name\":\"Malaysia Airlines flight #MH370\"},\"source\":\"\",\"favorited\":false,"
+ "\"retweet_count\":0,\"in_reply_to_user_id\":null,\"id_str\":\"445125937915387905\",\"user\":{\"location\":\"Mexico, Distrito Federal. \",\"default_profile\":true,\"statuses_count\":1033,"
+ "\"profile_background_tile\":false,\"lang\":\"en\",\"profile_link_color\":\"0084B4\",\"profile_banner_url\":\"https://pbs.twimg.com/profile_banners/135306436/1394809176\",\"id\":135306436,\"following\":null,"
+ "\"favourites_count\":6,\"protected\":false,\"profile_text_color\":\"333333\",\"description\":\"Licenciado en derecho, he ocupado cargos dentro de la industria privada as\u00ED como dentro de la Administraci\u00F3n P\u00FAblica, tanto local (GDF), como Federal.\","
+ "\"verified\":false,\"contributors_enabled\":false,\"profile_sidebar_border_color\":\"C0DEED\",\"name\":\"Leonardo Larraga\",\"profile_background_color\":\"C0DEED\",\"created_at\":\"Tue Apr 20 23:12:25 +0000 2010\","
+ "\"is_translation_enabled\":false,\"default_profile_image\":false,\"followers_count\":726,\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/440767007290429441/GkHsYcJj_normal.jpeg\","
+ "\"geo_enabled\":false,\"profile_background_image_url\":\"http://abs.twimg.com/images/themes/theme1/bg.png\",\"profile_background_image_url_https\":\"https://abs.twimg.com/images/themes/theme1/bg.png\","
+ "\"follow_request_sent\":null,\"url\":\"http://instagram.com/larraga_ld\",\"utc_offset\":-21600,\"time_zone\":\"Mexico City\",\"notifications\":null,\"friends_count\":150,\"profile_use_background_image\":true,"
+ "\"profile_sidebar_fill_color\":\"DDEEF6\",\"screen_name\":\"larraga_ld\",\"id_str\":\"135306436\",\"profile_image_url\":\"http://pbs.twimg.com/profile_images/440767007290429441/GkHsYcJj_normal.jpeg\","
+ "\"is_translator\":false,\"listed_count\":0}}";
String word = "{\"words\":[\"#prayformh370\"]}";
documentDTO.setCrisisDTO(crisisDTO);
documentDTO.setHasHumanLabels(false);
documentDTO.setIsEvaluationSet(true);
documentDTO.setReceivedAt(new Date());
documentDTO.setLanguage("en");
documentDTO.setDoctype("Tweet");
documentDTO.setData(tweet);
documentDTO.setWordFeatures(word);
documentDTO.setValueAsTrainingSample(0.5);
entityManager.getTransaction().begin();
documentDTO = documentResourceFacadeImp.addDocument(documentDTO);
entityManager.getTransaction().commit();
return documentDTO;
}
}