Show TOC

Extractor Method Implementation Example Locate this document in the navigation structure

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;

}