blob: 1a7adac8d739f0a6c45d71bb7bad60a31677e037 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.ofbiz.common;
import java.util.LinkedList;
import java.util.List;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.StringUtil;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.condition.EntityCondition;
import org.apache.ofbiz.entity.condition.EntityExpr;
import org.apache.ofbiz.entity.condition.EntityOperator;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.entity.util.EntityTypeUtil;
import org.apache.ofbiz.entity.util.EntityUtilProperties;
/**
* Common Workers
*/
public final class CommonWorkers {
public final static String module = CommonWorkers.class.getName();
private CommonWorkers() {}
public static List<GenericValue> getCountryList(Delegator delegator) {
List<GenericValue> geoList = new LinkedList<GenericValue>();
String defaultCountry = EntityUtilProperties.getPropertyValue("general", "country.geo.id.default", delegator);
GenericValue defaultGeo = null;
if (UtilValidate.isNotEmpty(defaultCountry)) {
try {
defaultGeo = EntityQuery.use(delegator).from("Geo").where("geoId", defaultCountry).cache().queryOne();
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot lookup Geo", module);
}
}
List<EntityExpr> exprs = UtilMisc.toList(EntityCondition.makeCondition("geoTypeId", EntityOperator.EQUALS, "COUNTRY"));
List<String> countriesAvailable = StringUtil.split(EntityUtilProperties.getPropertyValue("general", "countries.geo.id.available", delegator), ",");
if (UtilValidate.isNotEmpty(countriesAvailable)) {
// only available countries (we don't verify the list of geoId in countries.geo.id.available)
exprs.add(EntityCondition.makeCondition("geoId", EntityOperator.IN, countriesAvailable));
}
List<GenericValue> countriesList = new LinkedList<GenericValue>();
try {
countriesList = EntityQuery.use(delegator).from("Geo").where(exprs).orderBy("geoName").cache(true).queryList();
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot lookup Geo", module);
}
if (defaultGeo != null) {
geoList.add(defaultGeo);
boolean removeDefaultGeo = UtilValidate.isEmpty(countriesList);
if (!removeDefaultGeo) {
for (GenericValue country : countriesList) {
if (country.get("geoId").equals(defaultGeo.get("geoId"))) {
removeDefaultGeo = true;
}
}
}
if (removeDefaultGeo) {
geoList.remove(0); // Remove default country to avoid double rows in drop-down, from 1st place to keep alphabetical order
}
geoList.addAll(countriesList);
} else {
geoList = countriesList;
}
return geoList;
}
public static List<GenericValue> getStateList(Delegator delegator) {
List<GenericValue> geoList = new LinkedList<GenericValue>();
EntityCondition condition = EntityCondition.makeCondition(EntityOperator.OR, EntityCondition.makeCondition("geoTypeId", "STATE"), EntityCondition.makeCondition("geoTypeId", "PROVINCE"), EntityCondition.makeCondition("geoTypeId", "TERRITORY"),
EntityCondition.makeCondition("geoTypeId", "MUNICIPALITY"));
try {
geoList = EntityQuery.use(delegator).from("Geo").where(condition).orderBy("geoName").cache(true).queryList();
} catch (GenericEntityException e) {
Debug.logError(e, "Cannot lookup State Geos: " + e.toString(), module);
}
return geoList;
}
public static List<GenericValue> getAssociatedStateList(Delegator delegator, String country) {
return getAssociatedStateList(delegator, country, null);
}
/**
* Returns a list of regional geo associations.
*/
public static List<GenericValue> getAssociatedStateList(Delegator delegator, String country, String listOrderBy) {
if (UtilValidate.isEmpty(country)) {
// Load the system default country
country = EntityUtilProperties.getPropertyValue("general", "country.geo.id.default", delegator);
}
if (UtilValidate.isEmpty(listOrderBy)) {
listOrderBy = "geoId";
}
List<String> sortList = UtilMisc.toList(listOrderBy);
List<GenericValue> geoList = new LinkedList<GenericValue>();
try {
// Check if the country is a country group and get recursively the
// states
List<GenericValue> regionList = EntityQuery.use(delegator)
.from("GeoAssocAndGeoToWithState")
.where("geoIdFrom", country, "geoAssocTypeId", "GROUP_MEMBER", "geoTypeId", "GROUP")
.orderBy(sortList)
.cache(true)
.queryList();
if (regionList.size() == 1) {
for (GenericValue region : regionList) {
List<GenericValue> tmpState = EntityQuery.use(delegator)
.from("GeoAssocAndGeoTo")
.where("geoId", region.getString("geoIdFrom"))
.orderBy(sortList)
.cache(true)
.queryList();
for (GenericValue state : tmpState) {
geoList.addAll(getAssociatedStateList(delegator, state.getString("geoIdFrom"), listOrderBy));
}
}
}
// get all related states
EntityCondition stateProvinceFindCond = EntityCondition.makeCondition(
EntityCondition.makeCondition("geoIdFrom", country),
EntityCondition.makeCondition("geoAssocTypeId", "REGIONS"),
EntityCondition.makeCondition(EntityOperator.OR, EntityCondition.makeCondition("geoTypeId", "STATE"), EntityCondition.makeCondition("geoTypeId", "PROVINCE"), EntityCondition.makeCondition("geoTypeId", "MUNICIPALITY"),
EntityCondition.makeCondition("geoTypeId", "TERRITORY"), EntityCondition.makeCondition("geoTypeId", "COUNTY")));
geoList.addAll(EntityQuery.use(delegator)
.from("GeoAssocAndGeoToWithState")
.where(stateProvinceFindCond)
.orderBy(sortList)
.cache(true)
.queryList()
);
} catch (GenericEntityException e){
Debug.logError(e, "Cannot lookup Geo", module);
}
return geoList;
}
/**
* A generic method to be used on Type enities, e.g. ProductType. Recurse to the root level in the type hierarchy
* and checks if the specified type childType has parentType as its parent somewhere in the hierarchy.
*
* @param delegator The Delegator object.
* @param entityName Name of the Type entity on which check is performed.
* @param primaryKey Primary Key field of the Type entity.
* @param childType Type value for which the check is performed.
* @param parentTypeField Field in Type entity which stores the parent type.
* @param parentType Value of the parent type against which check is performed.
* @return boolean value based on the check results.
*
* @deprecated Moved to {@link org.apache.ofbiz.entity.util.EntityTypeUtil#hasParentType(Delegator, String, String, String, String, String) EntityTypeUtil}
*/
@Deprecated
public static boolean hasParentType(Delegator delegator, String entityName, String primaryKey, String childType, String parentTypeField, String parentType) {
return EntityTypeUtil.hasParentType(delegator, entityName, primaryKey, childType, parentTypeField, parentType);
}
}