public java.util.Collection<com.sap.demo.test05.types.Person> extractOper(
com.sap.caf.core.services.bi.IBIExpression expression)
throws com.sap.caf.rt.exception.CAFServiceException {
Collection<Person> persons;
try {
persons = getAllPersons();
} catch (DatatypeConfigurationException e) {
throw new CAFServiceException(e);
}
if (expression!=null) {
persons = filterByExpression(expression, persons);
}
return persons;
}
private java.util.Collection<com.sap.demo.test05.types.Person> filterByExpression(IBIExpression expression, Collection<Person> persons) {
if (expression instanceof BICompositeExpression) {
BICompositeExpression compositeExpression = (BICompositeExpression)expression;
java.util.Collection<com.sap.demo.test05.types.Person> leftResult = filterByExpression(compositeExpression.getLeftExpression(), persons);
java.util.Collection<com.sap.demo.test05.types.Person> rightResult = filterByExpression(compositeExpression.getRightExpression(), persons);
BILogicalOperator logicalOperatior = compositeExpression.getOperator();
if (logicalOperatior.equals(BILogicalOperator.AND)) {
leftResult.retainAll(rightResult);
return leftResult;
} else if (logicalOperatior.equals(BILogicalOperator.OR)) {
leftResult.addAll(rightResult);
return leftResult;
} else {
throw new RuntimeException("Unknown logical operator " + logicalOperatior);
}
} else if (expression instanceof BISelection) {
return filterBySelection((BISelection)expression, persons);
} else {
throw new RuntimeException("Unknown expression " + expression);
}
}
private Collection<Person> filterBySelection(BISelection selection, Collection<Person> persons) {
Collection<Person> result;
String attributeName = selection.getAttributeName();
if ("firstName".equalsIgnoreCase(attributeName)) {
result = filterByFirstName(persons, selection);
} else if ("lastName".equalsIgnoreCase(attributeName)) {
result = filterByLastName(persons, selection);
} else if ("birthDate".equalsIgnoreCase(attributeName)) {
result = filterByBirthDate(persons, selection);
} else {
throw new RuntimeException("Unknown attribute name");
}
return result;
}
private Collection<Person> filterByFirstName(Collection<Person> persons, BISelection selection) {
Collection<Person> result = new ArrayList<Person>();
BIOperator operator = selection.getOperator();
for (Person person : persons) {
if (BIOperator.EQ.equals(operator)) {
if (person.getFirstName().equalsIgnoreCase((String)selection.getFromValue())) {
result.add(person);
}
} else if (BIOperator.BW.equals(operator)) {
String fromValue = (String) selection.getFromValue();
String toValue = (String) selection.getToValue();
String firstName = person.getFirstName();
if ((firstName.compareTo(fromValue)>=0) &&
(firstName.compareTo(toValue)<=0)) {
result.add(person);
}
} else {
throw new RuntimeException("Unknown operator");
}
}
return result;
}
private Collection<Person> filterByLastName(Collection<Person> persons, BISelection selection) {
Collection<Person> result = new ArrayList<Person>();
BIOperator operator = selection.getOperator();
for (Person person : persons) {
if (BIOperator.EQ.equals(operator)) {
if (person.getLastName().equalsIgnoreCase((String)selection.getFromValue())) {
result.add(person);
}
} else if (BIOperator.BW.equals(operator)) {
String fromValue = (String) selection.getFromValue();
String toValue = (String) selection.getToValue();
String lastName = person.getLastName();
if ((lastName.compareTo(fromValue)>=0) &&
(lastName.compareTo(toValue)<=0)) {
result.add(person);
}
} else {
throw new RuntimeException("Unknown operator");
}
}
return result;
}
private Collection<Person> filterByBirthDate(Collection<Person> persons, BISelection selection) {
Collection<Person> result = new ArrayList<Person>();
BIOperator operator = selection.getOperator();
for (Person person : persons) {
if (BIOperator.EQ.equals(operator)) {
if (person.getBirthDate().compare((XMLGregorianCalendar)selection.getFromValue())==DatatypeConstants.EQUAL) {
result.add(person);
}
} else if (BIOperator.BW.equals(operator)) {
XMLGregorianCalendar fromValue = (XMLGregorianCalendar) selection.getFromValue();
XMLGregorianCalendar toValue = (XMLGregorianCalendar) selection.getToValue();
XMLGregorianCalendar birthDate = person.getBirthDate();
if ((birthDate.compare(fromValue)==DatatypeConstants.GREATER) &&
(birthDate.compare(toValue)==DatatypeConstants.LESSER)) {
result.add(person);
}
} else {
throw new RuntimeException("Unknown operator");
}
}
return result;
}
private java.util.Collection<com.sap.demo.test05.types.Person> getAllPersons() throws DatatypeConfigurationException {
java.util.Collection<com.sap.demo.test05.types.Person> result = new ArrayList<Person>();
DatatypeFactory factory = DatatypeFactory.newInstance();
Person person = new Person();
person.setFirstName("Trendafil");
person.setLastName("Madarov");
person.setBirthDate(factory.newXMLGregorianCalendar("1975-02-23"));
result.add(person);
person = new Person();
person.setFirstName("Ivan");
person.setLastName("Andreev");
person.setBirthDate(factory.newXMLGregorianCalendar("1983-05-08"));
result.add(person);
person = new Person();
person.setFirstName("Daniel");
person.setLastName("Simeonov");
person.setBirthDate(factory.newXMLGregorianCalendar("1980-05-09"));
result.add(person);
return result;
}