/** * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L. * Copyright (C) 2007 Autentia Real Bussiness Solution S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.autentia.tnt.manager.contacts.advancedsearch; import com.autentia.tnt.businessobject.Contact; import com.autentia.tnt.dao.hibernate.ContactDAO; import com.autentia.tnt.dao.hibernate.PositionDAO; import com.autentia.tnt.dao.search.AdvancedSearchContactSearch; import com.autentia.tnt.tracking.EntityChange; import java.util.ArrayList; import java.util.List; public class ContactPositionManager { private static final int CONTACT_NAME = 0; private static final int CONTACT_ORGANIZATION = 1; private static final int CONTACT_DEPARTMENT = 2; private static final int CONTACT_POSITION = 3; private static final int CONTACT_EMAIL = 4; private static final int CONTACT_PHONE = 5; private static final int CONTACT_FAX = 6; private static final int CONTACT_COUNTRY = 7; private static final int CONTACT_PROVINCE = 8; private static final int CONTACT_CITY = 9; private static final int CONTACT_POSTALCODE = 10; private static final int CONTACT_ADDRESS = 11; private static final int POSITION_ORGANIZATION = 0; private static final int POSITION_DEPARTMENT = 1; private static final int POSITION_POSITION = 2; private static final int POSITION_EMAIL = 3; private static final int POSITION_PHONE = 4; private static final int POSITION_FAX = 5; private static final int POSITION_COUNTRY = 6; private static final int POSITION_PROVINCE = 7; private static final int POSITION_CITY = 8; private static final int POSITION_POSTALCODE = 9; private static final int POSITION_ADDRESS = 10; private ContactDAO contactDAO; private PositionDAO positionDAO; public ContactPositionManager (ContactDAO contactDAO, PositionDAO positionDAO) { this.contactDAO = contactDAO; this.positionDAO = positionDAO; } public ContactPositionManager () { contactDAO = ContactDAO.getDefault(); positionDAO = PositionDAO.getDefault(); } public List<ContactPosition> doAdvancedSearch(final AdvancedSearchContactSearch advancedSearch, boolean searchInChanges) { final List<Object> contacts = contactDAO.contactAdvancedSearch(advancedSearch); final List<Object> positions = positionDAO.contactAdvancedSearch(advancedSearch); final List<ContactPosition> contactPositions = new ArrayList<ContactPosition>(contacts.size() + positions.size()); contactPositions.addAll(this.fromContactToContactPosition(contacts, true)); contactPositions.addAll(this.fromPositionToContactPosition(positions)); if (searchInChanges) { contactPositions.addAll(this.recoverChangesFromContact(advancedSearch)); } return contactPositions; } /** * TODO */ private List<ContactPosition> recoverChangesFromContact (final AdvancedSearchContactSearch advancedSearch) { final List<EntityChange> changes = contactDAO.contactAdvancedSearchChanges(advancedSearch); final List<Contact> contacts = new ArrayList<Contact>(changes.size()); final List<ContactPosition> contactPositions = new ArrayList<ContactPosition>(contacts.size()); String changeValueDescription; for (EntityChange entityChange: changes) { final ContactPosition contactPosition = new ContactPosition(); final Contact contact = contactDAO.getById(entityChange.getEntityId()); contactPosition.setName(contact.getName()); // recovers the text to show in the description of the change if (!(entityChange.getNewValue() == null || entityChange.getNewValue().equals(""))) { changeValueDescription = entityChange.getOldValue() + " [" + entityChange.getNewValue() + "]"; } else { changeValueDescription = entityChange.getOldValue(); } // add the description by field if (entityChange.getField().equals(Contact.FIELD_POSITION)) { contactPosition.setPosition(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_ORGANIZATION)) { contactPosition.setOrganization(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_NAME)) { contactPosition.setName(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_DEPARTMENT)) { contactPosition.setDepartment(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_EMAIL)) { contactPosition.setEmail(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_PHONE)) { contactPosition.setPhone(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_FAX)) { contactPosition.setFax(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_COUNTRY)) { contactPosition.setCountry(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_PROVINCE)) { contactPosition.setProvince(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_CITY)) { contactPosition.setCity(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_POSTALCODE)) { contactPosition.setPostalCode(changeValueDescription); } else if (entityChange.getField().equals(Contact.FIELD_ADDRESS)) { contactPosition.setAddress(changeValueDescription); } contactPositions.add(contactPosition); } return contactPositions; } private List<ContactPosition> fromContactToContactPosition (final List<Object> contacts, boolean active) { final List<ContactPosition> contactPositions = new ArrayList<ContactPosition>(contacts.size()); for (Object object : contacts) { Object[] contact = (Object[]) object; final ContactPosition contactPosition = new ContactPosition(); contactPosition.setName((String) contact[CONTACT_NAME]); contactPosition.setOrganization((String) contact[CONTACT_ORGANIZATION]); contactPosition.setDepartment((String) contact[CONTACT_DEPARTMENT]); contactPosition.setPosition((String) contact[CONTACT_POSITION]); contactPosition.setEmail((String) contact[CONTACT_EMAIL]); contactPosition.setPhone((String) contact[CONTACT_PHONE]); contactPosition.setFax((String) contact[CONTACT_FAX]); contactPosition.setCountry((String) contact[CONTACT_COUNTRY]); contactPosition.setProvince((String) contact[CONTACT_PROVINCE]); contactPosition.setCity((String) contact[CONTACT_CITY]); contactPosition.setPostalCode((String) contact[CONTACT_POSTALCODE]); contactPosition.setAddress((String) contact[CONTACT_ADDRESS]); contactPosition.setActive(active); contactPositions.add(contactPosition); } return contactPositions; } private List<ContactPosition> fromPositionToContactPosition (final List<Object> positions) { final List<ContactPosition> contactPositions = new ArrayList<ContactPosition>(positions.size()); String organizationName, departmentName, positionName, email, phone, fax, country, province, city, postalCode, address; for (Object object : positions) { Object[] position = (Object[]) object; final ContactPosition contactPosition = new ContactPosition(); organizationName = (String) position[POSITION_ORGANIZATION]; if (organizationName == null || organizationName.equals("")) organizationName = "-"; departmentName = (String) position[POSITION_DEPARTMENT]; if (departmentName == null || departmentName.equals("")) departmentName = "-"; positionName = (String) position[POSITION_POSITION]; if (positionName == null || positionName.equals("")) positionName = "-"; email = (String) position[POSITION_EMAIL]; if (email == null || email.equals("")) email = "-"; phone = (String) position[POSITION_PHONE]; if (phone == null || phone.equals("")) phone = "-"; fax = (String) position[POSITION_FAX]; if (fax == null || fax.equals("")) fax = "-"; country = (String) position[POSITION_COUNTRY]; if (country == null || country.equals("")) country = "-"; province = (String) position[POSITION_PROVINCE]; if (province == null || province.equals("")) province = "-"; city = (String) position[POSITION_CITY]; if (city == null || city.equals("")) city = "-"; postalCode = (String) position[POSITION_POSTALCODE]; if (postalCode == null || postalCode.equals("")) postalCode = "-"; address = (String) position[POSITION_ADDRESS]; if (address == null || address.equals("")) address = "-"; contactPosition.setOrganization(organizationName); contactPosition.setDepartment(departmentName); contactPosition.setPosition(positionName); contactPosition.setEmail(email); contactPosition.setPhone(phone); contactPosition.setFax(fax); contactPosition.setCountry(country); contactPosition.setProvince(province); contactPosition.setCity(city); contactPosition.setPostalCode(postalCode); contactPosition.setAddress(address); contactPosition.setActive(true); contactPositions.add(contactPosition); } return contactPositions; } }