/**
* Erzeugt einen Teil der HQL-Anfrage, eine Liste mit IN ( ) für eine Menge von
* Strings (ohne Anführungszeichen, für Zahlen und Parameter geeignet).
*
* @param _attribute
* @param _parts
* zu berücksichtigende Inhalte
* @return String
*/
public static String getInList(String _attribute, Object... _parts)
{
return getInList(false, _attribute, _parts);
}
/**
* Erzeugt einen Teil der HQL-Anfrage, eine Liste mit IN ( ) für eine Menge von
* Strings (deren toString(), mit Anführungszeichen, für Zeichenketten geeignet)
*
* @param _attribute
* @param _parts
* zu berücksichtigende Inhalte
* @return String
*/
public static String getInListStrings(String _attribute, Object... _parts)
{
return getInList(true, _attribute, _parts);
}
/**
* Erzeugt einen Teil der HQL-Anfrage, eine Liste mit IN ( ).
*
* @param _string
* @param _attribute
* @param _parts
* zu berücksichtigende Inhalte
* @return String
*/
public static String getInList(boolean _string, String _attribute, Object... _parts)
{
Object[] parts = getObjectArray(_parts);
StringBuilder b = new StringBuilder("( ");
int begin = 0;
int partListLength = 900;
// kein IN (...) mit mehr als 900 Elementen, mag Hibernate bei > 1000 nicht mehr
while (parts.length - begin > 0)
{
int end = Math.min(parts.length, begin + partListLength);
if (b.length() > 3)
{
b.append(" OR ");
}
b.append(_attribute);
b.append(" IN ( ");
// p("begin: "+begin+", end: "+end+", "+parts.length);
b.append(getList(_string, begin, end, parts));
begin = end;
b.append(" ) ");
}
b.append(") ");
return b.toString();
}
/**
* Erzeugt eine komma-getrennte Liste für ein Array von Objekten.
*
* @param _parts
* zu berücksichtigende Inhalte
* @return String
*/
public static String getList(Object... _parts)
{
return getList(false, 0, -1, _parts);
}
/**
* Erzeugt eine komma-getrennte Liste für ein Array von Objekten (deren toString()).
*
* @param _string
* @param _begin
* @param _end
* @param _parts
* zu berücksichtigende Inhalte
* @return String
*/
public static String getList(boolean _string, int _begin, int _end, Object... _parts)
{
Object[] parts = getObjectArray(_parts);
int end = _end;
if (end < 1 || end > parts.length)
{
end = parts.length;
}
int begin = _begin;
if (begin < 1)
{
begin = 0;
}
StringBuilder b = new StringBuilder("");
for (int i = begin; i < end; i++)
{
if (i > begin)
{
b.append(", ");
}
if (_string)
{
b.append("'");
}
b.append(parts[i]);
if (_string)
{
b.append("'");
}
}
return b.toString();
}
/**
* Gibt ein Object-Array zum Object-Array-Parameter zurück. Erstellt ein Object-Array,
* sofern eine einzelne Collection übergeben wurde.
*
* @param _objects
* @return Object[]
*/
public static Object[] getObjectArray(Object... _objects)
{
if (Helper.isEmpty(_objects))
{
throw new IllegalArgumentException("empty Object-Array");
}
Object[] objects = _objects;
if (objects.length == 1 && (Collection.class.isInstance(objects[0])))
{
Collection c = (Collection)objects[0];
objects = new Object[c.size()];
int i = 0;
for (Object o : c)
{
objects[i] = o;
i++;
}
}
return objects;
}