/*
 *  Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 *  WSO2 Inc. 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.wso2.carbon.humantask.core.dao.jpa.openjpa.model.provider;

import org.apache.commons.lang.StringUtils;
import org.wso2.carbon.humantask.TArgument;
import org.wso2.carbon.humantask.TFrom;
import org.wso2.carbon.humantask.core.HumanTaskConstants;
import org.wso2.carbon.humantask.core.dao.OrganizationalEntityDAO;
import org.wso2.carbon.humantask.core.engine.HumanTaskException;
import org.wso2.carbon.humantask.core.engine.PeopleQueryEvaluator;
import org.wso2.carbon.humantask.core.engine.runtime.api.EvaluationContext;
import org.wso2.carbon.humantask.core.engine.runtime.api.HumanTaskRuntimeException;
import org.wso2.carbon.humantask.core.engine.util.CommonTaskUtil;

import java.util.ArrayList;
import java.util.List;

public class LogicalPeopleGroupBasedOrgEntityProvider implements OrganizationalEntityProvider {

    public List<OrganizationalEntityDAO> getOrganizationalEntities(
            PeopleQueryEvaluator peopleQueryEvaluator, TFrom tFrom,
            EvaluationContext evaluationContext) throws HumanTaskException {
        String roleName = null;

        for (TArgument tArgument : tFrom.getArgumentArray()) {
            String expressionLanguage = (tArgument.getExpressionLanguage() == null) ?
                    tFrom.getExpressionLanguage() : tArgument.getExpressionLanguage();
            if (expressionLanguage == null) {
                expressionLanguage = HumanTaskConstants.WSHT_EXP_LANG_XPATH20;
            }
            //TODO what about expression language
            if ("role".equals(tArgument.getName())) {
                roleName = tArgument.newCursor().getTextValue();
                if(roleName != null && roleName.contains("htd:getInput")) {
                roleName =
                        CommonTaskUtil.calculateRole(evaluationContext, roleName,
                                expressionLanguage);
                }
                break;
            }
        }

        if (roleName == null || StringUtils.isEmpty(roleName)) {
            throw new HumanTaskRuntimeException("The role name cannot be empty: " +
                    tFrom.toString());
        } else {
            roleName = roleName.trim();
        }

        List<OrganizationalEntityDAO> orgEnties = new ArrayList<OrganizationalEntityDAO>();
        orgEnties.add(peopleQueryEvaluator.createGroupOrgEntityForRole(roleName));

        return orgEnties;
    }

}

@@ -1763,16 +1763,108 @@
  null;%0A%0A
+        List%3COrganizationalEntityDAO%3E orgEnties = new ArrayList%3COrganizationalEntityDAO%3E();%0A
         
@@ -2417,16 +2417,17 @@
       if
+ 
 (roleNam
@@ -2484,32 +2484,36 @@
                 
+    
 roleName =%0A     
@@ -2531,16 +2531,20 @@
         
+    
 CommonTa
@@ -2617,32 +2617,36 @@
                 
+    
 expressionLangua
@@ -2688,72 +2688,12 @@
     
-break;%0A            %7D%0A        %7D%0A%0A        if (roleName == null %7C%7C 
+if (
 Stri
@@ -2702,16 +2702,19 @@
 Utils.is
+Not
 Empty(ro
@@ -2740,115 +2740,135 @@
     
-throw new HumanTaskRuntimeException(%22The
+        roleName =
  role
- name cannot be empty: %22 +%0A                    tFrom.toString(
+Name.trim();%0A                    orgEnties.add(peopleQueryEvaluator.createGroupOrgEntityForRole(roleName
 ));%0A
@@ -2879,16 +2879,17 @@
     
-%7D else %7B
+        %7D
 %0A   
@@ -2901,221 +2901,172 @@
     
-roleName = roleName.trim();%0A        %7D%0A%0A        List%3COrganizationalEntityDAO%3E orgEnties = new ArrayList%3COrganizationalEntityDAO%3E();%0A        orgEnties.add(peopleQueryEvaluator.createGroupOrgEntityForRole(roleName));
+%7D%0A        %7D%0A%0A        if (orgEnties.size() == 0) %7B%0A            throw new HumanTaskRuntimeException(%22There must be at least one role: %22 + tFrom.toString());%0A        %7D
 %0A%0A  

Fix for wso2/product-ei/issues/2701