/**
* 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.dao.search;
import com.autentia.tnt.businessobject.Department;
import com.autentia.tnt.businessobject.Organization;
import com.autentia.tnt.businessobject.Position;
import com.autentia.tnt.businessobject.Tag;
import com.autentia.tnt.dao.ITransferObject;
import com.autentia.tnt.dao.SearchCriteria;
import java.util.ArrayList;
import java.util.List;
public class AdvancedSearchContactSearch extends SearchCriteria {
private List<Tag> tags;
private boolean tagsSet;
private List<Position> positions;
private boolean positionsSet;
private List<Organization> organizations;
private boolean organizationsSet;
private String country;
private boolean countrySet;
private String name;
private boolean nameSet;
private List<Department> departments;
private boolean departmentsSet;
public boolean isTagsSet() {
return tagsSet;
}
public List<Tag> getTags() {
return tags;
}
public void setTags(List<Tag> tags) {
this.tags = tags;
this.tagsSet = true;
}
public void unsetTags() {
this.tagsSet = false;
}
public boolean isPositionsSet() {
return positionsSet;
}
public List<Position> getPositions() {
return positions;
}
public void setPositions(List<Position> positions) {
this.positions = positions;
this.positionsSet = true;
}
public void unsetPositions() {
this.positionsSet = false;
}
public boolean isOrganizationsSet() {
return organizationsSet;
}
public List<Organization> getOrganizations() {
return organizations;
}
public void setOrganizations(List<Organization> organizations) {
this.organizations = organizations;
this.organizationsSet = true;
}
public void unsetOrganizations() {
this.organizationsSet = false;
}
public boolean isCountrySet() {
return countrySet;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
this.countrySet = true;
}
public void unsetCountry() {
this.countrySet = false;
}
public boolean isNameSet() {
return nameSet;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
this.nameSet = true;
}
public void unsetName() {
this.nameSet = false;
}
public boolean isDepartmentsSet() {
return departmentsSet;
}
public List<Department> getDepartments() {
return departments;
}
public void setDepartments(List<Department> departments) {
this.departments = departments;
this.departmentsSet = true;
}
public void unsetDepartments() {
this.departmentsSet = false;
}
public String getContactHQL() {
StringBuilder ret = new StringBuilder();
int iArgNum = 0;
// ret.append ("select distinct(c.name), o.name, d.name, cipo.name, c.email, c.phone, c.fax, c.country, c.province.name, c.city, c.postalCode, c.address from Contact c left join c.contactInfos ci left join ci.department d left join ci.organization o left join ci.position cipo left join c.tags t ");
ret.append ("select distinct(c.name), o.name, d.name, cipo.name, c.email, c.phone, c.fax, c.country, c.province.name, c.city, c.postalCode, c.address from Contact c left join c.contactInfos ci left join ci.department d left join ci.organization o left join ci.position cipo left join c.tags t ");
int retLength = ret.length();
// busqueda en contactos activos
// -----------------------------
if (isTagsSet()) {
ret.append((ret.length() == retLength) ? "WHERE " : " AND ");
ret.append("t.id IN (:arg" + (iArgNum++) + ")");
}
if (isPositionsSet()) {
ret.append((ret.length() == retLength) ? "WHERE " : " AND ");
ret.append("cipo.id IN (:arg" + (iArgNum++) + ")");
}
if (isOrganizationsSet()) {
ret.append((ret.length() == retLength) ? "WHERE " : " AND ");
ret.append("o.id IN (:arg" + (iArgNum++) + ")");
}
if (isCountrySet()) {
ret.append((ret.length() == retLength) ? "WHERE " : " AND ");
if (getCountry() == null) {
ret.append("c.country is NULL");
} else {
ret.append("c.country like :arg" + (iArgNum++));
}
}
if (isNameSet()) {
ret.append((ret.length() == retLength) ? "WHERE " : " AND ");
if (getName() == null) {
ret.append("c.name is NULL");
} else {
ret.append("c.name like :arg" + (iArgNum++));
}
}
if (isDepartmentsSet()) {
ret.append((ret.length() == retLength) ? "WHERE " : " AND ");
ret.append("d.id IN (:arg" + (iArgNum++) + ")");
}
ret.append(")");
return ret.toString();
}
public String getContactChangesHQL () {
StringBuilder ret = new StringBuilder();
int iArgNum = 0;
ret.append ("from EntityChange e where e.entityName = 'com.autentia.tnt.businessobject.Contact'");
// busqueda en historico de contactos
// ----------------------------------
if (isTagsSet()) {
ret.append(" AND e.field = 'contact.tags' and e.oldValue in (select t.name from Tag t where t.id in (:arg" + (iArgNum++) + "))");
}
if (isPositionsSet()) {
ret.append(" AND e.field = 'contact.position' and e.oldValue in (select p.name from Position p where p.id in (:arg" + (iArgNum++) + "))");
}
if (isOrganizationsSet()) {
ret.append(" AND e.field = 'contact.organization' and e.oldValue in (select p.name from Organization p where p.id in (:arg" + (iArgNum++) + "))");
}
if (isCountrySet()) {
ret.append(" AND e.field = 'contact.country' and e.oldValue like :arg" + (iArgNum++));
}
if (isNameSet()) {
ret.append(" AND e.field = 'contact.name' and e.oldValue like :arg" + (iArgNum++));
}
if (isDepartmentsSet()) {
ret.append(" AND e.field = 'contact.department' and e.oldValue in (select d.name from Department d where d.id in (:arg" + (iArgNum++) + "))");
}
ret.append(")");
return ret.toString();
}
public String getPositionHQL() {
StringBuilder ret = new StringBuilder();
int iArgNum = 0;
// busqueda en puestos activos
// ---------------------------
// ret.append ("select distinct(o.name), d.name, p.name, p.email, p.phone, p.fax, p.country, p.province.name, p.city, p.postalCode, p.address from Position p left join p.departments d left join d.organizations o left join p.tags t ");
ret.append ("select distinct(o.name), d.name, p.name, p.email, p.phone, p.fax, p.country, p.province.name, p.city, p.postalCode, p.address from Position p left join p.departments d left join d.organizations o left join p.tags t ");
ret.append ("where p.id not in (select distinct(position.id) from ContactInfo)");
if (isTagsSet()) {
ret.append(" and t.id IN (:arg" + (iArgNum++) + ")");
}
if (isPositionsSet()) {
ret.append(" and p.id IN (:arg" + (iArgNum++) + ")");
}
if (isOrganizationsSet()) {
ret.append(" and o.id IN (:arg" + (iArgNum++) + ")");
}
if (isCountrySet()) {
if (getCountry() == null) {
ret.append(" and p.country is NULL");
} else {
ret.append(" and p.country like :arg" + (iArgNum++));
}
}
if (isNameSet()) {
if (getName() == null) {
ret.append(" and p.name is NULL");
} else {
ret.append(" and p.name like :arg" + (iArgNum++));
}
}
if (isDepartmentsSet()) {
ret.append(" and d.id IN (:arg" + (iArgNum++) + ")");
}
return ret.toString();
}
public Object[] getContactArguments() {
ArrayList<Object> ret = new ArrayList<Object>();
// argumentos en contactos
// -----------------------
if (isTagsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getTags()) {
params.add(to.getId());
}
ret.add(params);
}
if (isPositionsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getPositions()) {
params.add(to.getId());
}
ret.add(params);
}
if (isOrganizationsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getOrganizations()) {
params.add(to.getId());
}
ret.add(params);
}
if (isCountrySet()) {
ret.add('%' + getCountry() + '%');
}
if (isNameSet()) {
ret.add('%' + getName() + '%');
}
if (isDepartmentsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getDepartments()) {
params.add(to.getId());
}
ret.add(params);
}
return ret.toArray();
}
public Object[] getPositionArguments() {
ArrayList<Object> ret = new ArrayList<Object>();
// argumentos en puestos
// ---------------------
if (isTagsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getTags()) {
params.add(to.getId());
}
ret.add(params);
}
if (isPositionsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getPositions()) {
params.add(to.getId());
}
ret.add(params);
}
if (isOrganizationsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getOrganizations()) {
params.add(to.getId());
}
ret.add(params);
}
if (isCountrySet()) {
ret.add('%' + getCountry() + '%');
}
if (isNameSet()) {
ret.add('%' + getName() + '%');
}
if (isDepartmentsSet()) {
List<Integer> params = new ArrayList<Integer>();
for (ITransferObject to : getDepartments()) {
params.add(to.getId());
}
ret.add(params);
}
return ret.toArray();
}
@Override
public void reset() {
unsetCountry();
unsetDepartments();
unsetName();
unsetOrganizations();
unsetPositions();
unsetTags();
}
@Override
public String toString() {
final StringBuilder ret = new StringBuilder();
ret.append("AdvancedSearchContactSearch{");
if (isCountrySet()) {
ret.append("(country");
ret.append("=" + getCountry());
ret.append(")");
}
if (isDepartmentsSet()) {
ret.append("(department={");
for (Object o : getDepartments().toArray()) {
ret.append("," + o);
}
ret.append("})");
}
if (isNameSet()){
ret.append("(name");
ret.append("=" + getName());
ret.append(")");
}
if (isOrganizationsSet()) {
ret.append("(organization={");
for (Object o : getOrganizations().toArray()) {
ret.append("," + o);
}
ret.append("})");
}
if (isPositionsSet()) {
ret.append("(position={");
for (Object o : getPositions().toArray()) {
ret.append("," + o);
}
ret.append("})");
}
if (isTagsSet()) {
ret.append("(tag={");
for (Object o : getTags().toArray()) {
ret.append("," + o);
}
ret.append("})");
}
ret.append("}");
return ret.toString();
}
@Override
public String getHQL() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Object[] getArguments() {
throw new UnsupportedOperationException("Not supported yet.");
}
}