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; }